diff --git a/package-lock.json b/package-lock.json index 4855cc62a..3e58d8db9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -149,6 +149,7 @@ "file-saver": "^2.0.5", "firebase": "^8.10.1", "g": "^2.0.1", + "gelf-pro": "^1.3.12", "global": "^4.4.0", "hammerjs": "^2.0.8", "howler": "^2.2.3", @@ -17323,6 +17324,14 @@ "node": ">=0.10.0" } }, + "node_modules/gelf-pro": { + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/gelf-pro/-/gelf-pro-1.3.12.tgz", + "integrity": "sha512-gZcOmLA26WbszShVHhDwjONMZZFvtpctibjY3Mu84sAzMg8VJscFp94UOO4zGLoCfepOWvcysdu+IZT0mWfL6Q==", + "dependencies": { + "lodash": "~4.17.21" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -57314,6 +57323,14 @@ } } }, + "gelf-pro": { + "version": "1.3.12", + "resolved": "https://registry.npmjs.org/gelf-pro/-/gelf-pro-1.3.12.tgz", + "integrity": "sha512-gZcOmLA26WbszShVHhDwjONMZZFvtpctibjY3Mu84sAzMg8VJscFp94UOO4zGLoCfepOWvcysdu+IZT0mWfL6Q==", + "requires": { + "lodash": "~4.17.21" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", diff --git a/package.json b/package.json index 97b4363f7..61c21e17b 100644 --- a/package.json +++ b/package.json @@ -165,6 +165,7 @@ "file-saver": "^2.0.5", "firebase": "^8.10.1", "g": "^2.0.1", + "gelf-pro": "^1.3.12", "global": "^4.4.0", "hammerjs": "^2.0.8", "howler": "^2.2.3", diff --git a/src/app/app-routing.module.ts b/src/app/app-routing.module.ts index 614b5ce22..06b1bf283 100644 --- a/src/app/app-routing.module.ts +++ b/src/app/app-routing.module.ts @@ -309,8 +309,13 @@ const routes = [ { path: 'crop-image', loadChildren: () => import('./modals/crop-image/crop-image.module').then( m => m.CropImagePageModule) + }, + { + path: 'event-recurrence', + loadChildren: () => import('./modals/event-recurrence/event-recurrence.module').then( m => m.EventRecurrencePageModule) } + /* path: 'chat', component: ChatPage diff --git a/src/app/app.module.ts b/src/app/app.module.ts index a2cc256b9..d69ae0ea4 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -96,6 +96,8 @@ import { DeplomaOptionsPageModule } from './shared/popover/deploma-options/deplo import { DiplomaOptionsPage } from './shared/popover/deploma-options/deploma-options.page'; import { ImageCropperModule } from 'ngx-image-cropper'; import { metricsInterceptor, MetricsInterceptor } from './interceptors/metter.interceptor'; +import { environment } from 'src/environments/environment'; + // import { ServiceWorkerModule } from '@angular/service-worker'; // import { AngularFireModule } from '@angular/fire'; // import { AngularFireMessagingModule } from '@angular/fire/messaging'; diff --git a/src/app/modals/event-recurrence/event-recurrence-routing.module.ts b/src/app/modals/event-recurrence/event-recurrence-routing.module.ts new file mode 100644 index 000000000..7c1a2322d --- /dev/null +++ b/src/app/modals/event-recurrence/event-recurrence-routing.module.ts @@ -0,0 +1,17 @@ +import { NgModule } from '@angular/core'; +import { Routes, RouterModule } from '@angular/router'; + +import { EventRecurrencePage } from './event-recurrence.page'; + +const routes: Routes = [ + { + path: '', + component: EventRecurrencePage + } +]; + +@NgModule({ + imports: [RouterModule.forChild(routes)], + exports: [RouterModule], +}) +export class EventRecurrencePageRoutingModule {} diff --git a/src/app/modals/event-recurrence/event-recurrence.module.ts b/src/app/modals/event-recurrence/event-recurrence.module.ts new file mode 100644 index 000000000..be0b1c935 --- /dev/null +++ b/src/app/modals/event-recurrence/event-recurrence.module.ts @@ -0,0 +1,20 @@ +import { NgModule } from '@angular/core'; +import { CommonModule } from '@angular/common'; +import { FormsModule } from '@angular/forms'; + +import { IonicModule } from '@ionic/angular'; + +import { EventRecurrencePageRoutingModule } from './event-recurrence-routing.module'; + +import { EventRecurrencePage } from './event-recurrence.page'; + +@NgModule({ + imports: [ + CommonModule, + FormsModule, + IonicModule, + EventRecurrencePageRoutingModule + ], + declarations: [EventRecurrencePage] +}) +export class EventRecurrencePageModule {} diff --git a/src/app/modals/event-recurrence/event-recurrence.page.html b/src/app/modals/event-recurrence/event-recurrence.page.html new file mode 100644 index 000000000..395ba7714 --- /dev/null +++ b/src/app/modals/event-recurrence/event-recurrence.page.html @@ -0,0 +1,22 @@ + + +
Este é um evento recorrente
+
+ + + + + + + + + + +
+
diff --git a/src/app/modals/event-recurrence/event-recurrence.page.scss b/src/app/modals/event-recurrence/event-recurrence.page.scss new file mode 100644 index 000000000..e69de29bb diff --git a/src/app/modals/event-recurrence/event-recurrence.page.spec.ts b/src/app/modals/event-recurrence/event-recurrence.page.spec.ts new file mode 100644 index 000000000..a13602171 --- /dev/null +++ b/src/app/modals/event-recurrence/event-recurrence.page.spec.ts @@ -0,0 +1,24 @@ +import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing'; +import { IonicModule } from '@ionic/angular'; + +import { EventRecurrencePage } from './event-recurrence.page'; + +describe('EventRecurrencePage', () => { + let component: EventRecurrencePage; + let fixture: ComponentFixture; + + beforeEach(waitForAsync(() => { + TestBed.configureTestingModule({ + declarations: [ EventRecurrencePage ], + imports: [IonicModule.forRoot()] + }).compileComponents(); + + fixture = TestBed.createComponent(EventRecurrencePage); + component = fixture.componentInstance; + fixture.detectChanges(); + })); + + it('should create', () => { + expect(component).toBeTruthy(); + }); +}); diff --git a/src/app/modals/event-recurrence/event-recurrence.page.ts b/src/app/modals/event-recurrence/event-recurrence.page.ts new file mode 100644 index 000000000..3dd9a3b7a --- /dev/null +++ b/src/app/modals/event-recurrence/event-recurrence.page.ts @@ -0,0 +1,22 @@ +import { Component, OnInit } from '@angular/core'; +import { ModalController } from '@ionic/angular'; + +export type EventRecurrenceComponentReturn = 'EditAll' | 'EditOne' | 'Cancel' + +@Component({ + selector: 'app-event-recurrence', + templateUrl: './event-recurrence.page.html', + styleUrls: ['./event-recurrence.page.scss'], +}) +export class EventRecurrencePage implements OnInit { + + constructor( + private modalController: ModalController + ) { } + + ngOnInit() {} + + close(data: EventRecurrenceComponentReturn) { + this.modalController.dismiss(data) + } +} diff --git a/src/app/pages/agenda/edit-event/edit-event.page.html b/src/app/pages/agenda/edit-event/edit-event.page.html index 7d250d6f6..5399d11d1 100644 --- a/src/app/pages/agenda/edit-event/edit-event.page.html +++ b/src/app/pages/agenda/edit-event/edit-event.page.html @@ -168,7 +168,7 @@ -
+
@@ -200,7 +200,7 @@
-
+
@@ -499,7 +499,7 @@ - diff --git a/src/app/pages/agenda/edit-event/edit-event.page.ts b/src/app/pages/agenda/edit-event/edit-event.page.ts index b000c5f22..ffb3ce6bc 100644 --- a/src/app/pages/agenda/edit-event/edit-event.page.ts +++ b/src/app/pages/agenda/edit-event/edit-event.page.ts @@ -1,6 +1,5 @@ import { Component, OnInit } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; -import { Router } from '@angular/router'; import { AlertController, ModalController, NavParams } from '@ionic/angular'; import { Attachment } from 'src/app/models/attachment.model'; import { EventBody } from 'src/app/models/eventbody.model'; @@ -24,6 +23,7 @@ import { Observable } from 'rxjs'; import { RoleIdService } from 'src/app/services/role-id.service' import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; import { AttendeesLIstChangeDetector } from 'src/app/services/Repositorys/Agenda/async/change/attendeesLIstChangeDetector'; +import { EventRecurrencePage, EventRecurrenceComponentReturn } from 'src/app/modals/event-recurrence/event-recurrence.page'; const CUSTOM_DATE_FORMATS: NgxMatDateFormats = { parse: { @@ -36,6 +36,14 @@ const CUSTOM_DATE_FORMATS: NgxMatDateFormats = { monthYearA11yLabel: "MMMM YYYY" } } + + +export interface EditEventPageParams { + eventId: string + caller?: string + closeModal: Boolean +} + @Component({ selector: 'app-edit-event', templateUrl: './edit-event.page.html', @@ -46,6 +54,8 @@ const CUSTOM_DATE_FORMATS: NgxMatDateFormats = { }) export class EditEventPage implements OnInit { + static params: EditEventPageParams + Form: FormGroup; validateFrom = false @@ -102,6 +112,8 @@ export class EditEventPage implements OnInit { serverCurrentList = [] CalendarNamesOptions = ['Oficial', 'Pessoal'] + editAllEvent = false + closeModal = false constructor( private modalController: ModalController, @@ -109,7 +121,6 @@ export class EditEventPage implements OnInit { public eventsService: EventsService, public alertController: AlertController, private attachmentsService: AttachmentsService, - private router: Router, public ThemeService: ThemeService, private httpErrorHandle: HttpErrorHandle, private contactsService: ContactsService, @@ -126,8 +137,11 @@ export class EditEventPage implements OnInit { console.log('this.postEvent', this.postEvent) this.caller = this.navParams.get('caller'); + this.closeModal = this.navParams.get('closeModal'); + this.initCalendarName = this.postEvent.CalendarName; this.allDayCheck = this.postEvent.IsAllDayEvent; + this.validationEditAllEvent() @@ -243,10 +257,6 @@ export class EditEventPage implements OnInit { this.modalController.dismiss({ action: 'cancel' }); } - goBack() { - - this.router.navigate(['/home', this.caller]); - } roundTimeQuarterHour(timeToReturn = new Date()) { let date = timeToReturn || new Date(); @@ -389,55 +399,41 @@ export class EditEventPage implements OnInit { } } - validationEditAllEvent() { - if (this.postEvent.IsRecurring && this.postEvent.EventRecurrence.frequency != 'never') { - this.alertController.create({ - header: 'Editar evento?', - message: 'Este evento tem recorrência, deseja editar a Sequência de eventos?', - inputs: [ - { - name: 'confirm', - type: 'checkbox', - label: '', - value: 'confirm', - checked: false - } - ], - buttons: [ - { - text: 'Sim', - handler: (data) => { - // Check if the checkbox is checked - if (data.includes('confirm')) { - this.save_v2(true) - } else { - this.save_v2(false) - } - } - }, - { - text: 'Não', - handler: () => { - this.save_v2(false) - } - } - ] - }).then(res => { - res.present(); + async validationEditAllEvent() { + if (this.postEvent.IsRecurring) { + + const modal = await this.modalController.create({ + component: EventRecurrencePage, + componentProps: {}, + cssClass: 'event-recurrence-modal', + }); - } else { - this.save_v2(false) + + modal.onDidDismiss().then((res) => { + + const data: EventRecurrenceComponentReturn = res.data + if(data =='EditAll') { + this.editAllEvent = true + } else if (data == 'EditOne') { + this.editAllEvent = false + } else if(data == 'Cancel') { + this.cancel() + } else { + this.cancel() + } + }); + + await modal.present(); } } @XTracerAsync({name:'mobile/create-event', bugPrint: true, daley: 4000}) - async save_v2(editAllEvent, tracing?: TracingType) { + async save_v2(tracing?: TracingType) { this.injectValidation() this.runValidation() - if (this.Form.invalid) { return false } @@ -447,9 +443,9 @@ export class EditEventPage implements OnInit { const calendar = await this.agendaDataRepository.getCalendarByUserId(this.selectedUserCalendar) if(calendar.isOk()) { - this.agendaDataRepository.updateEvent(this.postEvent.EventId, this.postEvent, editAllEvent, calendar.value, tracing).subscribe((value) => { + this.agendaDataRepository.updateEvent(this.postEvent.EventId, this.postEvent, this.editAllEvent, calendar.value, tracing).subscribe((value) => { console.log(value) - this.goBack(); + this.close(); this.httpErrorHandle.httpsSucessMessagge('Editar evento') tracing.setAttribute('outcome', 'success') }, ((error) => { @@ -484,8 +480,6 @@ export class EditEventPage implements OnInit { } - await this.saveDocument() - if (this.addedAttachmentsList.length > 0) { this.agendaDataRepository.addEventAttachment(this.postEvent.EventId, this.loadedEventAttachments, tracing).subscribe((value) => { console.log(value) @@ -519,45 +513,6 @@ export class EditEventPage implements OnInit { } - async saveDocument() { - - try { - - for (let e of this.loadedEventAttachments) { - const id: any = e.Id - const remove = e['remove'] - - if (id == 'add') { - //data.selected - const DocumentToSave = { - SourceTitle: e.SourceName, - ParentId: this.postEvent.EventId, - Source: '1', - SourceId: e.SourceId, - ApplicationId: e.ApplicationId.toString(), - Id: '0', - Link: '', - SerialNumber: '', - }; - - // await this.attachmentsService.setEventAttachmentById(DocumentToSave).toPromise(); - - } else if (remove) { - await this.attachmentsService.deleteEventAttachmentById(e.Id).toPromise() - } - } - } catch (error) { - - } finally { - - } - - this.modalController.dismiss({ - isEventEdited: this.isEventEdited, - postEvent: this.postEvent - }); - - } async openAttendees() { if (window.innerWidth > 801) { diff --git a/src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts b/src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts index 712f68752..207712304 100644 --- a/src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts +++ b/src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts @@ -132,7 +132,7 @@ export class EventActionsPopoverPage implements OnInit { try { /* await this.processes.PostTaskAction(body).toPromise(); */ - this.agendaDataRepository.eventToaprovalStatus(this.serialNumber, 'Revision').subscribe((value) => { + this.agendaDataRepository.eventToaprovalStatus(this.serialNumber, 'Revision', res.data.note).subscribe((value) => { this.httpErrorHandle.httpsSucessMessagge('Rever') this.TaskService.loadEventosParaAprovacao() this.goBack(); @@ -162,7 +162,7 @@ export class EventActionsPopoverPage implements OnInit { const loader = this.toastService.loading(); try { /* await this.processes.PostTaskAction(body).toPromise(); */ - this.agendaDataRepository.eventToaprovalStatus(this.serialNumber, 'Declined').subscribe((value) => { + this.agendaDataRepository.eventToaprovalStatus(this.serialNumber, 'Declined', '').subscribe((value) => { this.TaskService.loadEventosParaAprovacao() this.httpErrorHandle.httpsSucessMessagge('Rejeitar') this.goBack(); diff --git a/src/app/pages/agenda/view-event/view-event.page.ts b/src/app/pages/agenda/view-event/view-event.page.ts index 55ed88861..5c652febb 100644 --- a/src/app/pages/agenda/view-event/view-event.page.ts +++ b/src/app/pages/agenda/view-event/view-event.page.ts @@ -11,14 +11,10 @@ import { ExpedientTaskModalPageNavParamsTask } from 'src/app/models/ExpedientTas import { DocumentSetUpMeetingPage } from 'src/app/modals/document-set-up-meeting/document-set-up-meeting.page'; import { ExpedientTaskModalPage } from '../../gabinete-digital/expediente/expedient-task-modal/expedient-task-modal.page'; import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page'; -import { BackgroundService } from 'src/app/services/background.service'; -import { StorageService } from 'src/app/services/storage.service'; import { ThemeService } from 'src/app/services/theme.service' import { RouteService } from 'src/app/services/route.service'; import { SessionStore } from 'src/app/store/session.service'; import { HttpErrorHandle } from 'src/app/services/http-error-handle.service' -import { AttachmentsService } from 'src/app/services/attachments.service'; -import { DateService } from 'src/app/services/date.service'; import { AgendaDataRepositoryService } from 'src/app/services/Repositorys/Agenda/agenda-data-repository.service'; import { TracingType, XTracerAsync } from 'src/app/services/monitoring/opentelemetry/tracer'; import { isHttpError } from 'src/app/services/http.service'; @@ -62,20 +58,15 @@ export class ViewEventPage implements OnInit { constructor( private modalController: ModalController, - /* private navParams: NavParams, */ public eventsService: EventsService, public alertController: AlertController, public popoverController: PopoverController, private activatedRoute: ActivatedRoute, private toastService: ToastService, public platform: Platform, - private backgroundservice: BackgroundService, - private storage: StorageService, public ThemeService: ThemeService, private RouteService: RouteService, private httpErrorHandle: HttpErrorHandle, - private attachmentsService: AttachmentsService, - private dateService: DateService, private agendaDataRepository: AgendaDataRepositoryService, public p: PermissionService, ) { @@ -112,25 +103,6 @@ export class ViewEventPage implements OnInit { ngOnInit() { this.loadEvent(); - // this.backgroundservice.registerBackService('Online', () => { - // this.storage.get('eventEdit').then((req) => { - // JSON.parse(req).forEach(element => { - // this.eventsService.editEvent(element, 2, 3).subscribe((res) => { - // this.storage.remove('eventEdit') - - // }) - // }); - // }) - // this.storage.get('eventDelete').then((req) => { - // JSON.parse(req).forEach(element => { - // this.eventsService.editEvent(element, 2, 3).subscribe((res) => { - // this.storage.remove('eventDelete') - - // }) - // }); - // }) - // this.loadEvent(); - // }); window.onresize = (event) => { // if not mobile remove all component @@ -141,25 +113,7 @@ export class ViewEventPage implements OnInit { } - // getEventsFromDB () { - // return new Promise((resolve, reject) => { - // if (this.platform.is('desktop') || this.platform.is('mobileweb')) { - // this.storage.get('agendaResponse').then((events) => { - // resolve(events) - // }) - // } else { - // this.sqliteservice.getAllEvents().then((events: any[] = []) => { - // resolve(events) - - // }) - // } - // }).catch ((error) => { - // console.error(error); - // }); - // } - - openOptions() { } close() { this.modalController.dismiss(this.isEventEdited); @@ -232,37 +186,6 @@ export class ViewEventPage implements OnInit { } - /* loadEvent1() { - - - if(this.sesseionStora.user.Profile == 'MDGPR' || this.sesseionStora.user.Profile == 'PR') { - this.eventsService.getEvent(this.eventId).subscribe(res => { - - res = this.dateService.fixDate(res as any) - this.loadedEvent = res; - this.setTimeZone() - // this.addEventToDb(res); - }, (error) => { - }); - } else { - - - if(this.CalendarId) { - this.eventsService.genericGetEvent(this.eventId, this.CalendarId).subscribe(res => { - - res = this.dateService.fixDate(res as any) - this.loadedEvent = res; - this.setTimeZone() - - }, (error) => { - - }); - } - - } - - } */ - deleteYesOrNo() { if (this.loadedEvent.IsRecurring) { this.alertController.create({ @@ -350,49 +273,6 @@ export class ViewEventPage implements OnInit { }); - - - /* if (this.sesseionStora.user.Profile == 'MDGPR' || this.sesseionStora.user.Profile == 'PR') { - this.eventsService.deleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName).subscribe(async () => { - const alert = await this.alertController.create({ - cssClass: 'my-custom-class', - header: 'Evento removido', - buttons: ['OK'] - }); - - setTimeout(() => { - alert.dismiss(); - }, 1500); - this.goBack(); - this.httpErrorHandle.httpsSucessMessagge('delete event') - }, () => { }, - () => { - loader.remove(); - }); - - } else { - - this.eventsService.genericDeleteEvent(this.loadedEvent.EventId, 0, this.loadedEvent.CalendarName, this.loadedEvent.CalendarId).subscribe(async () => { - const alert = await this.alertController.create({ - cssClass: 'my-custom-class', - header: 'Evento removido', - buttons: ['OK'] - }); - - setTimeout(() => { - alert.dismiss(); - }, 1500); - this.goBack(); - this.httpErrorHandle.httpsSucessMessagge('delete event') - }, (error) => { - this.httpErrorHandle.httpStatusHandle(error) - }, - () => { - loader.remove(); - }); - - - } */ } @@ -435,6 +315,7 @@ export class ViewEventPage implements OnInit { componentProps: { eventId: this.loadedEvent.EventId, caller: this.caller, + closeModal: true }, cssClass: 'modal modal-desktop', @@ -451,10 +332,10 @@ export class ViewEventPage implements OnInit { this.loadEvent() this.isEventEdited = true; - if (res.data.Attendees?.length >= 1) { - this.loadedEvent.HasAttachments = true - this.getAttachments() - } + // if (res.data.Attendees?.length >= 1) { + // this.loadedEvent.HasAttachments = true + // // this.getAttachments() + // } console.log('res', res) } @@ -491,11 +372,11 @@ export class ViewEventPage implements OnInit { this.loadEvent() this.isEventEdited = true; - if (res.data.Attendees?.length >= 1) { - this.loadedEvent.HasAttachments = true - this.getAttachments() - } - console.log('res', res) + // if (res.data.Attendees?.length >= 1) { + // this.loadedEvent.HasAttachments = true + // // this.getAttachments() + // } + // console.log('res', res) } }); @@ -508,17 +389,6 @@ export class ViewEventPage implements OnInit { } - getAttachments() { - if (this.loadedEvent.HasAttachments) { - this.attachmentsService.getAttachmentsById(this.loadedEvent.EventId).subscribe(res => { - this.loadedEvent.Attachments = res; - - }, ((erro) => { - console.error('editgetAttchament', erro) - })); - } - } - async LoadDocumentDetails() { const docId = this.loadedEvent.Attachments[this.dicIndex].SourceId diff --git a/src/app/pages/chat/group-messages/group-messages.page.ts b/src/app/pages/chat/group-messages/group-messages.page.ts index 889cde40b..d71e5ff79 100644 --- a/src/app/pages/chat/group-messages/group-messages.page.ts +++ b/src/app/pages/chat/group-messages/group-messages.page.ts @@ -341,29 +341,6 @@ export class GroupMessagesPage implements OnInit, AfterViewInit, OnDestroy { this.loadFiles(); } - // async goToEvent(event: any) { - // let classs; - // if (window.innerWidth < 701) { - // classs = 'modal modal-desktop' - // } else { - // classs = 'modal modal-desktop showAsideOptions' - // } - - // const modal = await this.modalController.create({ - // component: ViewEventPage, - // componentProps: { - // eventId: event.id, - // CalendarId: event.calendarId - // }, - // cssClass: classs, - // }); - - // modal.onDidDismiss().then((res) => { - - // }); - // await modal.present(); - // } - ngOnDestroy() { window.removeEventListener('scroll', this.scrollChangeCallback, true); } diff --git a/src/app/pages/events/events.page.ts b/src/app/pages/events/events.page.ts index fb7c1ae6a..0e7bbc9d5 100644 --- a/src/app/pages/events/events.page.ts +++ b/src/app/pages/events/events.page.ts @@ -264,6 +264,7 @@ export class EventsPage implements OnInit { } } catch (error) { tracing.setAttribute('component.catch', 'true') + tracing.setAttribute('component.catch', JSON.stringify(error)) tracing.setAttribute('outcome', 'failed') } diff --git a/src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.ts b/src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.ts index 38d99d7bd..80fd23d8a 100644 --- a/src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.ts +++ b/src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.ts @@ -197,7 +197,7 @@ export class ApproveEventPage implements OnInit { try { - this.AgendaDataRepositoryService.eventToaprovalStatus(serialNumber, 'Revision').subscribe((value) => { + this.AgendaDataRepositoryService.eventToaprovalStatus(serialNumber, 'Revision', res.data.note).subscribe((value) => { this.httpErrorHandle.httpsSucessMessagge('Rever') this.TaskService.loadEventosParaAprovacao(); this.goBack(); @@ -229,7 +229,7 @@ export class ApproveEventPage implements OnInit { const loader = this.toastService.loading() try { /* await this.processes.PostTaskAction(body).toPromise(); */ - this.AgendaDataRepositoryService.eventToaprovalStatus(serialNumber, 'Declined').subscribe((value) => { + this.AgendaDataRepositoryService.eventToaprovalStatus(serialNumber, 'Declined', '').subscribe((value) => { this.httpErrorHandle.httpsSucessMessagge('Rejeitar') this.TaskService.loadEventosParaAprovacao(); this.goBack(); diff --git a/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts b/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts index 3d89c26a2..304bd9d59 100644 --- a/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts +++ b/src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts @@ -268,10 +268,10 @@ export class AgendaDataRepositoryService { } - eventToaprovalStatus(eventId, status) { + eventToaprovalStatus(eventId, status, comment: string) { let statusObject = { status: this.utils.statusEventAproval(status), - comment: "" + comment: comment } return this.agendaDataService.updateEventStatus(eventId, statusObject) } @@ -322,6 +322,7 @@ export class AgendaDataRepositoryService { } + async clearSharedCalendar() { return await this.agendaLocalDataSourceService.clearSharedCalendar() } diff --git a/src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts b/src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts index b3a4b56f6..c7fafa6f3 100644 --- a/src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts +++ b/src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts @@ -45,6 +45,22 @@ export class AgendaLocalDataSourceService { } } + async clearAndAddRecords(data: SharedCalendarListItemOutputDTO[]) { + try { + await AgendaDataSource.transaction('rw', AgendaDataSource.shareCalendar, async () => { + // Clear existing records from myTable + await AgendaDataSource.shareCalendar.clear(); + + await AgendaDataSource.shareCalendar.bulkAdd(data); + + }); + console.log('Clear and add operations completed within transaction.'); + } catch (error) { + console.error('Error performing transaction:', error, data); + } + } + + async createCalendar(data: SharedCalendarListItemOutputDTO) { // db.eve try { diff --git a/src/app/services/agenda/list-box.service.ts b/src/app/services/agenda/list-box.service.ts index d88e1f0f1..be5c58f63 100644 --- a/src/app/services/agenda/list-box.service.ts +++ b/src/app/services/agenda/list-box.service.ts @@ -377,7 +377,7 @@ export class ListBoxService { const hours = Math.floor((totalMinutes % (60 * 24)) / 60); const minutes = totalMinutes % 60; - return `${days}d` + return `${days}d ${hours}h ${minutes}m` } diff --git a/src/app/shared/agenda/approve-event/approve-event.page.ts b/src/app/shared/agenda/approve-event/approve-event.page.ts index 40f1a8b5c..898b3aeb8 100644 --- a/src/app/shared/agenda/approve-event/approve-event.page.ts +++ b/src/app/shared/agenda/approve-event/approve-event.page.ts @@ -50,8 +50,6 @@ export class ApproveEventPage implements OnInit { constructor( private router: Router, private modalController: ModalController, - private processes: ProcessesService, - private attachmentsService: AttachmentsService, private popoverController: PopoverController, private toastService: ToastService, public ThemeService: ThemeService, @@ -150,7 +148,7 @@ export class ApproveEventPage implements OnInit { try { /* await this.processes.PostTaskAction(body).toPromise() */ - this.agendaDataRepository.eventToaprovalStatus(serialNumber, 'Declined').subscribe((value) => { + this.agendaDataRepository.eventToaprovalStatus(serialNumber, 'Declined', "").subscribe((value) => { this.httpErroHandle.httpsSucessMessagge('Rejeitar'); this.TaskService.loadEventosParaAprovacao(); }, ((error) => { @@ -240,7 +238,7 @@ export class ApproveEventPage implements OnInit { try { /* await this.processes.PostTaskAction(body).toPromise(); */ - this.agendaDataRepository.eventToaprovalStatus(serialNumber, 'Revision').subscribe((value) => { + this.agendaDataRepository.eventToaprovalStatus(serialNumber, 'Revision', res.data.note).subscribe((value) => { this.httpErroHandle.httpsSucessMessagge('Rever') this.TaskService.loadEventosParaAprovacao(); this.close(); diff --git a/src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts b/src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts index 1ac72650a..c129497f9 100644 --- a/src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts +++ b/src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts @@ -390,7 +390,7 @@ export class EditEventToApprovePage implements OnInit { const calendar = await this.agendaDataRepository.getCalendarByUserId((this.eventProcess as any).owner.wxUserId) if(calendar.isOk()) { - this.agendaDataRepository.updateEvent(this.eventProcess.serialNumber, event, false, calendar.value, tracing).subscribe((value) => { + this.agendaDataRepository.updateEvent(this.eventProcess.serialNumber, event, true, calendar.value, tracing).subscribe((value) => { console.log(value) this.close() tracing.setAttribute('outcome', 'success') diff --git a/src/app/shared/agenda/edit-event/edit-event.page.html b/src/app/shared/agenda/edit-event/edit-event.page.html index b735f0d94..6f19d299d 100644 --- a/src/app/shared/agenda/edit-event/edit-event.page.html +++ b/src/app/shared/agenda/edit-event/edit-event.page.html @@ -179,11 +179,20 @@ -
+ +
@@ -423,7 +432,7 @@ - diff --git a/src/app/shared/agenda/edit-event/edit-event.page.scss b/src/app/shared/agenda/edit-event/edit-event.page.scss index 652879fc7..6a81b00d1 100644 --- a/src/app/shared/agenda/edit-event/edit-event.page.scss +++ b/src/app/shared/agenda/edit-event/edit-event.page.scss @@ -17,7 +17,7 @@ ion-content{ padding: 30px 20px 0px 20px; color:#000; transform: translate3d(0, 1px, 0); - + .title-content{ margin: 0px auto; padding: 0 !important; @@ -90,7 +90,7 @@ ion-content{ .list-people{ float: left; - + } .add-people{ width: rem(45); @@ -149,7 +149,7 @@ ion-content{ --color:#ffffff; margin:10px; } - + .text-input{ width: 100%; border: 1px solid #ebebeb; @@ -157,7 +157,7 @@ ion-content{ padding: 0 !important; border-radius: 5px; } - + /* Error Messages */ .error{ color:red; @@ -171,7 +171,7 @@ ion-content{ } - + .app-name{ background: var(--title-text-color); border-radius: 18px; @@ -211,4 +211,23 @@ ion-content{ .materia-top { padding-top: 7px; -} \ No newline at end of file +} + + +.days-to-select{ + width: 40px; + height: 40px; + display: flex; + align-items: center; + justify-content: center; + background: #ebebeb; + border-radius: 50px; + box-shadow: 0px 0px 10px #f9f9f9; + border: 1px solid #d1d1d1; + cursor: pointer; + user-select: none; + -webkit-border-radius: 50px; + -moz-border-radius: 50px; + -ms-border-radius: 50px; + -o-border-radius: 50px; +} diff --git a/src/app/shared/agenda/edit-event/edit-event.page.ts b/src/app/shared/agenda/edit-event/edit-event.page.ts index 46d5e8a10..2e21bb110 100644 --- a/src/app/shared/agenda/edit-event/edit-event.page.ts +++ b/src/app/shared/agenda/edit-event/edit-event.page.ts @@ -21,6 +21,7 @@ import { TableSharedCalendar } from 'src/app/services/Repositorys/Agenda/agenda- import { RoleIdService } from 'src/app/services/role-id.service' import { XTracerAsync, TracingType } from 'src/app/services/monitoring/opentelemetry/tracer'; import { AttendeesLIstChangeDetector } from 'src/app/services/Repositorys/Agenda/async/change/attendeesLIstChangeDetector'; +import { EventRecurrenceComponentReturn, EventRecurrencePage } from 'src/app/modals/event-recurrence/event-recurrence.page'; @Component({ selector: 'app-edit-event', templateUrl: './edit-event.page.html', @@ -105,6 +106,7 @@ export class EditEventPage implements OnInit { CalendarNamesOptions = ['Oficial', 'Pessoal'] dateDifference = 0 + editAllEvent = false constructor( private modalController: ModalController, @@ -118,6 +120,8 @@ export class EditEventPage implements OnInit { public RoleIdService: RoleIdService, ) { this.sharedCalendar = this.agendaDataRepository.getShareCalendarItemsLiveWithOrder() + + } hasPrCalendar(data: TableSharedCalendar[]) { @@ -148,6 +152,7 @@ export class EditEventPage implements OnInit { this.allDayCheck = this.postEvent.IsAllDayEvent; if (!this.restoreTemporaryData()) { + this.validationEditAllEvent() // clear if (this._postEvent) { @@ -366,50 +371,37 @@ export class EditEventPage implements OnInit { } - validationEditAllEvent() { + async validationEditAllEvent() { + + if (this.postEvent.IsRecurring ) { + const modal = await this.modalController.create({ + component: EventRecurrencePage, + componentProps: {}, + cssClass: 'event-recurrence-modal', - if (this.postEvent.IsRecurring && this._postEvent.EventRecurrence.frequency != 'never') { - this.alertController.create({ - header: 'Editar evento?', - message: 'Este evento tem recorrência, deseja editar a Sequência de eventos?', - inputs: [ - { - name: 'confirm', - type: 'checkbox', - label: '', - value: 'confirm', - checked: false - } - ], - buttons: [ - { - text: 'Sim', - handler: (data) => { - // Check if the checkbox is checked - if (data.includes('confirm')) { - this.save_v2(true) - } else { - this.save_v2(false) - } - } - }, - { - text: 'Não', - handler: () => { - this.save_v2(false) - } - } - ] - }).then(res => { - res.present(); }); - } else { - this.save_v2(false) + + modal.onDidDismiss().then((res) => { + + const data: EventRecurrenceComponentReturn = res.data + if(data =='EditAll') { + this.editAllEvent = true + } else if (data == 'EditOne') { + this.editAllEvent = false + } else if(data == 'Cancel') { + this.close() + } else { + this.close() + } + }); + + await modal.present(); } + } @XTracerAsync({name:'desktop/edit-event', bugPrint: true, daley: 4000}) - async save_v2(editAllEvent, tracing?: TracingType) { + async save_v2(tracing?: TracingType) { this.injectValidation() this.runValidation() @@ -429,7 +421,7 @@ export class EditEventPage implements OnInit { if(calendar.isOk()) { this.showLoader = true; - this.agendaDataRepository.updateEvent(this._postEvent.EventId, this._postEvent, editAllEvent, calendar.value, tracing).subscribe((value) => { + this.agendaDataRepository.updateEvent(this._postEvent.EventId, this._postEvent, this.editAllEvent, calendar.value, tracing).subscribe((value) => { console.log(value) this.httpErrorHandle.httpsSucessMessagge('Editar evento') diff --git a/src/app/shared/chat/group-messages/group-messages.page.ts b/src/app/shared/chat/group-messages/group-messages.page.ts index 3ac80c888..04843c6e6 100644 --- a/src/app/shared/chat/group-messages/group-messages.page.ts +++ b/src/app/shared/chat/group-messages/group-messages.page.ts @@ -12,7 +12,6 @@ import { SearchList } from 'src/app/models/search-document'; import { FileService } from 'src/app/services/functions/file.service'; import { ViewDocumentPage } from 'src/app/modals/view-document/view-document.page'; import { ThemeService } from 'src/app/services/theme.service' -import { ViewEventPage } from 'src/app/modals/view-event/view-event.page'; import { Storage } from '@ionic/storage'; import { ChatSystemService } from 'src/app/services/chat/chat-system.service'; import { MessageService } from 'src/app/services/chat/message.service'; @@ -175,28 +174,6 @@ export class GroupMessagesPage implements OnInit, OnChanges, AfterViewInit, OnDe } catch (err) { } } - // async goToEvent(event: any) { - // let classs; - // if (window.innerWidth < 701) { - // classs = 'modal modal-desktop' - // } else { - // classs = 'modal modal-desktop showAsideOptions' - // } - - // const modal = await this.modalController.create({ - // component: ViewEventPage, - // componentProps: { - // eventId: event.id, - // CalendarId: event.calendarId - // }, - // cssClass: classs, - // }); - - // modal.onDidDismiss().then((res) => { - - // }); - // await modal.present(); - // } ngAfterViewInit() { this.scrollChangeCallback = () => this.onContentScrolled(event); diff --git a/src/app/shared/chat/messages/messages.page.ts b/src/app/shared/chat/messages/messages.page.ts index fc3c1b623..89d28c5c0 100644 --- a/src/app/shared/chat/messages/messages.page.ts +++ b/src/app/shared/chat/messages/messages.page.ts @@ -392,27 +392,6 @@ export class MessagesPage implements OnInit, OnChanges, AfterViewInit, OnDestroy return this.timeService.showDateDuration(start); } - // async goToEvent(event: any) { - // let classs; - // if (window.innerWidth < 701) { - // classs = 'modal modal-desktop' - // } else { - // classs = 'modal modal-desktop showAsideOptions' - // } - // const modal = await this.modalController.create({ - // component: ViewEventPage, - // componentProps: { - // eventId: event.id, - // CalendarId: event.calendarId - // }, - // cssClass: classs, - // }); - - // modal.onDidDismiss().then((res) => { - - // }); - // await modal.present(); - // } sendMessage() { this.ChatSystemService.getDmRoom(this.roomId).send({}) diff --git a/src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts b/src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts index 6dc6eaab2..b50ce81dc 100644 --- a/src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts +++ b/src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts @@ -6,12 +6,8 @@ import { SearchList } from 'src/app/models/search-document'; import { AttendeesPageModal } from 'src/app/pages/events/attendees/attendees.page'; import { SearchPage } from 'src/app/pages/search/search.page'; import { AttachmentsService } from 'src/app/services/attachments.service'; -import { EventsService } from 'src/app/services/events.service'; -import { ProcessesService } from 'src/app/services/processes.service'; -import { ToastService } from 'src/app/services/toast.service'; import { Event, EventToApproveEdit } from '../../../models/event.model'; import { NgxMatDateFormats, NGX_MAT_DATE_FORMATS } from '@angular-material-components/datetime-picker'; -import { NavigationExtras, Router } from '@angular/router'; import { ThemeService } from 'src/app/services/theme.service' import { HttpErrorHandle } from 'src/app/services/http-error-handle.service' import { AgendaDataRepositoryService } from 'src/app/services/Repositorys/Agenda/agenda-data-repository.service'; @@ -320,7 +316,7 @@ export class EditEventToApproveComponent implements OnInit { const calendar = await this.agendaDataRepository.getCalendarByUserId((this.eventProcess as any).owner.wxUserId) if(calendar.isOk()) { - this.agendaDataRepository.updateEvent(this.eventProcess.serialNumber, event,false, calendar.value, tracing).subscribe((value) => { + this.agendaDataRepository.updateEvent(this.eventProcess.serialNumber, event, true, calendar.value, tracing).subscribe((value) => { console.log(value) this.httpErroHalde.httpsSucessMessagge('Editar evento') window['approve-event-getTask']() @@ -382,40 +378,6 @@ export class EditEventToApproveComponent implements OnInit { } - - - - /* this.loadedAttachments.forEach((document:any)=>{ - if(document['action'] == 'add') { - delete document.action - this.attachmentsService.setEventAttachmentById(document).subscribe(()=>{ - window['approve-event-getTask'] () - // this.toastService._successMessage(); - }, error =>{ - if(error.status == 0) { - this.toastService._badRequest('Sem acesso à internet. Por favor verifique sua conexão') - } else { - - this.toastService._badRequest(); - } - }); - } else if(document['action'] == 'delete') { - delete document.action - this.attachmentsService.deleteEventAttachmentById(document.Id).subscribe( res=>{ - window['approve-event-getTask'] () - // this.toastService._successMessage() - }, error =>{ - if(error.status == 0) { - this.toastService._badRequest('Sem acesso à internet. Por favor verifique sua conexão') - } else { - - this.toastService._badRequest() - } - }) - } - - }) */ - } async openAttendees() { diff --git a/src/assets/dexie/CODE_OF_CONDUCT.md b/src/assets/dexie/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..0af794b87 --- /dev/null +++ b/src/assets/dexie/CODE_OF_CONDUCT.md @@ -0,0 +1,46 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +* Using welcoming and inclusive language +* Being respectful of differing viewpoints and experiences +* Gracefully accepting constructive criticism +* Focusing on what is best for the community +* Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +* The use of sexualized language or imagery and unwelcome sexual attention or advances +* Trolling, insulting/derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or electronic address, without explicit permission +* Other conduct which could reasonably be considered inappropriate in a professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at code@dexie.org. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/src/assets/dexie/CONTRIBUTING.md b/src/assets/dexie/CONTRIBUTING.md new file mode 100644 index 000000000..68f0fcb16 --- /dev/null +++ b/src/assets/dexie/CONTRIBUTING.md @@ -0,0 +1,65 @@ +HOW TO CONTRIBUTE +================= + +We appreciate contributions in forms of: + +* issues +* help answering questions in [issues](https://github.com/dexie/Dexie.js/issues) and on [stackoverflow](https://stackexchange.com/filters/233583/dexie-stackoverflow) +* fixing bugs via pull-requests +* developing addons or other [derived work](https://dexie.org/docs/DerivedWork) +* promoting Dexie.js +* sharing ideas + +Contribute while developing your own app +======================================== + +Dexie uses pnpm package manager. Refer to [pnpm.io/installation](https://pnpm.io/installation) for how to install pnpm. + +Here is a little cheat-sheet for how to symlink your app's `node_modules/dexie` to a place where you can edit the source, version control your changes and create pull requests back to Dexie. Assuming you've already ran `npm install dexie` for the app your are developing. + +1. Fork Dexie.js from the web gui on github +2. Clone your fork locally by launching a shell/command window and cd to a neutral place (like `~repos/`, `c:\repos` or whatever) +3. Run the following commands: + + ``` + git clone https://github.com/YOUR-USERNAME/Dexie.js.git dexie + cd dexie + pnpm install + pnpm run build + npm link # Or yarn link or pnpm link --global depending on what package manager you are using. + ``` +3. cd to your app directory and write: + ``` + npm link dexie # Or yarn link dexie / pnpm link dexie depending on your package manager. + ``` + +Your app's `node_modules/dexie/` is now sym-linked to the Dexie.js clone on your hard drive so any change you do there will propagate to your app. Build dexie.js using `pnpm run build` or `pnpm run watch`. The latter will react on any source file change and rebuild the dist files. + +That's it. Now you're up and running to test and commit changes to files under dexie/src/* or dexie/test/* and the changes will instantly affect the app you are developing. + +If you're on yarn or pnpm, do the same procedures using yarn link / pnpm link. + +Pull requests are more than welcome. Some advices are: + +* Run pnpm test before making a pull request. +* If you find an issue, a unit test that reproduces it is lovely ;). If you don't know where to put it, put it in `test/tests-misc.js`. We use qunit. Just look at existing tests in `tests-misc.js` to see how they should be written. Tests are transpiled in the build script so you can use ES6 if you like. + +Build +----- +``` +# To install pnpm, see https://pnpm.io/installation +pnpm install +pnpm run build +``` + +Test +---- +``` +pnpm test +``` + +Watch +----- +``` +pnpm run watch +``` diff --git a/src/assets/dexie/LICENSE b/src/assets/dexie/LICENSE new file mode 100644 index 000000000..e06d20818 --- /dev/null +++ b/src/assets/dexie/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/src/assets/dexie/NOTICE b/src/assets/dexie/NOTICE new file mode 100644 index 000000000..9de226815 --- /dev/null +++ b/src/assets/dexie/NOTICE @@ -0,0 +1,15 @@ +Dexie.js + +Copyright (c) 2014-2017 David Fahlander + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/src/assets/dexie/README.md b/src/assets/dexie/README.md new file mode 100644 index 000000000..13b619b4f --- /dev/null +++ b/src/assets/dexie/README.md @@ -0,0 +1,292 @@ +# Dexie.js + +[![NPM Version][npm-image]][npm-url] ![Build Status](https://github.com/dexie/Dexie.js/actions/workflows/main.yml/badge.svg) + +Dexie.js is a wrapper library for indexedDB - the standard database in the browser. https://dexie.org. + +#### Why Dexie.js? + +IndexedDB is the portable database for all browser engines. Dexie.js makes it fun and easy to work with. + +But also: + +* Dexie.js is widely used by 100,000 of web sites, apps and other projects and supports all browsers, Electron for Desktop apps, Capacitor for iOS / Android apps and of course pure PWAs. +* Dexie.js works around bugs in the IndexedDB implementations, giving a more stable user experience. +* It's an easy step to [make it sync](https://dexie.org/#sync). + +#### Hello World + +```html + + + + + + + +``` + +Yes, it's that simple. Read [the docs](https://dexie.org/docs/) to get into the details. + +#### Hello World (for modern browsers) + +All modern browsers support ES modules and top-level awaits. No transipler needed. Here's the previous example in a modern flavour: + +```html + + + + + + +``` + +#### Hello World (React + Typescript) + +Real-world apps are often built using components in various frameworks. Here's a version of Hello World written for React and Typescript. There are also links below this sample to more tutorials for different frameworks... + +```tsx +import React from 'react'; +import { Dexie, type EntityTable } from 'dexie'; +import { useLiveQuery } from 'dexie-react-hooks'; + +// Typing for your entities (hint is to move this to its own module) +export interface Friend { + id: number; + name: string; + age: number; +} + +// Database declaration (move this to its own module also) +export const db = new Dexie('FriendDatabase') as Dexie & { + friends: EntityTable; +}; +db.version(1).stores({ + friends: '++id, age', +}); + +// Component: +export function MyDexieReactComponent() { + const youngFriends = useLiveQuery(() => + db.friends + .where('age') + .below(30) + .toArray() + ); + + return ( + <> +

My young friends

+
    + {youngFriends?.map((f) => ( +
  • + Name: {f.name}, Age: {f.age} +
  • + ))} +
+ + + ); +} +``` + +[Tutorials for React, Svelte, Vue, Angular and vanilla JS](https://dexie.org/docs/Tutorial/Getting-started) + +[API Reference](https://dexie.org/docs/API-Reference) + +[Samples](https://dexie.org/docs/Samples) + +### Performance + +Dexie has kick-ass performance. Its [bulk methods]() take advantage of a lesser-known feature in IndexedDB that makes it possible to store stuff without listening to every onsuccess event. This speeds up the performance to a maximum. + +#### Supported operations + +```js +above(key): Collection; +aboveOrEqual(key): Collection; +add(item, key?): Promise; +and(filter: (x) => boolean): Collection; +anyOf(keys[]): Collection; +anyOfIgnoreCase(keys: string[]): Collection; +below(key): Collection; +belowOrEqual(key): Collection; +between(lower, upper, includeLower?, includeUpper?): Collection; +bulkAdd(items: Array): Promise; +bulkDelete(keys: Array): Promise; +bulkPut(items: Array): Promise; +clear(): Promise; +count(): Promise; +delete(key): Promise; +distinct(): Collection; +each(callback: (obj) => any): Promise; +eachKey(callback: (key) => any): Promise; +eachPrimaryKey(callback: (key) => any): Promise; +eachUniqueKey(callback: (key) => any): Promise; +equals(key): Collection; +equalsIgnoreCase(key): Collection; +filter(fn: (obj) => boolean): Collection; +first(): Promise; +get(key): Promise; +inAnyRange(ranges): Collection; +keys(): Promise; +last(): Promise; +limit(n: number): Collection; +modify(changeCallback: (obj: T, ctx:{value: T}) => void): Promise; +modify(changes: { [keyPath: string]: any } ): Promise; +noneOf(keys: Array): Collection; +notEqual(key): Collection; +offset(n: number): Collection; +or(indexOrPrimayKey: string): WhereClause; +orderBy(index: string): Collection; +primaryKeys(): Promise; +put(item: T, key?: Key): Promise; +reverse(): Collection; +sortBy(keyPath: string): Promise; +startsWith(key: string): Collection; +startsWithAnyOf(prefixes: string[]): Collection; +startsWithAnyOfIgnoreCase(prefixes: string[]): Collection; +startsWithIgnoreCase(key: string): Collection; +toArray(): Promise; +toCollection(): Collection; +uniqueKeys(): Promise; +until(filter: (value) => boolean, includeStopEntry?: boolean): Collection; +update(key: Key, changes: { [keyPath: string]: any }): Promise; +``` + +This is a mix of methods from [WhereClause](https://dexie.org/docs/WhereClause/WhereClause), [Table](https://dexie.org/docs/Table/Table) and [Collection](https://dexie.org/docs/Collection/Collection). Dive into the [API reference](https://dexie.org/docs/API-Reference) to see the details. + +## Dexie Cloud + +[Dexie Cloud](https://dexie.org/cloud/) is a commercial offering that can be used as an add-on to Dexie.js. It syncs a Dexie database with a server and enables developers to build apps without having to care about backend or database layer else than the frontend code with Dexie.js as the sole database layer. + +Source for a sample Dexie Cloud app: [Dexie Cloud To-do app](https://github.com/dexie/Dexie.js/tree/master/samples/dexie-cloud-todo-app) + +See the sample Dexie Cloud app in action: https://dexie.github.io/Dexie.js/dexie-cloud-todo-app/ + +## Samples + +https://dexie.org/docs/Samples + +https://github.com/dexie/Dexie.js/tree/master/samples + +## Knowledge Base + +[https://dexie.org/docs/Questions-and-Answers](https://dexie.org/docs/Questions-and-Answers) + +## Website + +[https://dexie.org](https://dexie.org) + +## Install via npm + +``` +npm install dexie +``` + +## Download + +For those who don't like package managers, here's the download links: + +### UMD (for legacy script includes as well as commonjs require): + +https://unpkg.com/dexie@latest/dist/dexie.min.js + +https://unpkg.com/dexie@latest/dist/dexie.min.js.map + +### Modern (ES module): + +https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs + +https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs.map + +### Typings: + +https://unpkg.com/dexie@latest/dist/dexie.d.ts + +# Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) + +## Build + +``` +pnpm install +pnpm run build +``` + +## Test + +``` +pnpm test +``` + +## Watch + +``` +pnpm run watch +``` + +
+ +[![Browser testing via LAMDBATEST](https://dexie.org/assets/images/lambdatest2.png)](https://www.lambdatest.com/) + +[npm-image]: https://img.shields.io/npm/v/dexie.svg?style=flat +[npm-url]: https://npmjs.org/package/dexie diff --git a/src/assets/dexie/SECURITY.md b/src/assets/dexie/SECURITY.md new file mode 100644 index 000000000..d3c09d562 --- /dev/null +++ b/src/assets/dexie/SECURITY.md @@ -0,0 +1,26 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | Branch +| ------- | ------------------ | -------- +| 4.x | :white_check_mark: | master +| 3.x | :white_check_mark: | master-3 +| 2.0.x | :x: | master-2 +| 1.5.x | :x: | master-1 +| < 1.5.1 | :x: | + +## Reporting a Vulnerability + +To report a security vulnerability in Dexie.js, please send an email to code@dexie.org describing the vulnerability and how to reproduce it. + +If we find an issue to be regarded as a security vulnerability, we will patch and release a new version in all the supported versions as soon as possible. +Keep in mind though that this is an uncommercial open source project which means that sometimes you might have to be the one that +*fixes* the issue and not just report it. + +## Fixing a Vulnerability + +Fix the issue in the corresponding branch for the major version according to the table above where it applies and +create pull requests. Make sure that you have the words "security" or "vulnerability" in the title of the Pull Request +in order to get the correct attention for it to be merged and released as soon as possible. + diff --git a/src/assets/dexie/dist/dexie.d.ts b/src/assets/dexie/dist/dexie.d.ts new file mode 100644 index 000000000..130ee26a6 --- /dev/null +++ b/src/assets/dexie/dist/dexie.d.ts @@ -0,0 +1,1174 @@ +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * By David Fahlander, david.fahlander@gmail.com + * + * Version 4.0.7, Sun May 26 2024 + * + * https://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ + */ + // Generated by dts-bundle-generator v5.9.0 + +export interface IndexSpec { + name: string; + keyPath: string | Array | undefined; + unique: boolean | undefined; + multi: boolean | undefined; + auto: boolean | undefined; + compound: boolean | undefined; + src: string; +} +export interface TableSchema { + name: string; + primKey: IndexSpec; + indexes: IndexSpec[]; + mappedClass: Function; + idxByName: { + [name: string]: IndexSpec; + }; + readHook?: (x: any) => any; +} +export type IndexableTypePart = string | number | Date | ArrayBuffer | ArrayBufferView | DataView | Array>; +export type IndexableTypeArray = Array; +export type IndexableTypeArrayReadonly = ReadonlyArray; +export type IndexableType = IndexableTypePart | IndexableTypeArrayReadonly; +export interface DexieEvent { + subscribers: Function[]; + fire(...args: any[]): any; + subscribe(fn: (...args: any[]) => any): void; + unsubscribe(fn: (...args: any[]) => any): void; +} +export interface DexieEventSet { + (eventName: string): DexieEvent; // To be able to unsubscribe. + addEventType(eventName: string, chainFunction?: (f1: Function, f2: Function) => Function, defaultFunction?: Function): DexieEvent; + addEventType(events: { + [eventName: string]: ("asap" | [ + (f1: Function, f2: Function) => Function, + Function + ]); + }): DexieEvent; +} +export interface TransactionEvents extends DexieEventSet { + (eventName: "complete", subscriber: () => any): void; + (eventName: "abort", subscriber: () => any): void; + (eventName: "error", subscriber: (error: any) => any): void; + complete: DexieEvent; + abort: DexieEvent; + error: DexieEvent; +} +export interface Transaction { + db: Dexie; + active: boolean; + mode: IDBTransactionMode; + idbtrans: IDBTransaction; + //tables: { [type: string]: Table }; Deprecated since 2.0. Obsolete from v3.0. + storeNames: Array; + explicit?: boolean; + parent?: Transaction; + on: TransactionEvents; + abort(): void; + table(tableName: string): Table; + table(tableName: string): Table; + table(tableName: string): Table; + table(tableName: string): Table; +} +export interface CreatingHookContext { + onsuccess?: (primKey: Key) => void; + onerror?: (err: any) => void; +} +export interface UpdatingHookContext { + onsuccess?: (updatedObj: T) => void; + onerror?: (err: any) => void; +} +export interface DeletingHookContext { + onsuccess?: () => void; + onerror?: (err: any) => void; +} +export interface TableHooks extends DexieEventSet { + (eventName: "creating", subscriber: (this: CreatingHookContext, primKey: TKey, obj: T, transaction: Transaction) => void | undefined | TKey): void; + (eventName: "reading", subscriber: (obj: T) => T | any): void; + (eventName: "updating", subscriber: (this: UpdatingHookContext, modifications: Object, primKey: TKey, obj: T, transaction: Transaction) => any): void; + (eventName: "deleting", subscriber: (this: DeletingHookContext, primKey: TKey, obj: T, transaction: Transaction) => any): void; + creating: DexieEvent; + reading: DexieEvent; + updating: DexieEvent; + deleting: DexieEvent; +} +export type ThenShortcut = (value: T) => TResult | PromiseLike; +export interface WhereClause { + above(key: any): Collection; + aboveOrEqual(key: any): Collection; + anyOf(keys: ReadonlyArray): Collection; + anyOf(...keys: Array): Collection; + anyOfIgnoreCase(keys: string[]): Collection; + anyOfIgnoreCase(...keys: string[]): Collection; + below(key: any): Collection; + belowOrEqual(key: any): Collection; + between(lower: any, upper: any, includeLower?: boolean, includeUpper?: boolean): Collection; + equals(key: IndexableType): Collection; + equalsIgnoreCase(key: string): Collection; + inAnyRange(ranges: ReadonlyArray<{ + 0: any; + 1: any; + }>, options?: { + includeLowers?: boolean; + includeUppers?: boolean; + }): Collection; + startsWith(key: string): Collection; + startsWithAnyOf(prefixes: string[]): Collection; + startsWithAnyOf(...prefixes: string[]): Collection; + startsWithIgnoreCase(key: string): Collection; + startsWithAnyOfIgnoreCase(prefixes: string[]): Collection; + startsWithAnyOfIgnoreCase(...prefixes: string[]): Collection; + noneOf(keys: ReadonlyArray): Collection; + notEqual(key: IndexableType): Collection; +} +export interface PromiseExtendedConstructor extends PromiseConstructor { + readonly prototype: PromiseExtended; + new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): PromiseExtended; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike, + T9 | PromiseLike, + T10 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike, + T9 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6, + T7 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike + ]): PromiseExtended<[ + T1, + T2 + ]>; + all(values: (T | PromiseLike)[]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike, + T9 | PromiseLike, + T10 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike, + T9 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike + ]): PromiseExtended; + race(values: (T | PromiseLike)[]): PromiseExtended; + reject(reason: any): PromiseExtended; + reject(reason: any): PromiseExtended; + resolve(value: T | PromiseLike): PromiseExtended; + resolve(): PromiseExtended; +} +/** The interface of Dexie.Promise, which basically extends standard Promise with methods: + * + * finally() - also subject for standardization + * timeout() - set a completion timeout + * catch(ErrorClass, handler) - java style error catching + * catch(errorName, handler) - cross-domain safe type error catching (checking error.name instead of instanceof) + * + */ +export interface PromiseExtended extends Promise { + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): PromiseExtended; + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): PromiseExtended; + catch(ErrorConstructor: Function, onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): PromiseExtended; + catch(errorName: string, onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): PromiseExtended; + finally(onFinally?: () => U | PromiseLike): PromiseExtended; + timeout(ms: number, msg?: string): PromiseExtended; +} +export type KeyPaths = { + [P in keyof T]: P extends string ? T[P] extends Array ? K extends object // only drill into the array element if it's an object + ? P | `${P}.${number}` | `${P}.${number}.${KeyPaths}` : P | `${P}.${number}` : T[P] extends (...args: any[]) => any // Method + ? never : T[P] extends object ? P | `${P}.${KeyPaths}` : P : never; +}[keyof T]; +export type KeyPathValue = PATH extends `${infer R}.${infer S}` ? R extends keyof T ? KeyPathValue : T extends any[] ? PATH extends `${number}.${infer S}` ? KeyPathValue : void : void : PATH extends `${number}` ? T extends any[] ? T[number] : void : PATH extends keyof T ? T[PATH] : void; +export declare const PropModSymbol: unique symbol; +export type PropModSpec = { + replacePrefix?: [ + string, + string + ]; + add?: number | BigInt | Array; + remove?: number | BigInt | Array; +}; +export class PropModification implements PropModSpec { + [PropModSymbol]?: true; + replacePrefix?: [ + string, + string + ]; + add?: number | BigInt | Array; + remove?: number | BigInt | Array; + execute(value: T): T; + constructor(spec: PropModSpec); +} +export type UpdateSpec = { + [KP in KeyPaths]?: KeyPathValue | PropModification; +}; +export interface Collection { + db: Dexie; + and(filter: (x: T) => boolean): Collection; + clone(props?: Object): Collection; + count(): PromiseExtended; + count(thenShortcut: ThenShortcut): PromiseExtended; + distinct(): Collection; + each(callback: (obj: T, cursor: { + key: IndexableType; + primaryKey: TKey; + }) => any): PromiseExtended; + eachKey(callback: (key: IndexableType, cursor: { + key: IndexableType; + primaryKey: TKey; + }) => any): PromiseExtended; + eachPrimaryKey(callback: (key: TKey, cursor: { + key: IndexableType; + primaryKey: TKey; + }) => any): PromiseExtended; + eachUniqueKey(callback: (key: IndexableType, cursor: { + key: IndexableType; + primaryKey: TKey; + }) => any): PromiseExtended; + filter(filter: (x: T) => x is S): Collection; + filter(filter: (x: T) => boolean): Collection; + first(): PromiseExtended; + first(thenShortcut: ThenShortcut): PromiseExtended; + keys(): PromiseExtended; + keys(thenShortcut: ThenShortcut): PromiseExtended; + primaryKeys(): PromiseExtended; + primaryKeys(thenShortcut: ThenShortcut): PromiseExtended; + last(): PromiseExtended; + last(thenShortcut: ThenShortcut): PromiseExtended; + limit(n: number): Collection; + offset(n: number): Collection; + or(indexOrPrimayKey: string): WhereClause; + raw(): Collection; + reverse(): Collection; + sortBy(keyPath: string): PromiseExtended; + sortBy(keyPath: string, thenShortcut: ThenShortcut): PromiseExtended; + toArray(): PromiseExtended>; + toArray(thenShortcut: ThenShortcut): PromiseExtended; + uniqueKeys(): PromiseExtended; + uniqueKeys(thenShortcut: ThenShortcut): PromiseExtended; + until(filter: (value: T) => boolean, includeStopEntry?: boolean): Collection; + // Mutating methods + delete(): PromiseExtended; + modify(changeCallback: (obj: T, ctx: { + value: TInsertType; + }) => void | boolean): PromiseExtended; + modify(changes: UpdateSpec): PromiseExtended; +} +export type IntervalTree = IntervalTreeNode | EmptyRange; +export interface IntervalTreeNode { + from: IndexableType; // lower bound + to: IndexableType; // upper bound + l: IntervalTreeNode | null; // left + r: IntervalTreeNode | null; // right + d: number; // depth +} +export interface EmptyRange { + d: 0; +} +export interface DexieOnReadyEvent { + subscribe(fn: (vipDb: Dexie) => any, bSticky: boolean): void; + unsubscribe(fn: (vipDb: Dexie) => any): void; + fire(vipDb: Dexie): any; +} +export interface DexieVersionChangeEvent { + subscribe(fn: (event: IDBVersionChangeEvent) => any): void; + unsubscribe(fn: (event: IDBVersionChangeEvent) => any): void; + fire(event: IDBVersionChangeEvent): any; +} +export interface DexiePopulateEvent { + subscribe(fn: (trans: Transaction) => any): void; + unsubscribe(fn: (trans: Transaction) => any): void; + fire(trans: Transaction): any; +} +export interface DexieCloseEvent { + subscribe(fn: (event: Event) => any): void; + unsubscribe(fn: (event: Event) => any): void; + fire(event: Event): any; +} +export interface DbEvents extends DexieEventSet { + (eventName: "ready", subscriber: (vipDb: Dexie) => any, bSticky?: boolean): void; + (eventName: "populate", subscriber: (trans: Transaction) => any): void; + (eventName: "blocked", subscriber: (event: IDBVersionChangeEvent) => any): void; + (eventName: "versionchange", subscriber: (event: IDBVersionChangeEvent) => any): void; + (eventName: "close", subscriber: (event: Event) => any): void; + ready: DexieOnReadyEvent; + populate: DexiePopulateEvent; + blocked: DexieEvent; + versionchange: DexieVersionChangeEvent; + close: DexieCloseEvent; +} +/** Set of mutated parts of the database + */ +export type ObservabilitySet = { + /** Database part having been mutated. + * + * This structure is produced in observability-middleware.ts + * and consumed in live-query.ts. + * + * Format of 'part': + * + * `idb://${dbName}/${tableName}/${indexName}` + * + * * dbName is the database name + * * tableName is the table name + * * indexName is any of: + * 1. An empty string - represents the primary keys of the affected objs + * 2. ":dels" - represents primary keys of deleted objects in the table + * 3. The keyPath of an index, such as "name", "age" or "address.city" - + * represents indexes that, if used in a query, might affect the + * result of that query. + * + * IntervalTree + * * See definition of IntervalTree type in rangeset.d.ts + * * See rangesOverlap() in rangeset.ts that can be used to compare two + * IntervalTrees and detect collissions. + * * See RangeSet class that can be used to create an IntervalTree and add + * ranges to it. + */ + [part: string]: IntervalTree; +}; +export interface DexieOnStorageMutatedEvent { + subscribe(fn: (parts: ObservabilitySet) => any): void; + unsubscribe(fn: (parts: ObservabilitySet) => any): void; + fire(parts: ObservabilitySet): any; +} +export interface GlobalDexieEvents extends DexieEventSet { + (eventName: "storagemutated", subscriber: (parts: ObservabilitySet) => any): void; + storagemutated: DexieOnStorageMutatedEvent; +} +export const enum DBCoreRangeType { + Equal = 1, + Range = 2, + Any = 3, + Never = 4 +} +export interface DBCoreKeyRange { + readonly type: DBCoreRangeType; + readonly lower: any; + readonly lowerOpen?: boolean; + readonly upper: any; + readonly upperOpen?: boolean; +} +export interface DBCoreTransaction { + abort(): void; +} +export interface DbCoreTransactionOptions { + durability: ChromeTransactionDurability; +} +export type DBCoreMutateRequest = DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest | DBCoreDeleteRangeRequest; +export interface DBCoreMutateResponse { + numFailures: number; + failures: { + [operationNumber: number]: Error; + }; + lastResult: any; + results?: any[]; // Present on AddRequest and PutRequest. +} +export interface DBCoreAddRequest { + type: "add"; + trans: DBCoreTransaction; + values: readonly any[]; + keys?: any[]; + mutatedParts?: ObservabilitySet; + /** @deprecated Will always get results since 3.1.0-alpha.5 */ + wantResults?: boolean; +} +export interface DBCorePutRequest { + type: "put"; + trans: DBCoreTransaction; + values: readonly any[]; + keys?: any[]; + mutatedParts?: ObservabilitySet; + criteria?: { + index: string | null; + range: DBCoreKeyRange; + }; + changeSpec?: { + [keyPath: string]: any; + }; // Common changeSpec for each key + isAdditionalChunk?: boolean; + updates?: { + keys: any[]; + changeSpecs: { + [keyPath: string]: any; + }[]; // changeSpec per key. + }; + /** @deprecated Will always get results since 3.1.0-alpha.5 */ + wantResults?: boolean; +} +export interface DBCoreDeleteRequest { + type: "delete"; + trans: DBCoreTransaction; + keys: any[]; + mutatedParts?: ObservabilitySet; + criteria?: { + index: string | null; + range: DBCoreKeyRange; + }; + isAdditionalChunk?: boolean; +} +export interface DBCoreDeleteRangeRequest { + type: "deleteRange"; + trans: DBCoreTransaction; + range: DBCoreKeyRange; + mutatedParts?: ObservabilitySet; +} +export interface DBCoreGetManyRequest { + trans: DBCoreTransaction; + keys: any[]; + cache?: "immutable" | "clone"; + obsSet?: ObservabilitySet; +} +export interface DBCoreGetRequest { + trans: DBCoreTransaction; + key: any; + obsSet?: ObservabilitySet; +} +export interface DBCoreQuery { + index: DBCoreIndex; //keyPath: null | string | string[]; // null represents primary key. string a property, string[] several properties. + range: DBCoreKeyRange; +} +export interface DBCoreQueryRequest { + trans: DBCoreTransaction; + values?: boolean; + limit?: number; + query: DBCoreQuery; + obsSet?: ObservabilitySet; +} +export interface DBCoreQueryResponse { + result: any[]; +} +export interface DBCoreOpenCursorRequest { + trans: DBCoreTransaction; + values?: boolean; + unique?: boolean; + reverse?: boolean; + query: DBCoreQuery; + obsSet?: ObservabilitySet; +} +export interface DBCoreCountRequest { + trans: DBCoreTransaction; + query: DBCoreQuery; + obsSet?: ObservabilitySet; +} +export interface DBCoreCursor { + readonly trans: DBCoreTransaction; + readonly key: any; + readonly primaryKey: any; + readonly value?: any; + readonly done?: boolean; + continue(key?: any): void; + continuePrimaryKey(key: any, primaryKey: any): void; + advance(count: number): void; + start(onNext: () => void): Promise; + stop(value?: any | Promise): void; + next(): Promise; + fail(error: Error): void; +} +export interface DBCoreSchema { + name: string; + tables: DBCoreTableSchema[]; +} +export interface DBCoreTableSchema { + readonly name: string; + readonly primaryKey: DBCoreIndex; + readonly indexes: DBCoreIndex[]; + readonly getIndexByKeyPath: (keyPath: null | string | string[]) => DBCoreIndex | undefined; +} +export interface DBCoreIndex { + /** Name of the index, or null for primary key */ + readonly name: string | null; + /** True if this index represents the primary key */ + readonly isPrimaryKey?: boolean; + /** True if this index represents the primary key and is not inbound (https://dexie.org/docs/inbound) */ + readonly outbound?: boolean; + /** True if and only if keyPath is an array (https://dexie.org/docs/Compound-Index) */ + readonly compound?: boolean; + /** keyPath, null for primary key, string for single-property indexes, Array for compound indexes */ + readonly keyPath: null | string | string[]; + /** Auto-generated primary key (does not apply to secondary indexes) */ + readonly autoIncrement?: boolean; + /** Whether index is unique. Also true if index is primary key. */ + readonly unique?: boolean; + /** Whether index is multiEntry. */ + readonly multiEntry?: boolean; + /** Extract (using keyPath) a key from given value (object). Null for outbound primary keys */ + readonly extractKey: ((value: any) => any) | null; + /** If this index is a virtual index, lowLevelIndex represents the actual IndexedDB index behind it */ + readonly lowLevelIndex?: DBCoreIndex; +} +export interface DBCore { + stack: "dbcore"; + // Transaction and Object Store + transaction(stores: string[], mode: "readonly" | "readwrite", options?: DbCoreTransactionOptions): DBCoreTransaction; + // Utility methods + readonly MIN_KEY: any; + readonly MAX_KEY: any; + readonly schema: DBCoreSchema; + table(name: string): DBCoreTable; +} +export interface DBCoreTable { + readonly name: string; + readonly schema: DBCoreTableSchema; + mutate(req: DBCoreMutateRequest): Promise; + get(req: DBCoreGetRequest): Promise; + getMany(req: DBCoreGetManyRequest): Promise; + query(req: DBCoreQueryRequest): Promise; + openCursor(req: DBCoreOpenCursorRequest): Promise; + count(req: DBCoreCountRequest): Promise; +} +export interface Table { + db: Dexie; + name: string; + schema: TableSchema; + hook: TableHooks; + core: DBCoreTable; + get(key: TKey): PromiseExtended; + get(key: TKey, thenShortcut: ThenShortcut): PromiseExtended; + get(equalityCriterias: { + [key: string]: any; + }): PromiseExtended; + get(equalityCriterias: { + [key: string]: any; + }, thenShortcut: ThenShortcut): PromiseExtended; + where(index: string | string[]): WhereClause; + where(equalityCriterias: { + [key: string]: any; + }): Collection; + filter(fn: (obj: T) => boolean): Collection; + count(): PromiseExtended; + count(thenShortcut: ThenShortcut): PromiseExtended; + offset(n: number): Collection; + limit(n: number): Collection; + each(callback: (obj: T, cursor: { + key: any; + primaryKey: TKey; + }) => any): PromiseExtended; + toArray(): PromiseExtended>; + toArray(thenShortcut: ThenShortcut): PromiseExtended; + toCollection(): Collection; + orderBy(index: string | string[]): Collection; + reverse(): Collection; + mapToClass(constructor: Function): Function; + add(item: TInsertType, key?: TKey): PromiseExtended; + update(key: TKey | T, changes: UpdateSpec | ((obj: T, ctx: { + value: any; + primKey: IndexableType; + }) => void | boolean)): PromiseExtended; + put(item: TInsertType, key?: TKey): PromiseExtended; + delete(key: TKey): PromiseExtended; + clear(): PromiseExtended; + bulkGet(keys: TKey[]): PromiseExtended<(T | undefined)[]>; + bulkAdd(items: readonly TInsertType[], keys: IndexableTypeArrayReadonly, options: { + allKeys: B; + }): PromiseExtended; + bulkAdd(items: readonly TInsertType[], options: { + allKeys: B; + }): PromiseExtended; + bulkAdd(items: readonly TInsertType[], keys?: IndexableTypeArrayReadonly, options?: { + allKeys: boolean; + }): PromiseExtended; + bulkPut(items: readonly TInsertType[], keys: IndexableTypeArrayReadonly, options: { + allKeys: B; + }): PromiseExtended; + bulkPut(items: readonly TInsertType[], options: { + allKeys: B; + }): PromiseExtended; + bulkPut(items: readonly TInsertType[], keys?: IndexableTypeArrayReadonly, options?: { + allKeys: boolean; + }): PromiseExtended; + bulkUpdate(keysAndChanges: ReadonlyArray<{ + key: TKey; + changes: UpdateSpec; + }>): PromiseExtended; + bulkDelete(keys: TKey[]): PromiseExtended; +} +export interface Version { + stores(schema: { + [tableName: string]: string | null; + }): Version; + upgrade(fn: (trans: Transaction) => PromiseLike | void): Version; +} +export type TransactionMode = "readonly" | "readwrite" | "r" | "r!" | "r?" | "rw" | "rw!" | "rw?"; +export type DbSchema = { + [tableName: string]: TableSchema; +}; +export interface Middleware { + stack: TStack["stack"]; + create: (down: TStack) => Partial; + level?: number; + name?: string; +} +export interface DexieStacks { + dbcore: DBCore; +} +export type TableProp = { + [K in keyof DX]: DX[K] extends { + schema: any; + get: any; + put: any; + add: any; + where: any; + } ? K : never; +}[keyof DX] & string; +export type TXWithTables = Dexie extends DX ? Transaction // If not subclassed, just expect a Transaction without table props + : Transaction & { + [P in TableProp]: DX[P]; +}; +export interface Dexie { + readonly name: string; + readonly tables: Table[]; + readonly verno: number; + readonly vip: Dexie; + readonly _allTables: { + [name: string]: Table; + }; + readonly core: DBCore; + _createTransaction: (this: Dexie, mode: IDBTransactionMode, storeNames: ArrayLike, dbschema: DbSchema, parentTransaction?: Transaction | null) => Transaction; + readonly _novip: Dexie; + _dbSchema: DbSchema; + version(versionNumber: number): Version; + on: DbEvents; + open(): PromiseExtended; + table(tableName: string): Table; + transaction(mode: TransactionMode, tables: readonly (string | Table)[], scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, table2: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, table4: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, table5: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + close(closeOptions?: { + disableAutoOpen: boolean; + }): void; + delete(closeOptions?: { + disableAutoOpen: boolean; + }): PromiseExtended; + isOpen(): boolean; + hasBeenClosed(): boolean; + hasFailed(): boolean; + dynamicallyOpened(): boolean; + backendDB(): IDBDatabase; + use(middleware: Middleware): this; + // Add more supported stacks here... : use(middleware: Middleware): this; + unuse({ stack, create }: Middleware<{ + stack: keyof DexieStacks; + }>): this; + unuse({ stack, name }: { + stack: keyof DexieStacks; + name: string; + }): this; + // Make it possible to touch physical class constructors where they reside - as properties on db instance. + // For example, checking if (x instanceof db.Table). Can't do (x instanceof Dexie.Table because it's just a virtual interface) + Table: { + prototype: Table; + }; + WhereClause: { + prototype: WhereClause; + }; + Version: { + prototype: Version; + }; + Transaction: { + prototype: Transaction; + }; + Collection: { + prototype: Collection; + }; +} +/** DexieError + * + * Common base class for all errors originating from Dexie.js except TypeError, + * SyntaxError and RangeError. + * + * https://dexie.org/docs/DexieErrors/DexieError + * + */ +export interface DexieError extends Error { + name: string; + message: string; + stack: string; + inner: any; + toString(): string; +} +/** + * List of the names of auto-generated error classes that extends DexieError + * and shares the interface of DexieError. + * + * Each error should be documented at https://dexie.org/docs/DexieErrors/Dexie. + * + * The generic type DexieExceptionClasses is a map of full error name to + * error constructor. The DexieExceptionClasses is mixed in into Dexie, + * so that it is always possible to throw or catch certain errors via + * Dexie.ErrorName. Example: + * + * try { + * throw new Dexie.InvalidTableError("Invalid table foo", innerError?); + * } catch (err) { + * if (err instanceof Dexie.InvalidTableError) { + * // Could also have check for err.name === "InvalidTableError", or + * // err.name === Dexie.errnames.InvalidTableError. + * console.log("Seems to be an invalid table here..."); + * } else { + * throw err; + * } + * } + */ +export type DexieErrors = { + // https://dexie.org/docs/DexieErrors/Dexie.OpenFailedError + OpenFailed: "OpenFailedError"; + // https://dexie.org/docs/DexieErrors/Dexie.VersionChangeError + VersionChange: "VersionChangeError"; + // https://dexie.org/docs/DexieErrors/Dexie.SchemaError + Schema: "SchemaError"; + // https://dexie.org/docs/DexieErrors/Dexie.UpgradeError + Upgrade: "UpgradeError"; + // https://dexie.org/docs/DexieErrors/Dexie.InvalidTableError + InvalidTable: "InvalidTableError"; + // https://dexie.org/docs/DexieErrors/Dexie.MissingAPIError + MissingAPI: "MissingAPIError"; + // https://dexie.org/docs/DexieErrors/Dexie.NoSuchDatabaseError + NoSuchDatabase: "NoSuchDatabaseError"; + // https://dexie.org/docs/DexieErrors/Dexie.InvalidArgumentError + InvalidArgument: "InvalidArgumentError"; + // https://dexie.org/docs/DexieErrors/Dexie.SubTransactionError + SubTransaction: "SubTransactionError"; + // https://dexie.org/docs/DexieErrors/Dexie.UnsupportedError + Unsupported: "UnsupportedError"; + // https://dexie.org/docs/DexieErrors/Dexie.InternalError + Internal: "InternalError"; + // https://dexie.org/docs/DexieErrors/Dexie.DatabaseClosedError + DatabaseClosed: "DatabaseClosedError"; + // https://dexie.org/docs/DexieErrors/Dexie.PrematureCommitError + PrematureCommit: "PrematureCommitError"; + // https://dexie.org/docs/DexieErrors/Dexie.ForeignAwaitError + ForeignAwait: "ForeignAwaitError"; + // https://dexie.org/docs/DexieErrors/Dexie.UnknownError + Unknown: "UnknownError"; + // https://dexie.org/docs/DexieErrors/Dexie.ConstraintError + Constraint: "ConstraintError"; + // https://dexie.org/docs/DexieErrors/Dexie.DataError + Data: "DataError"; + // https://dexie.org/docs/DexieErrors/Dexie.TransactionInactiveError + TransactionInactive: "TransactionInactiveError"; + // https://dexie.org/docs/DexieErrors/Dexie.ReadOnlyError + ReadOnly: "ReadOnlyError"; + // https://dexie.org/docs/DexieErrors/Dexie.VersionError + Version: "VersionError"; + // https://dexie.org/docs/DexieErrors/Dexie.NotFoundError + NotFound: "NotFoundError"; + // https://dexie.org/docs/DexieErrors/Dexie.InvalidStateError + InvalidState: "InvalidStateError"; + // https://dexie.org/docs/DexieErrors/Dexie.InvalidAccessError + InvalidAccess: "InvalidAccessError"; + // https://dexie.org/docs/DexieErrors/Dexie.AbortError + Abort: "AbortError"; + // https://dexie.org/docs/DexieErrors/Dexie.TimeoutError + Timeout: "TimeoutError"; + // https://dexie.org/docs/DexieErrors/Dexie.QuotaExceededError + QuotaExceeded: "QuotaExceededError"; + // https://dexie.org/docs/DexieErrors/Dexie.DataCloneError + DataClone: "DataCloneError"; +}; +/** ModifyError + * + * https://dexie.org/docs/DexieErrors/Dexie.ModifyError + */ +export interface ModifyError extends DexieError { + failures: Array; + failedKeys: IndexableTypeArrayReadonly; + successCount: number; +} +/** BulkError + * + * https://dexie.org/docs/DexieErrors/Dexie.BulkError + */ +export interface BulkError extends DexieError { + failures: Error[]; + failuresByPos: { + [operationNumber: number]: Error; + }; +} +export interface DexieErrorConstructor { + new (msg?: string, inner?: Object): DexieError; + new (inner: Object): DexieError; + prototype: DexieError; +} +export interface ModifyErrorConstructor { + new (msg?: string, failures?: any[], successCount?: number, failedKeys?: IndexableTypeArrayReadonly): ModifyError; + prototype: ModifyError; +} +export interface BulkErrorConstructor { + new (msg?: string, failures?: { + [operationNumber: number]: Error; + }): BulkError; + prototype: BulkError; +} +export type ExceptionSet = { + [P in DexieErrors[keyof DexieErrors]]: DexieErrorConstructor; +}; +export type DexieExceptionClasses = ExceptionSet & { + DexieError: DexieErrorConstructor; + ModifyError: ModifyErrorConstructor; + BulkError: BulkErrorConstructor; +}; +export interface DexieDOMDependencies { + indexedDB: IDBFactory; + IDBKeyRange: typeof IDBKeyRange; +} +declare global { + interface SymbolConstructor { + readonly observable: symbol; + } +} +export interface Subscribable { + subscribe(observer: Partial>): Unsubscribable; +} +export interface Unsubscribable { + unsubscribe(): void; +} +export interface Observable { + subscribe(observerOrNext?: Observer | ((value: T) => void)): Subscription; + subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription; + getValue?(): T; + hasValue?(): boolean; + [Symbol.observable]: () => Subscribable; +} +export interface Subscription { + unsubscribe(): void; + readonly closed: boolean; +} +export interface Observer { + start?: (subscription: Subscription) => void; + next?: (value: T) => void; + error?: (error: any) => void; + complete?: () => void; +} +export type GlobalQueryCache = { + // TODO: Change to parts: {[part: string]: TblQueryCache} + // och unsignaledParts: ObservabilitySet; + [part: string]: TblQueryCache; // part is `idb://${dbName}/${tableName}` +}; +export interface TblQueryCache { + queries: { + query: { + [indexName: string]: CacheEntry[]; + }; + count: { + [indexName: string]: CacheEntry[]; + }; + }; + objs: Map; + optimisticOps: DBCoreMutateRequest[]; + unsignaledParts: ObservabilitySet; +} +export interface CacheEntryCommon { + subscribers: Set<() => void>; + obsSet: ObservabilitySet; + //txObsSet: ObservabilitySet; + promise: Promise; + dirty: boolean; +} +export type CacheEntry = CacheEntryCommon & ({ + type: "query"; + req: DBCoreQueryRequest; + res?: readonly any[]; +} | { + type: "count"; + req: DBCoreCountRequest; + res?: number; +}); +export type ChromeTransactionDurability = "default" | "strict" | "relaxed"; +export interface DexieOptions { + addons?: Array<(db: Dexie) => void>; + autoOpen?: boolean; + indexedDB?: { + open: Function; + }; + IDBKeyRange?: { + bound: Function; + lowerBound: Function; + upperBound: Function; + }; + allowEmptyDB?: boolean; + modifyChunkSize?: number; + chromeTransactionDurability?: ChromeTransactionDurability; + cache?: "immutable" | "cloned" | "disabled"; +} +export interface DexieConstructor extends DexieExceptionClasses { + new (databaseName: string, options?: DexieOptions): Dexie; + prototype: Dexie; + addons: Array<(db: Dexie) => void>; + version: number; + semVer: string; + currentTransaction: Transaction; + waitFor(promise: PromiseLike | T, timeoutMilliseconds?: number): Promise; + getDatabaseNames(): Promise; + getDatabaseNames(thenShortcut: ThenShortcut): Promise; + vip(scopeFunction: () => U): U; + ignoreTransaction(fn: () => U): U; + disableBfCache?: boolean; + liveQuery(fn: () => T | Promise): Observable; + extendObservabilitySet(target: ObservabilitySet, newSet: ObservabilitySet): ObservabilitySet; + override(origFunc: F, overridedFactory: (fn: any) => any): F; // ? + getByKeyPath(obj: Object, keyPath: string | string[]): any; + setByKeyPath(obj: Object, keyPath: string | string[], value: any): void; + delByKeyPath(obj: Object, keyPath: string | string[]): void; + shallowClone(obj: T): T; + deepClone(obj: T): T; + asap(fn: Function): void; //? + maxKey: Array> | string; + minKey: number; + exists(dbName: string): Promise; + delete(dbName: string): Promise; + dependencies: DexieDOMDependencies; + default: Dexie; // Work-around for different build tools handling default imports differently. + cache: GlobalQueryCache; + debug: false | true | "dexie"; + Promise: PromiseExtendedConstructor; + //TableSchema: {}; // Deprecate! + //IndexSpec: {new():IndexSpec}; //? Deprecate + Events: (ctx?: any) => DexieEventSet; + on: GlobalDexieEvents; + errnames: DexieErrors; +} +export class Entity { + protected constructor(); + protected readonly db: TDexieSubClass; + table(): TableProp; +} +export type IsStrictlyAny = (T extends never ? true : false) extends false ? false : true; +/** Extract the union of literal method names in T + */ +export type MethodProps = { + [P in keyof T]: IsStrictlyAny extends true ? never // Plain property of type any (not method) + : T[P] extends (...args: any[]) => any ? P // a function (method) + : never; +}[keyof T]; +/** Default insert type of T is a subset of T where: + * * given optional props (such as an auto-generated primary key) are made optional + * * methods are omitted + */ +export type InsertType = Omit> & { + [P in OptionalProps]?: T[P]; +}; +/** IDType extract the actual type of the primary key: + * * If TKey is a literal type that names a property of T, extract the type using T[TKey] + * * Else, use TKey as is. + */ +export type IDType = IsStrictlyAny extends true ? TKeyPropNameOrKeyType : TKeyPropNameOrKeyType extends string ? TKeyPropNameOrKeyType extends keyof T ? T[TKeyPropNameOrKeyType] : TKeyPropNameOrKeyType : TKeyPropNameOrKeyType; +export type EntityTable> = Table, TInsertType>; +export declare var Dexie: DexieConstructor; +export interface _Table extends Table { +} +export interface _Collection extends Collection { +} +export declare module Dexie { + // The "Dexie.Promise" type. + type Promise = PromiseExtended; // Because many samples have been Dexie.Promise. + // The "Dexie.Table" interface. Same as named exported interface Table. + interface Table extends _Table { + } // Because all samples have been Dexie.Table<...> + // The "Dexie.Collection" interface. Same as named exported interface Collection. + interface Collection extends _Collection { + } // Because app-code may declare it. +} +export function liveQuery(querier: () => T | Promise): Observable; +export function mergeRanges(target: IntervalTree, newSet: IntervalTree): void; +export function rangesOverlap(rangeSet1: IntervalTree, rangeSet2: IntervalTree): boolean; +export function cmp(a: any, b: any): number; +export function replacePrefix(a: string, b: string): PropModification; +export function add(num: number | bigint | any[]): PropModification; +export function remove(num: number | bigint | any[]): PropModification; +/** Exporting 'Dexie' as the default export. + **/ +export default Dexie; + +export {}; diff --git a/src/assets/dexie/dist/dexie.js b/src/assets/dexie/dist/dexie.js new file mode 100644 index 000000000..afafcc381 --- /dev/null +++ b/src/assets/dexie/dist/dexie.js @@ -0,0 +1,5898 @@ +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * By David Fahlander, david.fahlander@gmail.com + * + * Version 4.0.7, Sun May 26 2024 + * + * https://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dexie = factory()); +})(this, (function () { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + } + + var _global = typeof globalThis !== 'undefined' ? globalThis : + typeof self !== 'undefined' ? self : + typeof window !== 'undefined' ? window : + global; + + var keys = Object.keys; + var isArray = Array.isArray; + if (typeof Promise !== 'undefined' && !_global.Promise) { + _global.Promise = Promise; + } + function extend(obj, extension) { + if (typeof extension !== 'object') + return obj; + keys(extension).forEach(function (key) { + obj[key] = extension[key]; + }); + return obj; + } + var getProto = Object.getPrototypeOf; + var _hasOwn = {}.hasOwnProperty; + function hasOwn(obj, prop) { + return _hasOwn.call(obj, prop); + } + function props(proto, extension) { + if (typeof extension === 'function') + extension = extension(getProto(proto)); + (typeof Reflect === "undefined" ? keys : Reflect.ownKeys)(extension).forEach(function (key) { + setProp(proto, key, extension[key]); + }); + } + var defineProperty = Object.defineProperty; + function setProp(obj, prop, functionOrGetSet, options) { + defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ? + { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : + { value: functionOrGetSet, configurable: true, writable: true }, options)); + } + function derive(Child) { + return { + from: function (Parent) { + Child.prototype = Object.create(Parent.prototype); + setProp(Child.prototype, "constructor", Child); + return { + extend: props.bind(null, Child.prototype) + }; + } + }; + } + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + function getPropertyDescriptor(obj, prop) { + var pd = getOwnPropertyDescriptor(obj, prop); + var proto; + return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); + } + var _slice = [].slice; + function slice(args, start, end) { + return _slice.call(args, start, end); + } + function override(origFunc, overridedFactory) { + return overridedFactory(origFunc); + } + function assert(b) { + if (!b) + throw new Error("Assertion Failed"); + } + function asap$1(fn) { + if (_global.setImmediate) + setImmediate(fn); + else + setTimeout(fn, 0); + } + function arrayToObject(array, extractor) { + return array.reduce(function (result, item, i) { + var nameAndValue = extractor(item, i); + if (nameAndValue) + result[nameAndValue[0]] = nameAndValue[1]; + return result; + }, {}); + } + function getByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) + return obj[keyPath]; + if (!keyPath) + return obj; + if (typeof keyPath !== 'string') { + var rv = []; + for (var i = 0, l = keyPath.length; i < l; ++i) { + var val = getByKeyPath(obj, keyPath[i]); + rv.push(val); + } + return rv; + } + var period = keyPath.indexOf('.'); + if (period !== -1) { + var innerObj = obj[keyPath.substr(0, period)]; + return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1)); + } + return undefined; + } + function setByKeyPath(obj, keyPath, value) { + if (!obj || keyPath === undefined) + return; + if ('isFrozen' in Object && Object.isFrozen(obj)) + return; + if (typeof keyPath !== 'string' && 'length' in keyPath) { + assert(typeof value !== 'string' && 'length' in value); + for (var i = 0, l = keyPath.length; i < l; ++i) { + setByKeyPath(obj, keyPath[i], value[i]); + } + } + else { + var period = keyPath.indexOf('.'); + if (period !== -1) { + var currentKeyPath = keyPath.substr(0, period); + var remainingKeyPath = keyPath.substr(period + 1); + if (remainingKeyPath === "") + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) + obj.splice(currentKeyPath, 1); + else + delete obj[currentKeyPath]; + } + else + obj[currentKeyPath] = value; + else { + var innerObj = obj[currentKeyPath]; + if (!innerObj || !hasOwn(obj, currentKeyPath)) + innerObj = (obj[currentKeyPath] = {}); + setByKeyPath(innerObj, remainingKeyPath, value); + } + } + else { + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(keyPath))) + obj.splice(keyPath, 1); + else + delete obj[keyPath]; + } + else + obj[keyPath] = value; + } + } + } + function delByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string') + setByKeyPath(obj, keyPath, undefined); + else if ('length' in keyPath) + [].map.call(keyPath, function (kp) { + setByKeyPath(obj, kp, undefined); + }); + } + function shallowClone(obj) { + var rv = {}; + for (var m in obj) { + if (hasOwn(obj, m)) + rv[m] = obj[m]; + } + return rv; + } + var concat = [].concat; + function flatten(a) { + return concat.apply([], a); + } + var intrinsicTypeNames = "BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey" + .split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return ["Int", "Uint", "Float"].map(function (t) { return t + num + "Array"; }); }))).filter(function (t) { return _global[t]; }); + var intrinsicTypes = new Set(intrinsicTypeNames.map(function (t) { return _global[t]; })); + function cloneSimpleObjectTree(o) { + var rv = {}; + for (var k in o) + if (hasOwn(o, k)) { + var v = o[k]; + rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v); + } + return rv; + } + function objectIsEmpty(o) { + for (var k in o) + if (hasOwn(o, k)) + return false; + return true; + } + var circularRefs = null; + function deepClone(any) { + circularRefs = new WeakMap(); + var rv = innerDeepClone(any); + circularRefs = null; + return rv; + } + function innerDeepClone(x) { + if (!x || typeof x !== 'object') + return x; + var rv = circularRefs.get(x); + if (rv) + return rv; + if (isArray(x)) { + rv = []; + circularRefs.set(x, rv); + for (var i = 0, l = x.length; i < l; ++i) { + rv.push(innerDeepClone(x[i])); + } + } + else if (intrinsicTypes.has(x.constructor)) { + rv = x; + } + else { + var proto = getProto(x); + rv = proto === Object.prototype ? {} : Object.create(proto); + circularRefs.set(x, rv); + for (var prop in x) { + if (hasOwn(x, prop)) { + rv[prop] = innerDeepClone(x[prop]); + } + } + } + return rv; + } + var toString = {}.toString; + function toStringTag(o) { + return toString.call(o).slice(8, -1); + } + var iteratorSymbol = typeof Symbol !== 'undefined' ? + Symbol.iterator : + '@@iterator'; + var getIteratorOf = typeof iteratorSymbol === "symbol" ? function (x) { + var i; + return x != null && (i = x[iteratorSymbol]) && i.apply(x); + } : function () { return null; }; + function delArrayItem(a, x) { + var i = a.indexOf(x); + if (i >= 0) + a.splice(i, 1); + return i >= 0; + } + var NO_CHAR_ARRAY = {}; + function getArrayOf(arrayLike) { + var i, a, x, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') + return [arrayLike]; + if ((it = getIteratorOf(arrayLike))) { + a = []; + while ((x = it.next()), !x.done) + a.push(x.value); + return a; + } + if (arrayLike == null) + return [arrayLike]; + i = arrayLike.length; + if (typeof i === 'number') { + a = new Array(i); + while (i--) + a[i] = arrayLike[i]; + return a; + } + return [arrayLike]; + } + i = arguments.length; + a = new Array(i); + while (i--) + a[i] = arguments[i]; + return a; + } + var isAsyncFunction = typeof Symbol !== 'undefined' + ? function (fn) { return fn[Symbol.toStringTag] === 'AsyncFunction'; } + : function () { return false; }; + + var dexieErrorNames = [ + 'Modify', + 'Bulk', + 'OpenFailed', + 'VersionChange', + 'Schema', + 'Upgrade', + 'InvalidTable', + 'MissingAPI', + 'NoSuchDatabase', + 'InvalidArgument', + 'SubTransaction', + 'Unsupported', + 'Internal', + 'DatabaseClosed', + 'PrematureCommit', + 'ForeignAwait' + ]; + var idbDomErrorNames = [ + 'Unknown', + 'Constraint', + 'Data', + 'TransactionInactive', + 'ReadOnly', + 'Version', + 'NotFound', + 'InvalidState', + 'InvalidAccess', + 'Abort', + 'Timeout', + 'QuotaExceeded', + 'Syntax', + 'DataClone' + ]; + var errorList = dexieErrorNames.concat(idbDomErrorNames); + var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed", + MissingAPI: "IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb" + }; + function DexieError(name, msg) { + this.name = name; + this.message = msg; + } + derive(DexieError).from(Error).extend({ + toString: function () { return this.name + ": " + this.message; } + }); + function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + Object.keys(failures) + .map(function (key) { return failures[key].toString(); }) + .filter(function (v, i, s) { return s.indexOf(v) === i; }) + .join('\n'); + } + function ModifyError(msg, failures, successCount, failedKeys) { + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; + this.message = getMultiErrorMessage(msg, failures); + } + derive(ModifyError).from(DexieError); + function BulkError(msg, failures) { + this.name = "BulkError"; + this.failures = Object.keys(failures).map(function (pos) { return failures[pos]; }); + this.failuresByPos = failures; + this.message = getMultiErrorMessage(msg, this.failures); + } + derive(BulkError).from(DexieError); + var errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + "Error", obj); }, {}); + var BaseException = DexieError; + var exceptions = errorList.reduce(function (obj, name) { + var fullName = name + "Error"; + function DexieError(msgOrInner, inner) { + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } + else if (typeof msgOrInner === 'string') { + this.message = "".concat(msgOrInner).concat(!inner ? '' : '\n ' + inner); + this.inner = inner || null; + } + else if (typeof msgOrInner === 'object') { + this.message = "".concat(msgOrInner.name, " ").concat(msgOrInner.message); + this.inner = msgOrInner; + } + } + derive(DexieError).from(BaseException); + obj[name] = DexieError; + return obj; + }, {}); + exceptions.Syntax = SyntaxError; + exceptions.Type = TypeError; + exceptions.Range = RangeError; + var exceptionMap = idbDomErrorNames.reduce(function (obj, name) { + obj[name + "Error"] = exceptions[name]; + return obj; + }, {}); + function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + setProp(rv, "stack", { get: function () { + return this.inner.stack; + } }); + } + return rv; + } + var fullNameExceptions = errorList.reduce(function (obj, name) { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; + }, {}); + fullNameExceptions.ModifyError = ModifyError; + fullNameExceptions.DexieError = DexieError; + fullNameExceptions.BulkError = BulkError; + + function nop() { } + function mirror(val) { return val; } + function pureFunctionChain(f1, f2) { + if (f1 == null || f1 === mirror) + return f2; + return function (val) { + return f2(f1(val)); + }; + } + function callBoth(on1, on2) { + return function () { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; + } + function hookCreatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res !== undefined) + arguments[0] = res; + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== undefined ? res2 : res; + }; + } + function hookDeletingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = this.onerror = null; + f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; + } + function hookUpdatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function (modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === undefined ? + (res2 === undefined ? undefined : res2) : + (extend(res, res2)); + }; + } + function reverseStoppableEventChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + if (f2.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; + } + function promisableChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res && typeof res.then === 'function') { + var thiz = this, i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + return res.then(function () { + return f2.apply(thiz, args); + }); + } + return f2.apply(this, arguments); + }; + } + + var debug = typeof location !== 'undefined' && + /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); + function setDebug(value, filter) { + debug = value; + } + + var INTERNAL = {}; + var ZONE_ECHO_LIMIT = 100, _a$1 = typeof Promise === 'undefined' ? + [] : + (function () { + var globalP = Promise.resolve(); + if (typeof crypto === 'undefined' || !crypto.subtle) + return [globalP, getProto(globalP), globalP]; + var nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); + return [ + nativeP, + getProto(nativeP), + globalP + ]; + })(), resolvedNativePromise = _a$1[0], nativePromiseProto = _a$1[1], resolvedGlobalPromise = _a$1[2], nativePromiseThen = nativePromiseProto && nativePromiseProto.then; + var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; + var patchGlobalPromise = !!resolvedGlobalPromise; + function schedulePhysicalTick() { + queueMicrotask(physicalTick); + } + var asap = function (callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } + }; + var isOutsideMicroTick = true, + needsNewPhysicalTick = true, + unhandledErrors = [], + rejectingErrors = [], + rejectionMapper = mirror; + var globalPSD = { + id: 'global', + global: true, + ref: 0, + unhandleds: [], + onunhandled: nop, + pgp: false, + env: {}, + finalize: nop + }; + var PSD = globalPSD; + var microtickQueue = []; + var numScheduledCalls = 0; + var tickFinalizers = []; + function DexiePromise(fn) { + if (typeof this !== 'object') + throw new TypeError('Promises must be constructed via new'); + this._listeners = []; + this._lib = false; + var psd = (this._PSD = PSD); + if (typeof fn !== 'function') { + if (fn !== INTERNAL) + throw new TypeError('Not a function'); + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); + return; + } + this._state = null; + this._value = null; + ++psd.ref; + executePromiseTask(this, fn); + } + var thenProp = { + get: function () { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var _this = this; + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + var cleanup = possibleAwait && !decrementExpectedAwaits(); + var rv = new DexiePromise(function (resolve, reject) { + propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); + }); + if (this._consoleTask) + rv._consoleTask = this._consoleTask; + return rv; + } + then.prototype = INTERNAL; + return then; + }, + set: function (value) { + setProp(this, 'then', value && value.prototype === INTERNAL ? + thenProp : + { + get: function () { + return value; + }, + set: thenProp.set + }); + } + }; + props(DexiePromise.prototype, { + then: thenProp, + _then: function (onFulfilled, onRejected) { + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + catch: function (onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + var type = arguments[0], handler = arguments[1]; + return typeof type === 'function' ? this.then(null, function (err) { + return err instanceof type ? handler(err) : PromiseReject(err); + }) + : this.then(null, function (err) { + return err && err.name === type ? handler(err) : PromiseReject(err); + }); + }, + finally: function (onFinally) { + return this.then(function (value) { + return DexiePromise.resolve(onFinally()).then(function () { return value; }); + }, function (err) { + return DexiePromise.resolve(onFinally()).then(function () { return PromiseReject(err); }); + }); + }, + timeout: function (ms, msg) { + var _this = this; + return ms < Infinity ? + new DexiePromise(function (resolve, reject) { + var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms); + _this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } + }); + if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise'); + globalPSD.env = snapShot(); + function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; + } + props(DexiePromise, { + all: function () { + var values = getArrayOf.apply(null, arguments) + .map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (values.length === 0) + resolve([]); + var remaining = values.length; + values.forEach(function (a, i) { return DexiePromise.resolve(a).then(function (x) { + values[i] = x; + if (!--remaining) + resolve(values); + }, reject); }); + }); + }, + resolve: function (value) { + if (value instanceof DexiePromise) + return value; + if (value && typeof value.then === 'function') + return new DexiePromise(function (resolve, reject) { + value.then(resolve, reject); + }); + var rv = new DexiePromise(INTERNAL, true, value); + return rv; + }, + reject: PromiseReject, + race: function () { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + values.map(function (value) { return DexiePromise.resolve(value).then(resolve, reject); }); + }); + }, + PSD: { + get: function () { return PSD; }, + set: function (value) { return PSD = value; } + }, + totalEchoes: { get: function () { return totalEchoes; } }, + newPSD: newScope, + usePSD: usePSD, + scheduler: { + get: function () { return asap; }, + set: function (value) { asap = value; } + }, + rejectionMapper: { + get: function () { return rejectionMapper; }, + set: function (value) { rejectionMapper = value; } + }, + follow: function (fn, zoneProps) { + return new DexiePromise(function (resolve, reject) { + return newScope(function (resolve, reject) { + var psd = PSD; + psd.unhandleds = []; + psd.onunhandled = reject; + psd.finalize = callBoth(function () { + var _this = this; + run_at_end_of_this_or_next_physical_tick(function () { + _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]); + }); + }, psd.finalize); + fn(); + }, zoneProps, resolve, reject); + }); + } + }); + if (NativePromise) { + if (NativePromise.allSettled) + setProp(DexiePromise, "allSettled", function () { + var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve) { + if (possiblePromises.length === 0) + resolve([]); + var remaining = possiblePromises.length; + var results = new Array(remaining); + possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return results[i] = { status: "fulfilled", value: value }; }, function (reason) { return results[i] = { status: "rejected", reason: reason }; }) + .then(function () { return --remaining || resolve(results); }); }); + }); + }); + if (NativePromise.any && typeof AggregateError !== 'undefined') + setProp(DexiePromise, "any", function () { + var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (possiblePromises.length === 0) + reject(new AggregateError([])); + var remaining = possiblePromises.length; + var failures = new Array(remaining); + possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return resolve(value); }, function (failure) { + failures[i] = failure; + if (!--remaining) + reject(new AggregateError(failures)); + }); }); + }); + }); + } + function executePromiseTask(promise, fn) { + try { + fn(function (value) { + if (promise._state !== null) + return; + if (value === promise) + throw new TypeError('A promise cannot be resolved with itself.'); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === 'function') { + executePromiseTask(promise, function (resolve, reject) { + value instanceof DexiePromise ? + value._then(resolve, reject) : + value.then(resolve, reject); + }); + } + else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, handleRejection.bind(null, promise)); + } + catch (ex) { + handleRejection(promise, ex); + } + } + function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); + } + function propagateAllListeners(promise) { + var listeners = promise._listeners; + promise._listeners = []; + for (var i = 0, len = listeners.length; i < len; ++i) { + propagateToListener(promise, listeners[i]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); + if (numScheduledCalls === 0) { + ++numScheduledCalls; + asap(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } + } + function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap(callListener, [cb, promise, listener]); + } + function callListener(cb, promise, listener) { + try { + var ret, value = promise._value; + if (!promise._state && rejectingErrors.length) + rejectingErrors = []; + ret = debug && promise._consoleTask ? promise._consoleTask.run(function () { return cb(value); }) : cb(value); + if (!promise._state && rejectingErrors.indexOf(value) === -1) { + markErrorAsHandled(promise); + } + listener.resolve(ret); + } + catch (e) { + listener.reject(e); + } + finally { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } + } + function physicalTick() { + usePSD(globalPSD, function () { + beginMicroTickScope() && endMicroTickScope(); + }); + } + function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; + } + function endMicroTickScope() { + var callbacks, i, l; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l = callbacks.length; + for (i = 0; i < l; ++i) { + var item = callbacks[i]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; + } + function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach(function (p) { + p._PSD.onunhandled.call(null, p._value, p); + }); + var finalizers = tickFinalizers.slice(0); + var i = finalizers.length; + while (i) + finalizers[--i](); + } + function run_at_end_of_this_or_next_physical_tick(fn) { + function finalizer() { + fn(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } + function addPossiblyUnhandledError(promise) { + if (!unhandledErrors.some(function (p) { return p._value === promise._value; })) + unhandledErrors.push(promise); + } + function markErrorAsHandled(promise) { + var i = unhandledErrors.length; + while (i) + if (unhandledErrors[--i]._value === promise._value) { + unhandledErrors.splice(i, 1); + return; + } + } + function PromiseReject(reason) { + return new DexiePromise(INTERNAL, false, reason); + } + function wrap(fn, errorCatcher) { + var psd = PSD; + return function () { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn.apply(this, arguments); + } + catch (e) { + errorCatcher && errorCatcher(e); + } + finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; + } + var task = { awaits: 0, echoes: 0, id: 0 }; + var taskCounter = 0; + var zoneStack = []; + var zoneEchoes = 0; + var totalEchoes = 0; + var zone_id_counter = 0; + function newScope(fn, props, a1, a2) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: DexiePromise, + PromiseProp: { value: DexiePromise, configurable: true, writable: true }, + all: DexiePromise.all, + race: DexiePromise.race, + allSettled: DexiePromise.allSettled, + any: DexiePromise.any, + resolve: DexiePromise.resolve, + reject: DexiePromise.reject, + } : {}; + if (props) + extend(psd, props); + ++parent.ref; + psd.finalize = function () { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn, a1, a2); + if (psd.ref === 0) + psd.finalize(); + return rv; + } + function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; + } + function decrementExpectedAwaits() { + if (!task.awaits) + return false; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; + return true; + } + if (('' + nativePromiseThen).indexOf('[native code]') === -1) { + incrementExpectedAwaits = decrementExpectedAwaits = nop; + } + function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then(function (x) { + decrementExpectedAwaits(); + return x; + }, function (e) { + decrementExpectedAwaits(); + return rejection(e); + }); + } + return possiblePromise; + } + function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.awaits = task.id = 0; + } + zoneStack.push(PSD); + switchToZone(targetZone, true); + } + function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); + } + function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + var GlobalPromise = globalPSD.env.Promise; + var targetEnv = targetZone.env; + if (currentZone.global || targetZone.global) { + Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + if (targetEnv.allSettled) + GlobalPromise.allSettled = targetEnv.allSettled; + if (targetEnv.any) + GlobalPromise.any = targetEnv.any; + } + } + } + function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + allSettled: GlobalPromise.allSettled, + any: GlobalPromise.any, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + } : {}; + } + function usePSD(psd, fn, a1, a2, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn(a1, a2, a3); + } + finally { + switchToZone(outerScope, false); + } + } + function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) { + return typeof fn !== 'function' ? fn : function () { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn.apply(this, arguments); + } + finally { + switchToZone(outerZone, false); + if (cleanup) + queueMicrotask(decrementExpectedAwaits); + } + }; + } + function execInGlobalContext(cb) { + if (Promise === NativePromise && task.echoes === 0) { + if (zoneEchoes === 0) { + cb(); + } + else { + enqueueNativeMicroTask(cb); + } + } + else { + setTimeout(cb, 0); + } + } + var rejection = DexiePromise.reject; + + function tempTransaction(db, mode, storeNames, fn) { + if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) { + if (db._state.openComplete) { + return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError)); + } + if (!db._state.isBeingOpened) { + if (!db._state.autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); + } + return db._state.dbReadyPromise.then(function () { return tempTransaction(db, mode, storeNames, fn); }); + } + else { + var trans = db._createTransaction(mode, storeNames, db._dbSchema); + try { + trans.create(); + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(function () { return tempTransaction(db, mode, storeNames, fn); }); + } + return rejection(ex); + } + return trans._promise(mode, function (resolve, reject) { + return newScope(function () { + PSD.trans = trans; + return fn(resolve, reject, trans); + }); + }).then(function (result) { + if (mode === 'readwrite') + try { + trans.idbtrans.commit(); + } + catch (_a) { } + return mode === 'readonly' ? result : trans._completion.then(function () { return result; }); + }); + } + } + + var DEXIE_VERSION = '4.0.7'; + var maxString = String.fromCharCode(65535); + var minKey = -Infinity; + var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; + var STRING_EXPECTED = "String expected."; + var connections = []; + var DBNAMES_DB = '__dbnames'; + var READONLY = 'readonly'; + var READWRITE = 'readwrite'; + + function combine(filter1, filter2) { + return filter1 ? + filter2 ? + function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : + filter1 : + filter2; + } + + var AnyRange = { + type: 3 , + lower: -Infinity, + lowerOpen: false, + upper: [[]], + upperOpen: false + }; + + function workaroundForUndefinedPrimKey(keyPath) { + return typeof keyPath === "string" && !/\./.test(keyPath) + ? function (obj) { + if (obj[keyPath] === undefined && (keyPath in obj)) { + obj = deepClone(obj); + delete obj[keyPath]; + } + return obj; + } + : function (obj) { return obj; }; + } + + function Entity() { + throw exceptions.Type(); + } + + function cmp(a, b) { + try { + var ta = type(a); + var tb = type(b); + if (ta !== tb) { + if (ta === 'Array') + return 1; + if (tb === 'Array') + return -1; + if (ta === 'binary') + return 1; + if (tb === 'binary') + return -1; + if (ta === 'string') + return 1; + if (tb === 'string') + return -1; + if (ta === 'Date') + return 1; + if (tb !== 'Date') + return NaN; + return -1; + } + switch (ta) { + case 'number': + case 'Date': + case 'string': + return a > b ? 1 : a < b ? -1 : 0; + case 'binary': { + return compareUint8Arrays(getUint8Array(a), getUint8Array(b)); + } + case 'Array': + return compareArrays(a, b); + } + } + catch (_a) { } + return NaN; + } + function compareArrays(a, b) { + var al = a.length; + var bl = b.length; + var l = al < bl ? al : bl; + for (var i = 0; i < l; ++i) { + var res = cmp(a[i], b[i]); + if (res !== 0) + return res; + } + return al === bl ? 0 : al < bl ? -1 : 1; + } + function compareUint8Arrays(a, b) { + var al = a.length; + var bl = b.length; + var l = al < bl ? al : bl; + for (var i = 0; i < l; ++i) { + if (a[i] !== b[i]) + return a[i] < b[i] ? -1 : 1; + } + return al === bl ? 0 : al < bl ? -1 : 1; + } + function type(x) { + var t = typeof x; + if (t !== 'object') + return t; + if (ArrayBuffer.isView(x)) + return 'binary'; + var tsTag = toStringTag(x); + return tsTag === 'ArrayBuffer' ? 'binary' : tsTag; + } + function getUint8Array(a) { + if (a instanceof Uint8Array) + return a; + if (ArrayBuffer.isView(a)) + return new Uint8Array(a.buffer, a.byteOffset, a.byteLength); + return new Uint8Array(a); + } + + var Table = (function () { + function Table() { + } + Table.prototype._trans = function (mode, fn, writeLocked) { + var trans = this._tx || PSD.trans; + var tableName = this.name; + var task = debug && typeof console !== 'undefined' && console.createTask && console.createTask("Dexie: ".concat(mode === 'readonly' ? 'read' : 'write', " ").concat(this.name)); + function checkTableInTransaction(resolve, reject, trans) { + if (!trans.schema[tableName]) + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + return fn(trans.idbtrans, trans); + } + var wasRootExec = beginMicroTickScope(); + try { + var p = trans && trans.db._novip === this.db._novip ? + trans === PSD.trans ? + trans._promise(mode, checkTableInTransaction, writeLocked) : + newScope(function () { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) : + tempTransaction(this.db, mode, [this.name], checkTableInTransaction); + if (task) { + p._consoleTask = task; + p = p.catch(function (err) { + console.trace(err); + return rejection(err); + }); + } + return p; + } + finally { + if (wasRootExec) + endMicroTickScope(); + } + }; + Table.prototype.get = function (keyOrCrit, cb) { + var _this = this; + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + if (keyOrCrit == null) + return rejection(new exceptions.Type("Invalid argument to Table.get()")); + return this._trans('readonly', function (trans) { + return _this.core.get({ trans: trans, key: keyOrCrit }) + .then(function (res) { return _this.hook.reading.fire(res); }); + }).then(cb); + }; + Table.prototype.where = function (indexOrCrit) { + if (typeof indexOrCrit === 'string') + return new this.db.WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new this.db.WhereClause(this, "[".concat(indexOrCrit.join('+'), "]")); + var keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + return this + .where(keyPaths[0]) + .equals(indexOrCrit[keyPaths[0]]); + var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) { + if (ix.compound && + keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; })) { + for (var i = 0; i < keyPaths.length; ++i) { + if (keyPaths.indexOf(ix.keyPath[i]) === -1) + return false; + } + return true; + } + return false; + }).sort(function (a, b) { return a.keyPath.length - b.keyPath.length; })[0]; + if (compoundIndex && this.db._maxKey !== maxString) { + var keyPathsInValidOrder = compoundIndex.keyPath.slice(0, keyPaths.length); + return this + .where(keyPathsInValidOrder) + .equals(keyPathsInValidOrder.map(function (kp) { return indexOrCrit[kp]; })); + } + if (!compoundIndex && debug) + console.warn("The query ".concat(JSON.stringify(indexOrCrit), " on ").concat(this.name, " would benefit from a ") + + "compound index [".concat(keyPaths.join('+'), "]")); + var idxByName = this.schema.idxByName; + var idb = this.db._deps.indexedDB; + function equals(a, b) { + return idb.cmp(a, b) === 0; + } + var _a = keyPaths.reduce(function (_a, keyPath) { + var prevIndex = _a[0], prevFilterFn = _a[1]; + var index = idxByName[keyPath]; + var value = indexOrCrit[keyPath]; + return [ + prevIndex || index, + prevIndex || !index ? + combine(prevFilterFn, index && index.multi ? + function (x) { + var prop = getByKeyPath(x, keyPath); + return isArray(prop) && prop.some(function (item) { return equals(value, item); }); + } : function (x) { return equals(value, getByKeyPath(x, keyPath)); }) + : prevFilterFn + ]; + }, [null, null]), idx = _a[0], filterFunction = _a[1]; + return idx ? + this.where(idx.name).equals(indexOrCrit[idx.keyPath]) + .filter(filterFunction) : + compoundIndex ? + this.filter(filterFunction) : + this.where(keyPaths).equals(''); + }; + Table.prototype.filter = function (filterFunction) { + return this.toCollection().and(filterFunction); + }; + Table.prototype.count = function (thenShortcut) { + return this.toCollection().count(thenShortcut); + }; + Table.prototype.offset = function (offset) { + return this.toCollection().offset(offset); + }; + Table.prototype.limit = function (numRows) { + return this.toCollection().limit(numRows); + }; + Table.prototype.each = function (callback) { + return this.toCollection().each(callback); + }; + Table.prototype.toArray = function (thenShortcut) { + return this.toCollection().toArray(thenShortcut); + }; + Table.prototype.toCollection = function () { + return new this.db.Collection(new this.db.WhereClause(this)); + }; + Table.prototype.orderBy = function (index) { + return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? + "[".concat(index.join('+'), "]") : + index)); + }; + Table.prototype.reverse = function () { + return this.toCollection().reverse(); + }; + Table.prototype.mapToClass = function (constructor) { + var _a = this, db = _a.db, tableName = _a.name; + this.schema.mappedClass = constructor; + if (constructor.prototype instanceof Entity) { + constructor = (function (_super) { + __extends(class_1, _super); + function class_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(class_1.prototype, "db", { + get: function () { return db; }, + enumerable: false, + configurable: true + }); + class_1.prototype.table = function () { return tableName; }; + return class_1; + }(constructor)); + } + var inheritedProps = new Set(); + for (var proto = constructor.prototype; proto; proto = getProto(proto)) { + Object.getOwnPropertyNames(proto).forEach(function (propName) { return inheritedProps.add(propName); }); + } + var readHook = function (obj) { + if (!obj) + return obj; + var res = Object.create(constructor.prototype); + for (var m in obj) + if (!inheritedProps.has(m)) + try { + res[m] = obj[m]; + } + catch (_) { } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + }; + Table.prototype.defineClass = function () { + function Class(content) { + extend(this, content); + } + return this.mapToClass(Class); + }; + Table.prototype.add = function (obj, key) { + var _this = this; + var _a = this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + var objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', function (trans) { + return _this.core.mutate({ trans: trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] }); + }).then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }) + .then(function (lastResult) { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + }; + Table.prototype.update = function (keyOrObject, modifications) { + if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { + var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === undefined) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + return this.where(":id").equals(key).modify(modifications); + } + else { + return this.where(":id").equals(keyOrObject).modify(modifications); + } + }; + Table.prototype.put = function (obj, key) { + var _this = this; + var _a = this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + var objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }) + .then(function (lastResult) { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + }; + Table.prototype.delete = function (key) { + var _this = this; + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'delete', keys: [key] }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; }); + }; + Table.prototype.clear = function () { + var _this = this; + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'deleteRange', range: AnyRange }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; }); + }; + Table.prototype.bulkGet = function (keys) { + var _this = this; + return this._trans('readonly', function (trans) { + return _this.core.getMany({ + keys: keys, + trans: trans + }).then(function (result) { return result.map(function (res) { return _this.hook.reading.fire(res); }); }); + }); + }; + Table.prototype.bulkAdd = function (objects, keysOrOptions, options) { + var _this = this; + var keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + var wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', function (trans) { + var _a = _this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + var numObjects = objects.length; + var objectsToAdd = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return _this.core.mutate({ trans: trans, type: 'add', keys: keys, values: objectsToAdd, wantResults: wantResults }) + .then(function (_a) { + var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures; + var result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError("".concat(_this.name, ".bulkAdd(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); + }); + }); + }; + Table.prototype.bulkPut = function (objects, keysOrOptions, options) { + var _this = this; + var keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + var wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', function (trans) { + var _a = _this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + var numObjects = objects.length; + var objectsToPut = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return _this.core.mutate({ trans: trans, type: 'put', keys: keys, values: objectsToPut, wantResults: wantResults }) + .then(function (_a) { + var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures; + var result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError("".concat(_this.name, ".bulkPut(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); + }); + }); + }; + Table.prototype.bulkUpdate = function (keysAndChanges) { + var _this = this; + var coreTable = this.core; + var keys = keysAndChanges.map(function (entry) { return entry.key; }); + var changeSpecs = keysAndChanges.map(function (entry) { return entry.changes; }); + var offsetMap = []; + return this._trans('readwrite', function (trans) { + return coreTable.getMany({ trans: trans, keys: keys, cache: 'clone' }).then(function (objs) { + var resultKeys = []; + var resultObjs = []; + keysAndChanges.forEach(function (_a, idx) { + var key = _a.key, changes = _a.changes; + var obj = objs[idx]; + if (obj) { + for (var _i = 0, _b = Object.keys(changes); _i < _b.length; _i++) { + var keyPath = _b[_i]; + var value = changes[keyPath]; + if (keyPath === _this.schema.primKey.keyPath) { + if (cmp(value, key) !== 0) { + throw new exceptions.Constraint("Cannot update primary key in bulkUpdate()"); + } + } + else { + setByKeyPath(obj, keyPath, value); + } + } + offsetMap.push(idx); + resultKeys.push(key); + resultObjs.push(obj); + } + }); + var numEntries = resultKeys.length; + return coreTable + .mutate({ + trans: trans, + type: 'put', + keys: resultKeys, + values: resultObjs, + updates: { + keys: keys, + changeSpecs: changeSpecs + } + }) + .then(function (_a) { + var numFailures = _a.numFailures, failures = _a.failures; + if (numFailures === 0) + return numEntries; + for (var _i = 0, _b = Object.keys(failures); _i < _b.length; _i++) { + var offset = _b[_i]; + var mappedOffset = offsetMap[Number(offset)]; + if (mappedOffset != null) { + var failure = failures[offset]; + delete failures[offset]; + failures[mappedOffset] = failure; + } + } + throw new BulkError("".concat(_this.name, ".bulkUpdate(): ").concat(numFailures, " of ").concat(numEntries, " operations failed"), failures); + }); + }); + }); + }; + Table.prototype.bulkDelete = function (keys) { + var _this = this; + var numKeys = keys.length; + return this._trans('readwrite', function (trans) { + return _this.core.mutate({ trans: trans, type: 'delete', keys: keys }); + }).then(function (_a) { + var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures; + if (numFailures === 0) + return lastResult; + throw new BulkError("".concat(_this.name, ".bulkDelete(): ").concat(numFailures, " of ").concat(numKeys, " operations failed"), failures); + }); + }; + return Table; + }()); + + function Events(ctx) { + var evs = {}; + var rv = function (eventName, subscriber) { + if (subscriber) { + var i = arguments.length, args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } + else if (typeof (eventName) === 'string') { + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i = 1, l = arguments.length; i < l; ++i) { + add(arguments[i]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === 'object') + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function (cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function (cb) { + context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + keys(cfg).forEach(function (eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } + else if (args === 'asap') { + var context = add(eventName, mirror, function fire() { + var i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + context.subscribers.forEach(function (fn) { + asap$1(function fireEvent() { + fn.apply(null, args); + }); + }); + }); + } + else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } + } + + function makeClassConstructor(prototype, constructor) { + derive(constructor).from({ prototype: prototype }); + return constructor; + } + + function createTableConstructor(db) { + return makeClassConstructor(Table.prototype, function Table(name, tableSchema, trans) { + this.db = db; + this._tx = trans; + this.name = name; + this.schema = tableSchema; + this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + }); + } + + function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && + (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); + } + function addFilter(ctx, fn) { + ctx.filter = combine(ctx.filter, fn); + } + function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory; + ctx.justLimit = isLimitFilter && !curr; + } + function addMatchFilter(ctx, fn) { + ctx.isMatch = combine(ctx.isMatch, fn); + } + function getIndexOrStore(ctx, coreSchema) { + if (ctx.isPrimKey) + return coreSchema.primaryKey; + var index = coreSchema.getIndexByKeyPath(ctx.index); + if (!index) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); + return index; + } + function openCursor(ctx, coreTable, trans) { + var index = getIndexOrStore(ctx, coreTable.schema); + return coreTable.openCursor({ + trans: trans, + values: !ctx.keysOnly, + reverse: ctx.dir === 'prev', + unique: !!ctx.unique, + query: { + index: index, + range: ctx.range + } + }); + } + function iter(ctx, fn, coreTrans, coreTable) { + var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper); + } + else { + var set_1 = {}; + var union = function (item, cursor, advance) { + if (!filter || filter(cursor, advance, function (result) { return cursor.stop(result); }, function (err) { return cursor.fail(err); })) { + var primaryKey = cursor.primaryKey; + var key = '' + primaryKey; + if (key === '[object ArrayBuffer]') + key = '' + new Uint8Array(primaryKey); + if (!hasOwn(set_1, key)) { + set_1[key] = true; + fn(item, cursor, advance); + } + } + }; + return Promise.all([ + ctx.or._iterate(union, coreTrans), + iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) + ]); + } + } + function iterate(cursorPromise, filter, fn, valueMapper) { + var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn; + var wrappedFn = wrap(mappedFn); + return cursorPromise.then(function (cursor) { + if (cursor) { + return cursor.start(function () { + var c = function () { return cursor.continue(); }; + if (!filter || filter(cursor, function (advancer) { return c = advancer; }, function (val) { cursor.stop(val); c = nop; }, function (e) { cursor.fail(e); c = nop; })) + wrappedFn(cursor.value, cursor, function (advancer) { return c = advancer; }); + c(); + }); + } + }); + } + + var PropModSymbol = Symbol(); + var PropModification = (function () { + function PropModification(spec) { + Object.assign(this, spec); + } + PropModification.prototype.execute = function (value) { + var _a; + if (this.add !== undefined) { + var term = this.add; + if (isArray(term)) { + return __spreadArray(__spreadArray([], (isArray(value) ? value : []), true), term, true).sort(); + } + if (typeof term === 'number') + return (Number(value) || 0) + term; + if (typeof term === 'bigint') { + try { + return BigInt(value) + term; + } + catch (_b) { + return BigInt(0) + term; + } + } + throw new TypeError("Invalid term ".concat(term)); + } + if (this.remove !== undefined) { + var subtrahend_1 = this.remove; + if (isArray(subtrahend_1)) { + return isArray(value) ? value.filter(function (item) { return !subtrahend_1.includes(item); }).sort() : []; + } + if (typeof subtrahend_1 === 'number') + return Number(value) - subtrahend_1; + if (typeof subtrahend_1 === 'bigint') { + try { + return BigInt(value) - subtrahend_1; + } + catch (_c) { + return BigInt(0) - subtrahend_1; + } + } + throw new TypeError("Invalid subtrahend ".concat(subtrahend_1)); + } + var prefixToReplace = (_a = this.replacePrefix) === null || _a === void 0 ? void 0 : _a[0]; + if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) { + return this.replacePrefix[1] + value.substring(prefixToReplace.length); + } + return value; + }; + return PropModification; + }()); + + var Collection = (function () { + function Collection() { + } + Collection.prototype._read = function (fn, cb) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readonly', fn).then(cb); + }; + Collection.prototype._write = function (fn) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readwrite', fn, "locked"); + }; + Collection.prototype._addAlgorithm = function (fn) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn); + }; + Collection.prototype._iterate = function (fn, coreTrans) { + return iter(this._ctx, fn, coreTrans, this._ctx.table.core); + }; + Collection.prototype.clone = function (props) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props) + extend(ctx, props); + rv._ctx = ctx; + return rv; + }; + Collection.prototype.raw = function () { + this._ctx.valueMapper = null; + return this; + }; + Collection.prototype.each = function (fn) { + var ctx = this._ctx; + return this._read(function (trans) { return iter(ctx, fn, trans, ctx.table.core); }); + }; + Collection.prototype.count = function (cb) { + var _this = this; + return this._read(function (trans) { + var ctx = _this._ctx; + var coreTable = ctx.table.core; + if (isPlainKeyRange(ctx, true)) { + return coreTable.count({ + trans: trans, + query: { + index: getIndexOrStore(ctx, coreTable.schema), + range: ctx.range + } + }).then(function (count) { return Math.min(count, ctx.limit); }); + } + else { + var count = 0; + return iter(ctx, function () { ++count; return false; }, trans, coreTable) + .then(function () { return count; }); + } + }).then(cb); + }; + Collection.prototype.sortBy = function (keyPath, cb) { + var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i) { + if (i) + return getval(obj[parts[i]], i - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a, b) { + var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function (a) { + return a.sort(sorter); + }).then(cb); + }; + Collection.prototype.toArray = function (cb) { + var _this = this; + return this._read(function (trans) { + var ctx = _this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + var valueMapper_1 = ctx.valueMapper; + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans: trans, + limit: ctx.limit, + values: true, + query: { + index: index, + range: ctx.range + } + }).then(function (_a) { + var result = _a.result; + return valueMapper_1 ? result.map(valueMapper_1) : result; + }); + } + else { + var a_1 = []; + return iter(ctx, function (item) { return a_1.push(item); }, trans, ctx.table.core).then(function () { return a_1; }); + } + }, cb); + }; + Collection.prototype.offset = function (offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function (cursor, advance) { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(function () { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } + else { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function () { return (--offsetLeft < 0); }; + }); + } + return this; + }; + Collection.prototype.limit = function (numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); + addReplayFilter(this._ctx, function () { + var rowsLeft = numRows; + return function (cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); + return rowsLeft >= 0; + }; + }, true); + return this; + }; + Collection.prototype.until = function (filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function (cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } + else { + return true; + } + }); + return this; + }; + Collection.prototype.first = function (cb) { + return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); + }; + Collection.prototype.last = function (cb) { + return this.reverse().first(cb); + }; + Collection.prototype.filter = function (filterFunction) { + addFilter(this._ctx, function (cursor) { + return filterFunction(cursor.value); + }); + addMatchFilter(this._ctx, filterFunction); + return this; + }; + Collection.prototype.and = function (filter) { + return this.filter(filter); + }; + Collection.prototype.or = function (indexName) { + return new this.db.WhereClause(this._ctx.table, indexName, this); + }; + Collection.prototype.reverse = function () { + this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + }; + Collection.prototype.desc = function () { + return this.reverse(); + }; + Collection.prototype.eachKey = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.key, cursor); }); + }; + Collection.prototype.eachUniqueKey = function (cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + }; + Collection.prototype.eachPrimaryKey = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); + }; + Collection.prototype.keys = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.key); + }).then(function () { + return a; + }).then(cb); + }; + Collection.prototype.primaryKeys = function (cb) { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + return this._read(function (trans) { + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans: trans, + values: false, + limit: ctx.limit, + query: { + index: index, + range: ctx.range + } + }); + }).then(function (_a) { + var result = _a.result; + return result; + }).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.primaryKey); + }).then(function () { + return a; + }).then(cb); + }; + Collection.prototype.uniqueKeys = function (cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + }; + Collection.prototype.firstKey = function (cb) { + return this.limit(1).keys(function (a) { return a[0]; }).then(cb); + }; + Collection.prototype.lastKey = function (cb) { + return this.reverse().firstKey(cb); + }; + Collection.prototype.distinct = function () { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; + var set = {}; + addFilter(this._ctx, function (cursor) { + var strKey = cursor.primaryKey.toString(); + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + }; + Collection.prototype.modify = function (changes) { + var _this = this; + var ctx = this._ctx; + return this._write(function (trans) { + var modifyer; + if (typeof changes === 'function') { + modifyer = changes; + } + else { + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function (item) { + var anythingModified = false; + for (var i = 0; i < numKeys; ++i) { + var keyPath = keyPaths[i]; + var val = changes[keyPath]; + var origVal = getByKeyPath(item, keyPath); + if (val instanceof PropModification) { + setByKeyPath(item, keyPath, val.execute(origVal)); + anythingModified = true; + } + else if (origVal !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + } + return anythingModified; + }; + } + var coreTable = ctx.table.core; + var _a = coreTable.schema.primaryKey, outbound = _a.outbound, extractKey = _a.extractKey; + var limit = _this.db._options.modifyChunkSize || 200; + var totalFailures = []; + var successCount = 0; + var failedKeys = []; + var applyMutateResult = function (expectedCount, res) { + var failures = res.failures, numFailures = res.numFailures; + successCount += expectedCount - numFailures; + for (var _i = 0, _a = keys(failures); _i < _a.length; _i++) { + var pos = _a[_i]; + totalFailures.push(failures[pos]); + } + }; + return _this.clone().primaryKeys().then(function (keys) { + var criteria = isPlainKeyRange(ctx) && + ctx.limit === Infinity && + (typeof changes !== 'function' || changes === deleteCallback) && { + index: ctx.index, + range: ctx.range + }; + var nextChunk = function (offset) { + var count = Math.min(limit, keys.length - offset); + return coreTable.getMany({ + trans: trans, + keys: keys.slice(offset, offset + count), + cache: "immutable" + }).then(function (values) { + var addValues = []; + var putValues = []; + var putKeys = outbound ? [] : null; + var deleteKeys = []; + for (var i = 0; i < count; ++i) { + var origValue = values[i]; + var ctx_1 = { + value: deepClone(origValue), + primKey: keys[offset + i] + }; + if (modifyer.call(ctx_1, ctx_1.value, ctx_1) !== false) { + if (ctx_1.value == null) { + deleteKeys.push(keys[offset + i]); + } + else if (!outbound && cmp(extractKey(origValue), extractKey(ctx_1.value)) !== 0) { + deleteKeys.push(keys[offset + i]); + addValues.push(ctx_1.value); + } + else { + putValues.push(ctx_1.value); + if (outbound) + putKeys.push(keys[offset + i]); + } + } + } + return Promise.resolve(addValues.length > 0 && + coreTable.mutate({ trans: trans, type: 'add', values: addValues }) + .then(function (res) { + for (var pos in res.failures) { + deleteKeys.splice(parseInt(pos), 1); + } + applyMutateResult(addValues.length, res); + })).then(function () { return (putValues.length > 0 || (criteria && typeof changes === 'object')) && + coreTable.mutate({ + trans: trans, + type: 'put', + keys: putKeys, + values: putValues, + criteria: criteria, + changeSpec: typeof changes !== 'function' + && changes, + isAdditionalChunk: offset > 0 + }).then(function (res) { return applyMutateResult(putValues.length, res); }); }).then(function () { return (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) && + coreTable.mutate({ + trans: trans, + type: 'delete', + keys: deleteKeys, + criteria: criteria, + isAdditionalChunk: offset > 0 + }).then(function (res) { return applyMutateResult(deleteKeys.length, res); }); }).then(function () { + return keys.length > offset + count && nextChunk(offset + limit); + }); + }); + }; + return nextChunk(0).then(function () { + if (totalFailures.length > 0) + throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); + return keys.length; + }); + }); + }); + }; + Collection.prototype.delete = function () { + var ctx = this._ctx, range = ctx.range; + if (isPlainKeyRange(ctx) && + (ctx.isPrimKey || range.type === 3 )) + { + return this._write(function (trans) { + var primaryKey = ctx.table.core.schema.primaryKey; + var coreRange = range; + return ctx.table.core.count({ trans: trans, query: { index: primaryKey, range: coreRange } }).then(function (count) { + return ctx.table.core.mutate({ trans: trans, type: 'deleteRange', range: coreRange }) + .then(function (_a) { + var failures = _a.failures; _a.lastResult; _a.results; var numFailures = _a.numFailures; + if (numFailures) + throw new ModifyError("Could not delete some values", Object.keys(failures).map(function (pos) { return failures[pos]; }), count - numFailures); + return count - numFailures; + }); + }); + }); + } + return this.modify(deleteCallback); + }; + return Collection; + }()); + var deleteCallback = function (value, ctx) { return ctx.value = null; }; + + function createCollectionConstructor(db) { + return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) { + this.db = db; + var keyRange = AnyRange, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } + catch (ex) { + error = ex; + } + var whereCtx = whereClause._ctx; + var table = whereCtx.table; + var readingHook = table.hook.reading.fire; + this._ctx = { + table: table, + index: whereCtx.index, + isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error: error, + or: whereCtx.or, + valueMapper: readingHook !== mirror ? readingHook : null + }; + }); + } + + function simpleCompare(a, b) { + return a < b ? -1 : a === b ? 0 : 1; + } + function simpleCompareReverse(a, b) { + return a > b ? -1 : a === b ? 0 : 1; + } + + function fail(collectionOrWhereClause, err, T) { + var collection = collectionOrWhereClause instanceof WhereClause ? + new collectionOrWhereClause.Collection(collectionOrWhereClause) : + collectionOrWhereClause; + collection._ctx.error = T ? new T(err) : new TypeError(err); + return collection; + } + function emptyCollection(whereClause) { + return new whereClause.Collection(whereClause, function () { return rangeEqual(""); }).limit(0); + } + function upperFactory(dir) { + return dir === "next" ? + function (s) { return s.toUpperCase(); } : + function (s) { return s.toLowerCase(); }; + } + function lowerFactory(dir) { + return dir === "next" ? + function (s) { return s.toLowerCase(); } : + function (s) { return s.toUpperCase(); }; + } + function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i = 0; i < length; ++i) { + var lwrKeyChar = lowerKey[i]; + if (lwrKeyChar !== lowerNeedle[i]) { + if (cmp(key[i], upperNeedle[i]) < 0) + return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); + if (cmp(key[i], lowerNeedle[i]) < 0) + return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp(key[i], lwrKeyChar) < 0) + llp = i; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); + } + function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every(function (s) { return typeof s === 'string'; })) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = (dir === "next" ? simpleCompare : simpleCompareReverse); + var needleBounds = needles.map(function (needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function (a, b) { + return compare(a.lower, b.lower); + }); + upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); + lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); + direction = dir; + nextKeySuffix = (dir === "next" ? "" : suffix); + } + initDirection("next"); + var c = new whereClause.Collection(whereClause, function () { return createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); }); + c._ondirectionchange = function (direction) { + initDirection(direction); + }; + var firstPossibleNeedle = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + if (typeof key !== 'string') + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } + else { + var lowestPossibleCasing = null; + for (var i = firstPossibleNeedle; i < needlesLen; ++i) { + var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); + } + else { + advance(resolve); + } + return false; + } + }); + return c; + } + function createRange(lower, upper, lowerOpen, upperOpen) { + return { + type: 2 , + lower: lower, + upper: upper, + lowerOpen: lowerOpen, + upperOpen: upperOpen + }; + } + function rangeEqual(value) { + return { + type: 1 , + lower: value, + upper: value + }; + } + + var WhereClause = (function () { + function WhereClause() { + } + Object.defineProperty(WhereClause.prototype, "Collection", { + get: function () { + return this._ctx.table.db.Collection; + }, + enumerable: false, + configurable: true + }); + WhereClause.prototype.between = function (lower, upper, includeLower, includeUpper) { + includeLower = includeLower !== false; + includeUpper = includeUpper === true; + try { + if ((this._cmp(lower, upper) > 0) || + (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) + return emptyCollection(this); + return new this.Collection(this, function () { return createRange(lower, upper, !includeLower, !includeUpper); }); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + }; + WhereClause.prototype.equals = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return rangeEqual(value); }); + }; + WhereClause.prototype.above = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(value, undefined, true); }); + }; + WhereClause.prototype.aboveOrEqual = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(value, undefined, false); }); + }; + WhereClause.prototype.below = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(undefined, value, false, true); }); + }; + WhereClause.prototype.belowOrEqual = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(undefined, value); }); + }; + WhereClause.prototype.startsWith = function (str) { + if (typeof str !== 'string') + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + }; + WhereClause.prototype.startsWithIgnoreCase = function (str) { + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString); + }; + WhereClause.prototype.equalsIgnoreCase = function (str) { + return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], ""); + }; + WhereClause.prototype.anyOfIgnoreCase = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, ""); + }; + WhereClause.prototype.startsWithAnyOfIgnoreCase = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.some(function (n) { return x.indexOf(n) === 0; }); }, set, maxString); + }; + WhereClause.prototype.anyOf = function () { + var _this = this; + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + var compare = this._cmp; + try { + set.sort(compare); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + var c = new this.Collection(this, function () { return createRange(set[0], set[set.length - 1]); }); + c._ondirectionchange = function (direction) { + compare = (direction === "next" ? + _this._ascending : + _this._descending); + set.sort(compare); + }; + var i = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (compare(key, set[i]) > 0) { + ++i; + if (i === set.length) { + advance(resolve); + return false; + } + } + if (compare(key, set[i]) === 0) { + return true; + } + else { + advance(function () { cursor.continue(set[i]); }); + return false; + } + }); + return c; + }; + WhereClause.prototype.notEqual = function (value) { + return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false }); + }; + WhereClause.prototype.noneOf = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new this.Collection(this); + try { + set.sort(this._ascending); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var ranges = set.reduce(function (res, val) { return res ? + res.concat([[res[res.length - 1][1], val]]) : + [[minKey, val]]; }, null); + ranges.push([set[set.length - 1], this.db._maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + }; + WhereClause.prototype.inAnyRange = function (ranges, options) { + var _this = this; + var cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every(function (range) { + return range[0] !== undefined && + range[1] !== undefined && + ascending(range[0], range[1]) <= 0; + })) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + var includeLowers = !options || options.includeLowers !== false; + var includeUppers = options && options.includeUppers === true; + function addRange(ranges, newRange) { + var i = 0, l = ranges.length; + for (; i < l; ++i) { + var range = ranges[i]; + if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i === l) + ranges.push(newRange); + return ranges; + } + var sortDirection = ascending; + function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } + var set; + try { + set = ranges.reduce(addRange, []); + set.sort(rangeSorter); + } + catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var rangePos = 0; + var keyIsBeyondCurrentEntry = includeUppers ? + function (key) { return ascending(key, set[rangePos][1]) > 0; } : + function (key) { return ascending(key, set[rangePos][1]) >= 0; }; + var keyIsBeforeCurrentEntry = includeLowers ? + function (key) { return descending(key, set[rangePos][0]) > 0; } : + function (key) { return descending(key, set[rangePos][0]) >= 0; }; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + var checkKey = keyIsBeyondCurrentEntry; + var c = new this.Collection(this, function () { return createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); }); + c._ondirectionchange = function (direction) { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } + else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (checkKey(key)) { + ++rangePos; + if (rangePos === set.length) { + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + return true; + } + else if (_this._cmp(key, set[rangePos][1]) === 0 || _this._cmp(key, set[rangePos][0]) === 0) { + return false; + } + else { + advance(function () { + if (sortDirection === ascending) + cursor.continue(set[rangePos][0]); + else + cursor.continue(set[rangePos][1]); + }); + return false; + } + }); + return c; + }; + WhereClause.prototype.startsWithAnyOf = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every(function (s) { return typeof s === 'string'; })) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map(function (str) { return [str, str + maxString]; })); + }; + return WhereClause; + }()); + + function createWhereClauseConstructor(db) { + return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) { + this.db = db; + this._ctx = { + table: table, + index: index === ":id" ? null : index, + or: orCollection + }; + this._cmp = this._ascending = cmp; + this._descending = function (a, b) { return cmp(b, a); }; + this._max = function (a, b) { return cmp(a, b) > 0 ? a : b; }; + this._min = function (a, b) { return cmp(a, b) < 0 ? a : b; }; + this._IDBKeyRange = db._deps.IDBKeyRange; + if (!this._IDBKeyRange) + throw new exceptions.MissingAPI(); + }); + } + + function eventRejectHandler(reject) { + return wrap(function (event) { + preventDefault(event); + reject(event.target.error); + return false; + }); + } + function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); + } + + var DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated'; + var STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1'; + var globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME); + + var Transaction = (function () { + function Transaction() { + } + Transaction.prototype._lock = function () { + assert(!PSD.global); + ++this._reculock; + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + }; + Transaction.prototype._unlock = function () { + assert(!PSD.global); + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } + catch (e) { } + } + } + return this; + }; + Transaction.prototype._locked = function () { + return this._reculock && PSD.lockOwnerFor !== this; + }; + Transaction.prototype.create = function (idbtrans) { + var _this = this; + if (!this.mode) + return this; + var idbdb = this.db.idbdb; + var dbOpenError = this.db._state.dbOpenError; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || + (this.db.core + ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) + : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); + idbtrans.onerror = wrap(function (ev) { + preventDefault(ev); + _this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap(function (ev) { + preventDefault(ev); + _this.active && _this._reject(new exceptions.Abort(idbtrans.error)); + _this.active = false; + _this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(function () { + _this.active = false; + _this._resolve(); + if ('mutatedParts' in idbtrans) { + globalEvents.storagemutated.fire(idbtrans["mutatedParts"]); + } + }); + return this; + }; + Transaction.prototype._promise = function (mode, fn, bWriteLock) { + var _this = this; + if (mode === 'readwrite' && this.mode !== 'readwrite') + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new DexiePromise(function (resolve, reject) { + _this._blockedFuncs.push([function () { + _this._promise(mode, fn, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } + else if (bWriteLock) { + return newScope(function () { + var p = new DexiePromise(function (resolve, reject) { + _this._lock(); + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p.finally(function () { return _this._unlock(); }); + p._lib = true; + return p; + }); + } + else { + var p = new DexiePromise(function (resolve, reject) { + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p._lib = true; + return p; + } + }; + Transaction.prototype._root = function () { + return this.parent ? this.parent._root() : this; + }; + Transaction.prototype.waitFor = function (promiseLike) { + var root = this._root(); + var promise = DexiePromise.resolve(promiseLike); + if (root._waitingFor) { + root._waitingFor = root._waitingFor.then(function () { return promise; }); + } + else { + root._waitingFor = promise; + root._waitingQueue = []; + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; + while (root._waitingQueue.length) + (root._waitingQueue.shift())(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + }()); + } + var currentWaitPromise = root._waitingFor; + return new DexiePromise(function (resolve, reject) { + promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () { + if (root._waitingFor === currentWaitPromise) { + root._waitingFor = null; + } + }); + }); + }; + Transaction.prototype.abort = function () { + if (this.active) { + this.active = false; + if (this.idbtrans) + this.idbtrans.abort(); + this._reject(new exceptions.Abort()); + } + }; + Transaction.prototype.table = function (tableName) { + var memoizedTables = (this._memoizedTables || (this._memoizedTables = {})); + if (hasOwn(memoizedTables, tableName)) + return memoizedTables[tableName]; + var tableSchema = this.schema[tableName]; + if (!tableSchema) { + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + } + var transactionBoundTable = new this.db.Table(tableName, tableSchema, this); + transactionBoundTable.core = this.db.core.table(tableName); + memoizedTables[tableName] = transactionBoundTable; + return transactionBoundTable; + }; + return Transaction; + }()); + + function createTransactionConstructor(db) { + return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) { + var _this = this; + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.schema = dbschema; + this.chromeTransactionDurability = chromeTransactionDurability; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; + this._completion = new DexiePromise(function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + }); + this._completion.then(function () { + _this.active = false; + _this.on.complete.fire(); + }, function (e) { + var wasActive = _this.active; + _this.active = false; + _this.on.error.fire(e); + _this.parent ? + _this.parent._reject(e) : + wasActive && _this.idbtrans && _this.idbtrans.abort(); + return rejection(e); + }); + }); + } + + function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) { + return { + name: name, + keyPath: keyPath, + unique: unique, + multi: multi, + auto: auto, + compound: compound, + src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath) + }; + } + function nameFromKeyPath(keyPath) { + return typeof keyPath === 'string' ? + keyPath : + keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : ""; + } + + function createTableSchema(name, primKey, indexes) { + return { + name: name, + primKey: primKey, + indexes: indexes, + mappedClass: null, + idxByName: arrayToObject(indexes, function (index) { return [index.name, index]; }) + }; + } + + function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; + } + var getMaxKey = function (IdbKeyRange) { + try { + IdbKeyRange.only([[]]); + getMaxKey = function () { return [[]]; }; + return [[]]; + } + catch (e) { + getMaxKey = function () { return maxString; }; + return maxString; + } + }; + + function getKeyExtractor(keyPath) { + if (keyPath == null) { + return function () { return undefined; }; + } + else if (typeof keyPath === 'string') { + return getSinglePathKeyExtractor(keyPath); + } + else { + return function (obj) { return getByKeyPath(obj, keyPath); }; + } + } + function getSinglePathKeyExtractor(keyPath) { + var split = keyPath.split('.'); + if (split.length === 1) { + return function (obj) { return obj[keyPath]; }; + } + else { + return function (obj) { return getByKeyPath(obj, keyPath); }; + } + } + + function arrayify(arrayLike) { + return [].slice.call(arrayLike); + } + var _id_counter = 0; + function getKeyPathAlias(keyPath) { + return keyPath == null ? + ":id" : + typeof keyPath === 'string' ? + keyPath : + "[".concat(keyPath.join('+'), "]"); + } + function createDBCore(db, IdbKeyRange, tmpTrans) { + function extractSchema(db, trans) { + var tables = arrayify(db.objectStoreNames); + return { + schema: { + name: db.name, + tables: tables.map(function (table) { return trans.objectStore(table); }).map(function (store) { + var keyPath = store.keyPath, autoIncrement = store.autoIncrement; + var compound = isArray(keyPath); + var outbound = keyPath == null; + var indexByKeyPath = {}; + var result = { + name: store.name, + primaryKey: { + name: null, + isPrimaryKey: true, + outbound: outbound, + compound: compound, + keyPath: keyPath, + autoIncrement: autoIncrement, + unique: true, + extractKey: getKeyExtractor(keyPath) + }, + indexes: arrayify(store.indexNames).map(function (indexName) { return store.index(indexName); }) + .map(function (index) { + var name = index.name, unique = index.unique, multiEntry = index.multiEntry, keyPath = index.keyPath; + var compound = isArray(keyPath); + var result = { + name: name, + compound: compound, + keyPath: keyPath, + unique: unique, + multiEntry: multiEntry, + extractKey: getKeyExtractor(keyPath) + }; + indexByKeyPath[getKeyPathAlias(keyPath)] = result; + return result; + }), + getIndexByKeyPath: function (keyPath) { return indexByKeyPath[getKeyPathAlias(keyPath)]; } + }; + indexByKeyPath[":id"] = result.primaryKey; + if (keyPath != null) { + indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; + } + return result; + }) + }, + hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) && + !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) + }; + } + function makeIDBKeyRange(range) { + if (range.type === 3 ) + return null; + if (range.type === 4 ) + throw new Error("Cannot convert never type to IDBKeyRange"); + var lower = range.lower, upper = range.upper, lowerOpen = range.lowerOpen, upperOpen = range.upperOpen; + var idbRange = lower === undefined ? + upper === undefined ? + null : + IdbKeyRange.upperBound(upper, !!upperOpen) : + upper === undefined ? + IdbKeyRange.lowerBound(lower, !!lowerOpen) : + IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); + return idbRange; + } + function createDbCoreTable(tableSchema) { + var tableName = tableSchema.name; + function mutate(_a) { + var trans = _a.trans, type = _a.type, keys = _a.keys, values = _a.values, range = _a.range; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var outbound = store.keyPath == null; + var isAddOrPut = type === "put" || type === "add"; + if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange') + throw new Error("Invalid operation type: " + type); + var length = (keys || values || { length: 1 }).length; + if (keys && values && keys.length !== values.length) { + throw new Error("Given keys array must have same length as given values array."); + } + if (length === 0) + return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined }); + var req; + var reqs = []; + var failures = []; + var numFailures = 0; + var errorHandler = function (event) { + ++numFailures; + preventDefault(event); + }; + if (type === 'deleteRange') { + if (range.type === 4 ) + return resolve({ numFailures: numFailures, failures: failures, results: [], lastResult: undefined }); + if (range.type === 3 ) + reqs.push(req = store.clear()); + else + reqs.push(req = store.delete(makeIDBKeyRange(range))); + } + else { + var _a = isAddOrPut ? + outbound ? + [values, keys] : + [values, null] : + [keys, null], args1 = _a[0], args2 = _a[1]; + if (isAddOrPut) { + for (var i = 0; i < length; ++i) { + reqs.push(req = (args2 && args2[i] !== undefined ? + store[type](args1[i], args2[i]) : + store[type](args1[i]))); + req.onerror = errorHandler; + } + } + else { + for (var i = 0; i < length; ++i) { + reqs.push(req = store[type](args1[i])); + req.onerror = errorHandler; + } + } + } + var done = function (event) { + var lastResult = event.target.result; + reqs.forEach(function (req, i) { return req.error != null && (failures[i] = req.error); }); + resolve({ + numFailures: numFailures, + failures: failures, + results: type === "delete" ? keys : reqs.map(function (req) { return req.result; }), + lastResult: lastResult + }); + }; + req.onerror = function (event) { + errorHandler(event); + done(event); + }; + req.onsuccess = done; + }); + } + function openCursor(_a) { + var trans = _a.trans, values = _a.values, query = _a.query, reverse = _a.reverse, unique = _a.unique; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var index = query.index, range = query.range; + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? + store : + store.index(index.name); + var direction = reverse ? + unique ? + "prevunique" : + "prev" : + unique ? + "nextunique" : + "next"; + var req = values || !('openKeyCursor' in source) ? + source.openCursor(makeIDBKeyRange(range), direction) : + source.openKeyCursor(makeIDBKeyRange(range), direction); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(function (ev) { + var cursor = req.result; + if (!cursor) { + resolve(null); + return; + } + cursor.___id = ++_id_counter; + cursor.done = false; + var _cursorContinue = cursor.continue.bind(cursor); + var _cursorContinuePrimaryKey = cursor.continuePrimaryKey; + if (_cursorContinuePrimaryKey) + _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); + var _cursorAdvance = cursor.advance.bind(cursor); + var doThrowCursorIsNotStarted = function () { throw new Error("Cursor not started"); }; + var doThrowCursorIsStopped = function () { throw new Error("Cursor not stopped"); }; + cursor.trans = trans; + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; + cursor.fail = wrap(reject); + cursor.next = function () { + var _this = this; + var gotOne = 1; + return this.start(function () { return gotOne-- ? _this.continue() : _this.stop(); }).then(function () { return _this; }); + }; + cursor.start = function (callback) { + var iterationPromise = new Promise(function (resolveIteration, rejectIteration) { + resolveIteration = wrap(resolveIteration); + req.onerror = eventRejectHandler(rejectIteration); + cursor.fail = rejectIteration; + cursor.stop = function (value) { + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; + resolveIteration(value); + }; + }); + var guardedCallback = function () { + if (req.result) { + try { + callback(); + } + catch (err) { + cursor.fail(err); + } + } + else { + cursor.done = true; + cursor.start = function () { throw new Error("Cursor behind last entry"); }; + cursor.stop(); + } + }; + req.onsuccess = wrap(function (ev) { + req.onsuccess = guardedCallback; + guardedCallback(); + }); + cursor.continue = _cursorContinue; + cursor.continuePrimaryKey = _cursorContinuePrimaryKey; + cursor.advance = _cursorAdvance; + guardedCallback(); + return iterationPromise; + }; + resolve(cursor); + }, reject); + }); + } + function query(hasGetAll) { + return function (request) { + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var trans = request.trans, values = request.values, limit = request.limit, query = request.query; + var nonInfinitLimit = limit === Infinity ? undefined : limit; + var index = query.index, range = query.range; + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? store : store.index(index.name); + var idbKeyRange = makeIDBKeyRange(range); + if (limit === 0) + return resolve({ result: [] }); + if (hasGetAll) { + var req = values ? + source.getAll(idbKeyRange, nonInfinitLimit) : + source.getAllKeys(idbKeyRange, nonInfinitLimit); + req.onsuccess = function (event) { return resolve({ result: event.target.result }); }; + req.onerror = eventRejectHandler(reject); + } + else { + var count_1 = 0; + var req_1 = values || !('openKeyCursor' in source) ? + source.openCursor(idbKeyRange) : + source.openKeyCursor(idbKeyRange); + var result_1 = []; + req_1.onsuccess = function (event) { + var cursor = req_1.result; + if (!cursor) + return resolve({ result: result_1 }); + result_1.push(values ? cursor.value : cursor.primaryKey); + if (++count_1 === limit) + return resolve({ result: result_1 }); + cursor.continue(); + }; + req_1.onerror = eventRejectHandler(reject); + } + }); + }; + } + return { + name: tableName, + schema: tableSchema, + mutate: mutate, + getMany: function (_a) { + var trans = _a.trans, keys = _a.keys; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var length = keys.length; + var result = new Array(length); + var keyCount = 0; + var callbackCount = 0; + var req; + var successHandler = function (event) { + var req = event.target; + if ((result[req._pos] = req.result) != null) + ; + if (++callbackCount === keyCount) + resolve(result); + }; + var errorHandler = eventRejectHandler(reject); + for (var i = 0; i < length; ++i) { + var key = keys[i]; + if (key != null) { + req = store.get(keys[i]); + req._pos = i; + req.onsuccess = successHandler; + req.onerror = errorHandler; + ++keyCount; + } + } + if (keyCount === 0) + resolve(result); + }); + }, + get: function (_a) { + var trans = _a.trans, key = _a.key; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var req = store.get(key); + req.onsuccess = function (event) { return resolve(event.target.result); }; + req.onerror = eventRejectHandler(reject); + }); + }, + query: query(hasGetAll), + openCursor: openCursor, + count: function (_a) { + var query = _a.query, trans = _a.trans; + var index = query.index, range = query.range; + return new Promise(function (resolve, reject) { + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? store : store.index(index.name); + var idbKeyRange = makeIDBKeyRange(range); + var req = idbKeyRange ? source.count(idbKeyRange) : source.count(); + req.onsuccess = wrap(function (ev) { return resolve(ev.target.result); }); + req.onerror = eventRejectHandler(reject); + }); + } + }; + } + var _a = extractSchema(db, tmpTrans), schema = _a.schema, hasGetAll = _a.hasGetAll; + var tables = schema.tables.map(function (tableSchema) { return createDbCoreTable(tableSchema); }); + var tableMap = {}; + tables.forEach(function (table) { return tableMap[table.name] = table; }); + return { + stack: "dbcore", + transaction: db.transaction.bind(db), + table: function (name) { + var result = tableMap[name]; + if (!result) + throw new Error("Table '".concat(name, "' not found")); + return tableMap[name]; + }, + MIN_KEY: -Infinity, + MAX_KEY: getMaxKey(IdbKeyRange), + schema: schema + }; + } + + function createMiddlewareStack(stackImpl, middlewares) { + return middlewares.reduce(function (down, _a) { + var create = _a.create; + return (__assign(__assign({}, down), create(down))); + }, stackImpl); + } + function createMiddlewareStacks(middlewares, idbdb, _a, tmpTrans) { + var IDBKeyRange = _a.IDBKeyRange; _a.indexedDB; + var dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); + return { + dbcore: dbcore + }; + } + function generateMiddlewareStacks(db, tmpTrans) { + var idbdb = tmpTrans.db; + var stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans); + db.core = stacks.dbcore; + db.tables.forEach(function (table) { + var tableName = table.name; + if (db.core.schema.tables.some(function (tbl) { return tbl.name === tableName; })) { + table.core = db.core.table(tableName); + if (db[tableName] instanceof db.Table) { + db[tableName].core = table.core; + } + } + }); + } + + function setApiOnPlace(db, objs, tableNames, dbschema) { + tableNames.forEach(function (tableName) { + var schema = dbschema[tableName]; + objs.forEach(function (obj) { + var propDesc = getPropertyDescriptor(obj, tableName); + if (!propDesc || ("value" in propDesc && propDesc.value === undefined)) { + if (obj === db.Transaction.prototype || obj instanceof db.Transaction) { + setProp(obj, tableName, { + get: function () { return this.table(tableName); }, + set: function (value) { + defineProperty(this, tableName, { value: value, writable: true, configurable: true, enumerable: true }); + } + }); + } + else { + obj[tableName] = new db.Table(tableName, schema); + } + } + }); + }); + } + function removeTablesApi(db, objs) { + objs.forEach(function (obj) { + for (var key in obj) { + if (obj[key] instanceof db.Table) + delete obj[key]; + } + }); + } + function lowerVersionFirst(a, b) { + return a._cfg.version - b._cfg.version; + } + function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) { + var globalSchema = db._dbSchema; + if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) { + globalSchema.$meta = createTableSchema("$meta", parseIndexSyntax("")[0], []); + db._storeNames.push('$meta'); + } + var trans = db._createTransaction('readwrite', db._storeNames, globalSchema); + trans.create(idbUpgradeTrans); + trans._completion.catch(reject); + var rejectTransaction = trans._reject.bind(trans); + var transless = PSD.transless || PSD; + newScope(function () { + PSD.trans = trans; + PSD.transless = transless; + if (oldVersion === 0) { + keys(globalSchema).forEach(function (tableName) { + createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + generateMiddlewareStacks(db, idbUpgradeTrans); + DexiePromise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction); + } + else { + generateMiddlewareStacks(db, idbUpgradeTrans); + return getExistingVersion(db, trans, oldVersion) + .then(function (oldVersion) { return updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans); }) + .catch(rejectTransaction); + } + }); + } + function patchCurrentVersion(db, idbUpgradeTrans) { + createMissingTables(db._dbSchema, idbUpgradeTrans); + if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) { + idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version'); + } + var globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans); + var diff = getSchemaDiff(globalSchema, db._dbSchema); + var _loop_1 = function (tableChange) { + if (tableChange.change.length || tableChange.recreate) { + console.warn("Unable to patch indexes of table ".concat(tableChange.name, " because it has changes on the type of index or primary key.")); + return { value: void 0 }; + } + var store = idbUpgradeTrans.objectStore(tableChange.name); + tableChange.add.forEach(function (idx) { + if (debug) + console.debug("Dexie upgrade patch: Creating missing index ".concat(tableChange.name, ".").concat(idx.src)); + addIndex(store, idx); + }); + }; + for (var _i = 0, _a = diff.change; _i < _a.length; _i++) { + var tableChange = _a[_i]; + var state_1 = _loop_1(tableChange); + if (typeof state_1 === "object") + return state_1.value; + } + } + function getExistingVersion(db, trans, oldVersion) { + if (trans.storeNames.includes('$meta')) { + return trans.table('$meta').get('version').then(function (metaVersion) { + return metaVersion != null ? metaVersion : oldVersion; + }); + } + else { + return DexiePromise.resolve(oldVersion); + } + } + function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) { + var queue = []; + var versions = db._versions; + var globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + var versToRun = versions.filter(function (v) { return v._cfg.version >= oldVersion; }); + if (versToRun.length === 0) { + return DexiePromise.resolve(); + } + versToRun.forEach(function (version) { + queue.push(function () { + var oldSchema = globalSchema; + var newSchema = version._cfg.dbschema; + adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans); + adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans); + globalSchema = db._dbSchema = newSchema; + var diff = getSchemaDiff(oldSchema, newSchema); + diff.add.forEach(function (tuple) { + createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + diff.change.forEach(function (change) { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } + else { + var store_1 = idbUpgradeTrans.objectStore(change.name); + change.add.forEach(function (idx) { return addIndex(store_1, idx); }); + change.change.forEach(function (idx) { + store_1.deleteIndex(idx.name); + addIndex(store_1, idx); + }); + change.del.forEach(function (idxName) { return store_1.deleteIndex(idxName); }); + } + }); + var contentUpgrade = version._cfg.contentUpgrade; + if (contentUpgrade && version._cfg.version > oldVersion) { + generateMiddlewareStacks(db, idbUpgradeTrans); + trans._memoizedTables = {}; + var upgradeSchema_1 = shallowClone(newSchema); + diff.del.forEach(function (table) { + upgradeSchema_1[table] = oldSchema[table]; + }); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema_1), upgradeSchema_1); + trans.schema = upgradeSchema_1; + var contentUpgradeIsAsync_1 = isAsyncFunction(contentUpgrade); + if (contentUpgradeIsAsync_1) { + incrementExpectedAwaits(); + } + var returnValue_1; + var promiseFollowed = DexiePromise.follow(function () { + returnValue_1 = contentUpgrade(trans); + if (returnValue_1) { + if (contentUpgradeIsAsync_1) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue_1.then(decrementor, decrementor); + } + } + }); + return (returnValue_1 && typeof returnValue_1.then === 'function' ? + DexiePromise.resolve(returnValue_1) : promiseFollowed.then(function () { return returnValue_1; })); + } + }); + queue.push(function (idbtrans) { + var newSchema = version._cfg.dbschema; + deleteRemovedTables(newSchema, idbtrans); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema); + trans.schema = db._dbSchema; + }); + queue.push(function (idbtrans) { + if (db.idbdb.objectStoreNames.contains('$meta')) { + if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) { + db.idbdb.deleteObjectStore('$meta'); + delete db._dbSchema.$meta; + db._storeNames = db._storeNames.filter(function (name) { return name !== '$meta'; }); + } + else { + idbtrans.objectStore('$meta').put(version._cfg.version, 'version'); + } + } + }); + }); + function runQueue() { + return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : + DexiePromise.resolve(); + } + return runQueue().then(function () { + createMissingTables(globalSchema, idbUpgradeTrans); + }); + } + function getSchemaDiff(oldSchema, newSchema) { + var diff = { + del: [], + add: [], + change: [] + }; + var table; + for (table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + var oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } + else { + var change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if (( + '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) || + (oldDef.primKey.auto !== newDef.primKey.auto)) { + change.recreate = true; + diff.change.push(change); + } + else { + var oldIndexes = oldDef.idxByName; + var newIndexes = newDef.idxByName; + var idxName = void 0; + for (idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; + } + function createTable(idbtrans, tableName, primKey, indexes) { + var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? + { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : + { autoIncrement: primKey.auto }); + indexes.forEach(function (idx) { return addIndex(store, idx); }); + return store; + } + function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach(function (tableName) { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + if (debug) + console.debug('Dexie: Creating missing table', tableName); + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); + } + function deleteRemovedTables(newSchema, idbtrans) { + [].slice.call(idbtrans.db.objectStoreNames).forEach(function (storeName) { + return newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName); + }); + } + function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); + } + function buildGlobalSchema(db, idbdb, tmpTrans) { + var globalSchema = {}; + var dbStoreNames = slice(idbdb.objectStoreNames, 0); + dbStoreNames.forEach(function (storeName) { + var store = tmpTrans.objectStore(storeName); + var keyPath = store.keyPath; + var primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", true, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); + var indexes = []; + for (var j = 0; j < store.indexNames.length; ++j) { + var idbindex = store.index(store.indexNames[j]); + keyPath = idbindex.keyPath; + var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); + indexes.push(index); + } + globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); + }); + return globalSchema; + } + function readGlobalSchema(db, idbdb, tmpTrans) { + db.verno = idbdb.version / 10; + var globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans); + db._storeNames = slice(idbdb.objectStoreNames, 0); + setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema); + } + function verifyInstalledSchema(db, tmpTrans) { + var installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans); + var diff = getSchemaDiff(installedSchema, db._dbSchema); + return !(diff.add.length || diff.change.some(function (ch) { return ch.add.length || ch.change.length; })); + } + function adjustToExistingIndexNames(db, schema, idbtrans) { + var storeNames = idbtrans.db.objectStoreNames; + for (var i = 0; i < storeNames.length; ++i) { + var storeName = storeNames[i]; + var store = idbtrans.objectStore(storeName); + db._hasGetAll = 'getAll' in store; + for (var j = 0; j < store.indexNames.length; ++j) { + var indexName = store.indexNames[j]; + var keyPath = store.index(indexName).keyPath; + var dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; + if (schema[storeName]) { + var indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) { + indexSpec.name = indexName; + delete schema[storeName].idxByName[dexieName]; + schema[storeName].idxByName[indexName] = indexSpec; + } + } + } + } + if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + db._hasGetAll = false; + } + } + function parseIndexSyntax(primKeyAndIndexes) { + return primKeyAndIndexes.split(',').map(function (index, indexNum) { + index = index.trim(); + var name = index.replace(/([&*]|\+\+)/g, ""); + var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; + return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0); + }); + } + + var Version = (function () { + function Version() { + } + Version.prototype._parseStoresSpec = function (stores, outSchema) { + keys(stores).forEach(function (tableName) { + if (stores[tableName] !== null) { + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + primKey.unique = true; + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + indexes.forEach(function (idx) { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + }); + outSchema[tableName] = createTableSchema(tableName, primKey, indexes); + } + }); + }; + Version.prototype.stores = function (stores) { + var db = this.db; + this._cfg.storesSource = this._cfg.storesSource ? + extend(this._cfg.storesSource, stores) : + stores; + var versions = db._versions; + var storesSpec = {}; + var dbschema = {}; + versions.forEach(function (version) { + extend(storesSpec, version._cfg.storesSource); + dbschema = (version._cfg.dbschema = {}); + version._parseStoresSpec(storesSpec, dbschema); + }); + db._dbSchema = dbschema; + removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]); + setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + db._storeNames = keys(dbschema); + return this; + }; + Version.prototype.upgrade = function (upgradeFunction) { + this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); + return this; + }; + return Version; + }()); + + function createVersionConstructor(db) { + return makeClassConstructor(Version.prototype, function Version(versionNumber) { + this.db = db; + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + }); + } + + function getDbNamesTable(indexedDB, IDBKeyRange) { + var dbNamesDB = indexedDB["_dbNamesDB"]; + if (!dbNamesDB) { + dbNamesDB = indexedDB["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { + addons: [], + indexedDB: indexedDB, + IDBKeyRange: IDBKeyRange, + }); + dbNamesDB.version(1).stores({ dbnames: "name" }); + } + return dbNamesDB.table("dbnames"); + } + function hasDatabasesNative(indexedDB) { + return indexedDB && typeof indexedDB.databases === "function"; + } + function getDatabaseNames(_a) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + return hasDatabasesNative(indexedDB) + ? Promise.resolve(indexedDB.databases()).then(function (infos) { + return infos + .map(function (info) { return info.name; }) + .filter(function (name) { return name !== DBNAMES_DB; }); + }) + : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys(); + } + function _onDatabaseCreated(_a, name) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).put({ name: name }).catch(nop); + } + function _onDatabaseDeleted(_a, name) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop); + } + + function vip(fn) { + return newScope(function () { + PSD.letThrough = true; + return fn(); + }); + } + + function idbReady() { + var isSafari = !navigator.userAgentData && + /Safari\//.test(navigator.userAgent) && + !/Chrom(e|ium)\//.test(navigator.userAgent); + if (!isSafari || !indexedDB.databases) + return Promise.resolve(); + var intervalId; + return new Promise(function (resolve) { + var tryIdb = function () { return indexedDB.databases().finally(resolve); }; + intervalId = setInterval(tryIdb, 100); + tryIdb(); + }).finally(function () { return clearInterval(intervalId); }); + } + + var _a; + function isEmptyRange(node) { + return !("from" in node); + } + var RangeSet = function (fromOrTree, to) { + if (this) { + extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 }); + } + else { + var rv = new RangeSet(); + if (fromOrTree && ("d" in fromOrTree)) { + extend(rv, fromOrTree); + } + return rv; + } + }; + props(RangeSet.prototype, (_a = { + add: function (rangeSet) { + mergeRanges(this, rangeSet); + return this; + }, + addKey: function (key) { + addRange(this, key, key); + return this; + }, + addKeys: function (keys) { + var _this = this; + keys.forEach(function (key) { return addRange(_this, key, key); }); + return this; + } + }, + _a[iteratorSymbol] = function () { + return getRangeSetIterator(this); + }, + _a)); + function addRange(target, from, to) { + var diff = cmp(from, to); + if (isNaN(diff)) + return; + if (diff > 0) + throw RangeError(); + if (isEmptyRange(target)) + return extend(target, { from: from, to: to, d: 1 }); + var left = target.l; + var right = target.r; + if (cmp(to, target.from) < 0) { + left + ? addRange(left, from, to) + : (target.l = { from: from, to: to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.to) > 0) { + right + ? addRange(right, from, to) + : (target.r = { from: from, to: to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.from) < 0) { + target.from = from; + target.l = null; + target.d = right ? right.d + 1 : 1; + } + if (cmp(to, target.to) > 0) { + target.to = to; + target.r = null; + target.d = target.l ? target.l.d + 1 : 1; + } + var rightWasCutOff = !target.r; + if (left && !target.l) { + mergeRanges(target, left); + } + if (right && rightWasCutOff) { + mergeRanges(target, right); + } + } + function mergeRanges(target, newSet) { + function _addRangeSet(target, _a) { + var from = _a.from, to = _a.to, l = _a.l, r = _a.r; + addRange(target, from, to); + if (l) + _addRangeSet(target, l); + if (r) + _addRangeSet(target, r); + } + if (!isEmptyRange(newSet)) + _addRangeSet(target, newSet); + } + function rangesOverlap(rangeSet1, rangeSet2) { + var i1 = getRangeSetIterator(rangeSet2); + var nextResult1 = i1.next(); + if (nextResult1.done) + return false; + var a = nextResult1.value; + var i2 = getRangeSetIterator(rangeSet1); + var nextResult2 = i2.next(a.from); + var b = nextResult2.value; + while (!nextResult1.done && !nextResult2.done) { + if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0) + return true; + cmp(a.from, b.from) < 0 + ? (a = (nextResult1 = i1.next(b.from)).value) + : (b = (nextResult2 = i2.next(a.from)).value); + } + return false; + } + function getRangeSetIterator(node) { + var state = isEmptyRange(node) ? null : { s: 0, n: node }; + return { + next: function (key) { + var keyProvided = arguments.length > 0; + while (state) { + switch (state.s) { + case 0: + state.s = 1; + if (keyProvided) { + while (state.n.l && cmp(key, state.n.from) < 0) + state = { up: state, n: state.n.l, s: 1 }; + } + else { + while (state.n.l) + state = { up: state, n: state.n.l, s: 1 }; + } + case 1: + state.s = 2; + if (!keyProvided || cmp(key, state.n.to) <= 0) + return { value: state.n, done: false }; + case 2: + if (state.n.r) { + state.s = 3; + state = { up: state, n: state.n.r, s: 0 }; + continue; + } + case 3: + state = state.up; + } + } + return { done: true }; + }, + }; + } + function rebalance(target) { + var _a, _b; + var diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0); + var r = diff > 1 ? "r" : diff < -1 ? "l" : ""; + if (r) { + var l = r === "r" ? "l" : "r"; + var rootClone = __assign({}, target); + var oldRootRight = target[r]; + target.from = oldRootRight.from; + target.to = oldRootRight.to; + target[r] = oldRootRight[r]; + rootClone[r] = oldRootRight[l]; + target[l] = rootClone; + rootClone.d = computeDepth(rootClone); + } + target.d = computeDepth(target); + } + function computeDepth(_a) { + var r = _a.r, l = _a.l; + return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1; + } + + function extendObservabilitySet(target, newSet) { + keys(newSet).forEach(function (part) { + if (target[part]) + mergeRanges(target[part], newSet[part]); + else + target[part] = cloneSimpleObjectTree(newSet[part]); + }); + return target; + } + + function obsSetsOverlap(os1, os2) { + return os1.all || os2.all || Object.keys(os1).some(function (key) { return os2[key] && rangesOverlap(os2[key], os1[key]); }); + } + + var cache = {}; + + var unsignaledParts = {}; + var isTaskEnqueued = false; + function signalSubscribersLazily(part, optimistic) { + extendObservabilitySet(unsignaledParts, part); + if (!isTaskEnqueued) { + isTaskEnqueued = true; + setTimeout(function () { + isTaskEnqueued = false; + var parts = unsignaledParts; + unsignaledParts = {}; + signalSubscribersNow(parts, false); + }, 0); + } + } + function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries) { + if (deleteAffectedCacheEntries === void 0) { deleteAffectedCacheEntries = false; } + var queriesToSignal = new Set(); + if (updatedParts.all) { + for (var _i = 0, _a = Object.values(cache); _i < _a.length; _i++) { + var tblCache = _a[_i]; + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + else { + for (var key in updatedParts) { + var parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key); + if (parts) { + var dbName = parts[1], tableName = parts[2]; + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (tblCache) + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + } + queriesToSignal.forEach(function (requery) { return requery(); }); + } + function collectTableSubscribers(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) { + var updatedEntryLists = []; + for (var _i = 0, _a = Object.entries(tblCache.queries.query); _i < _a.length; _i++) { + var _b = _a[_i], indexName = _b[0], entries = _b[1]; + var filteredEntries = []; + for (var _c = 0, entries_1 = entries; _c < entries_1.length; _c++) { + var entry = entries_1[_c]; + if (obsSetsOverlap(updatedParts, entry.obsSet)) { + entry.subscribers.forEach(function (requery) { return outQueriesToSignal.add(requery); }); + } + else if (deleteAffectedCacheEntries) { + filteredEntries.push(entry); + } + } + if (deleteAffectedCacheEntries) + updatedEntryLists.push([indexName, filteredEntries]); + } + if (deleteAffectedCacheEntries) { + for (var _d = 0, updatedEntryLists_1 = updatedEntryLists; _d < updatedEntryLists_1.length; _d++) { + var _e = updatedEntryLists_1[_d], indexName = _e[0], filteredEntries = _e[1]; + tblCache.queries.query[indexName] = filteredEntries; + } + } + } + + function dexieOpen(db) { + var state = db._state; + var indexedDB = db._deps.indexedDB; + if (state.isBeingOpened || db.idbdb) + return state.dbReadyPromise.then(function () { return state.dbOpenError ? + rejection(state.dbOpenError) : + db; }); + state.isBeingOpened = true; + state.dbOpenError = null; + state.openComplete = false; + var openCanceller = state.openCanceller; + var nativeVerToOpen = Math.round(db.verno * 10); + var schemaPatchMode = false; + function throwIfCancelled() { + if (state.openCanceller !== openCanceller) + throw new exceptions.DatabaseClosed('db.open() was cancelled'); + } + var resolveDbReady = state.dbReadyResolve, + upgradeTransaction = null, wasCreated = false; + var tryOpenDB = function () { return new DexiePromise(function (resolve, reject) { + throwIfCancelled(); + if (!indexedDB) + throw new exceptions.MissingAPI(); + var dbName = db.name; + var req = state.autoSchema || !nativeVerToOpen ? + indexedDB.open(dbName) : + indexedDB.open(dbName, nativeVerToOpen); + if (!req) + throw new exceptions.MissingAPI(); + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(db._fireOnBlocked); + req.onupgradeneeded = wrap(function (e) { + upgradeTransaction = req.transaction; + if (state.autoSchema && !db._options.allowEmptyDB) { + req.onerror = preventDefault; + upgradeTransaction.abort(); + req.result.close(); + var delreq = indexedDB.deleteDatabase(dbName); + delreq.onsuccess = delreq.onerror = wrap(function () { + reject(new exceptions.NoSuchDatabase("Database ".concat(dbName, " doesnt exist"))); + }); + } + else { + upgradeTransaction.onerror = eventRejectHandler(reject); + var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; + wasCreated = oldVer < 1; + db.idbdb = req.result; + if (schemaPatchMode) { + patchCurrentVersion(db, upgradeTransaction); + } + runUpgraders(db, oldVer / 10, upgradeTransaction, reject); + } + }, reject); + req.onsuccess = wrap(function () { + upgradeTransaction = null; + var idbdb = db.idbdb = req.result; + var objectStoreNames = slice(idbdb.objectStoreNames); + if (objectStoreNames.length > 0) + try { + var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly'); + if (state.autoSchema) + readGlobalSchema(db, idbdb, tmpTrans); + else { + adjustToExistingIndexNames(db, db._dbSchema, tmpTrans); + if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) { + console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this."); + idbdb.close(); + nativeVerToOpen = idbdb.version + 1; + schemaPatchMode = true; + return resolve(tryOpenDB()); + } + } + generateMiddlewareStacks(db, tmpTrans); + } + catch (e) { + } + connections.push(db); + idbdb.onversionchange = wrap(function (ev) { + state.vcFired = true; + db.on("versionchange").fire(ev); + }); + idbdb.onclose = wrap(function (ev) { + db.on("close").fire(ev); + }); + if (wasCreated) + _onDatabaseCreated(db._deps, dbName); + resolve(); + }, reject); + }).catch(function (err) { + switch (err === null || err === void 0 ? void 0 : err.name) { + case "UnknownError": + if (state.PR1398_maxLoop > 0) { + state.PR1398_maxLoop--; + console.warn('Dexie: Workaround for Chrome UnknownError on open()'); + return tryOpenDB(); + } + break; + case "VersionError": + if (nativeVerToOpen > 0) { + nativeVerToOpen = 0; + return tryOpenDB(); + } + break; + } + return DexiePromise.reject(err); + }); }; + return DexiePromise.race([ + openCanceller, + (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(tryOpenDB) + ]).then(function () { + throwIfCancelled(); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(function () { return db.on.ready.fire(db.vip); })).then(function fireRemainders() { + if (state.onReadyBeingFired.length > 0) { + var remainders_1 = state.onReadyBeingFired.reduce(promisableChain, nop); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(function () { return remainders_1(db.vip); })).then(fireRemainders); + } + }); + }).finally(function () { + if (state.openCanceller === openCanceller) { + state.onReadyBeingFired = null; + state.isBeingOpened = false; + } + }).catch(function (err) { + state.dbOpenError = err; + try { + upgradeTransaction && upgradeTransaction.abort(); + } + catch (_a) { } + if (openCanceller === state.openCanceller) { + db._close(); + } + return rejection(err); + }).finally(function () { + state.openComplete = true; + resolveDbReady(); + }).then(function () { + if (wasCreated) { + var everything_1 = {}; + db.tables.forEach(function (table) { + table.schema.indexes.forEach(function (idx) { + if (idx.name) + everything_1["idb://".concat(db.name, "/").concat(table.name, "/").concat(idx.name)] = new RangeSet(-Infinity, [[[]]]); + }); + everything_1["idb://".concat(db.name, "/").concat(table.name, "/")] = everything_1["idb://".concat(db.name, "/").concat(table.name, "/:dels")] = new RangeSet(-Infinity, [[[]]]); + }); + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything_1); + signalSubscribersNow(everything_1, true); + } + return db; + }); + } + + function awaitIterator(iterator) { + var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return function (val) { + var next = getNext(val), value = next.value; + return next.done ? value : + (!value || typeof value.then !== 'function' ? + isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : + value.then(onSuccess, onError)); + }; + } + return step(callNext)(); + } + + function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + var i = arguments.length; + if (i < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + var args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + scopeFunc = args.pop(); + var tables = flatten(args); + return [mode, tables, scopeFunc]; + } + function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) { + return DexiePromise.resolve().then(function () { + var transless = PSD.transless || PSD; + var trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction); + trans.explicit = true; + var zoneProps = { + trans: trans, + transless: transless + }; + if (parentTransaction) { + trans.idbtrans = parentTransaction.idbtrans; + } + else { + try { + trans.create(); + trans.idbtrans._explicit = true; + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(function () { return enterTransactionScope(db, mode, storeNames, null, scopeFunc); }); + } + return rejection(ex); + } + } + var scopeFuncIsAsync = isAsyncFunction(scopeFunc); + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + var returnValue; + var promiseFollowed = DexiePromise.follow(function () { + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (scopeFuncIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue).then(function (x) { return trans.active ? + x + : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); }) + : promiseFollowed.then(function () { return returnValue; })).then(function (x) { + if (parentTransaction) + trans._resolve(); + return trans._completion.then(function () { return x; }); + }).catch(function (e) { + trans._reject(e); + return rejection(e); + }); + }); + } + + function pad(a, value, count) { + var result = isArray(a) ? a.slice() : [a]; + for (var i = 0; i < count; ++i) + result.push(value); + return result; + } + function createVirtualIndexMiddleware(down) { + return __assign(__assign({}, down), { table: function (tableName) { + var table = down.table(tableName); + var schema = table.schema; + var indexLookup = {}; + var allVirtualIndexes = []; + function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { + var keyPathAlias = getKeyPathAlias(keyPath); + var indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []); + var keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length; + var isVirtual = keyTail > 0; + var virtualIndex = __assign(__assign({}, lowLevelIndex), { name: isVirtual + ? "".concat(keyPathAlias, "(virtual-from:").concat(lowLevelIndex.name, ")") + : lowLevelIndex.name, lowLevelIndex: lowLevelIndex, isVirtual: isVirtual, keyTail: keyTail, keyLength: keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique }); + indexList.push(virtualIndex); + if (!virtualIndex.isPrimaryKey) { + allVirtualIndexes.push(virtualIndex); + } + if (keyLength > 1) { + var virtualKeyPath = keyLength === 2 ? + keyPath[0] : + keyPath.slice(0, keyLength - 1); + addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); + } + indexList.sort(function (a, b) { return a.keyTail - b.keyTail; }); + return virtualIndex; + } + var primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); + indexLookup[":id"] = [primaryKey]; + for (var _i = 0, _a = schema.indexes; _i < _a.length; _i++) { + var index = _a[_i]; + addVirtualIndexes(index.keyPath, 0, index); + } + function findBestIndex(keyPath) { + var result = indexLookup[getKeyPathAlias(keyPath)]; + return result && result[0]; + } + function translateRange(range, keyTail) { + return { + type: range.type === 1 ? + 2 : + range.type, + lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), + lowerOpen: true, + upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), + upperOpen: true + }; + } + function translateRequest(req) { + var index = req.query.index; + return index.isVirtual ? __assign(__assign({}, req), { query: { + index: index.lowLevelIndex, + range: translateRange(req.query.range, index.keyTail) + } }) : req; + } + var result = __assign(__assign({}, table), { schema: __assign(__assign({}, schema), { primaryKey: primaryKey, indexes: allVirtualIndexes, getIndexByKeyPath: findBestIndex }), count: function (req) { + return table.count(translateRequest(req)); + }, query: function (req) { + return table.query(translateRequest(req)); + }, openCursor: function (req) { + var _a = req.query.index, keyTail = _a.keyTail, isVirtual = _a.isVirtual, keyLength = _a.keyLength; + if (!isVirtual) + return table.openCursor(req); + function createVirtualCursor(cursor) { + function _continue(key) { + key != null ? + cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : + req.unique ? + cursor.continue(cursor.key.slice(0, keyLength) + .concat(req.reverse + ? down.MIN_KEY + : down.MAX_KEY, keyTail)) : + cursor.continue(); + } + var virtualCursor = Object.create(cursor, { + continue: { value: _continue }, + continuePrimaryKey: { + value: function (key, primaryKey) { + cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey); + } + }, + primaryKey: { + get: function () { + return cursor.primaryKey; + } + }, + key: { + get: function () { + var key = cursor.key; + return keyLength === 1 ? + key[0] : + key.slice(0, keyLength); + } + }, + value: { + get: function () { + return cursor.value; + } + } + }); + return virtualCursor; + } + return table.openCursor(translateRequest(req)) + .then(function (cursor) { return cursor && createVirtualCursor(cursor); }); + } }); + return result; + } }); + } + var virtualIndexMiddleware = { + stack: "dbcore", + name: "VirtualIndexMiddleware", + level: 1, + create: createVirtualIndexMiddleware + }; + + function getObjectDiff(a, b, rv, prfx) { + rv = rv || {}; + prfx = prfx || ''; + keys(a).forEach(function (prop) { + if (!hasOwn(b, prop)) { + rv[prfx + prop] = undefined; + } + else { + var ap = a[prop], bp = b[prop]; + if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) { + var apTypeName = toStringTag(ap); + var bpTypeName = toStringTag(bp); + if (apTypeName !== bpTypeName) { + rv[prfx + prop] = b[prop]; + } + else if (apTypeName === 'Object') { + getObjectDiff(ap, bp, rv, prfx + prop + '.'); + } + else if (ap !== bp) { + rv[prfx + prop] = b[prop]; + } + } + else if (ap !== bp) + rv[prfx + prop] = b[prop]; + } + }); + keys(b).forEach(function (prop) { + if (!hasOwn(a, prop)) { + rv[prfx + prop] = b[prop]; + } + }); + return rv; + } + + function getEffectiveKeys(primaryKey, req) { + if (req.type === 'delete') + return req.keys; + return req.keys || req.values.map(primaryKey.extractKey); + } + + var hooksMiddleware = { + stack: "dbcore", + name: "HooksMiddleware", + level: 2, + create: function (downCore) { return (__assign(__assign({}, downCore), { table: function (tableName) { + var downTable = downCore.table(tableName); + var primaryKey = downTable.schema.primaryKey; + var tableMiddleware = __assign(__assign({}, downTable), { mutate: function (req) { + var dxTrans = PSD.trans; + var _a = dxTrans.table(tableName).hook, deleting = _a.deleting, creating = _a.creating, updating = _a.updating; + switch (req.type) { + case 'add': + if (creating.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'put': + if (creating.fire === nop && updating.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'delete': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'deleteRange': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return deleteRange(req); }, true); + } + return downTable.mutate(req); + function addPutOrDelete(req) { + var dxTrans = PSD.trans; + var keys = req.keys || getEffectiveKeys(primaryKey, req); + if (!keys) + throw new Error("Keys missing"); + req = req.type === 'add' || req.type === 'put' ? __assign(__assign({}, req), { keys: keys }) : __assign({}, req); + if (req.type !== 'delete') + req.values = __spreadArray([], req.values, true); + if (req.keys) + req.keys = __spreadArray([], req.keys, true); + return getExistingValues(downTable, req, keys).then(function (existingValues) { + var contexts = keys.map(function (key, i) { + var existingValue = existingValues[i]; + var ctx = { onerror: null, onsuccess: null }; + if (req.type === 'delete') { + deleting.fire.call(ctx, key, existingValue, dxTrans); + } + else if (req.type === 'add' || existingValue === undefined) { + var generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans); + if (key == null && generatedPrimaryKey != null) { + key = generatedPrimaryKey; + req.keys[i] = key; + if (!primaryKey.outbound) { + setByKeyPath(req.values[i], primaryKey.keyPath, key); + } + } + } + else { + var objectDiff = getObjectDiff(existingValue, req.values[i]); + var additionalChanges_1 = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans); + if (additionalChanges_1) { + var requestedValue_1 = req.values[i]; + Object.keys(additionalChanges_1).forEach(function (keyPath) { + if (hasOwn(requestedValue_1, keyPath)) { + requestedValue_1[keyPath] = additionalChanges_1[keyPath]; + } + else { + setByKeyPath(requestedValue_1, keyPath, additionalChanges_1[keyPath]); + } + }); + } + } + return ctx; + }); + return downTable.mutate(req).then(function (_a) { + var failures = _a.failures, results = _a.results, numFailures = _a.numFailures, lastResult = _a.lastResult; + for (var i = 0; i < keys.length; ++i) { + var primKey = results ? results[i] : keys[i]; + var ctx = contexts[i]; + if (primKey == null) { + ctx.onerror && ctx.onerror(failures[i]); + } + else { + ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ? + req.values[i] : + primKey + ); + } + } + return { failures: failures, results: results, numFailures: numFailures, lastResult: lastResult }; + }).catch(function (error) { + contexts.forEach(function (ctx) { return ctx.onerror && ctx.onerror(error); }); + return Promise.reject(error); + }); + }); + } + function deleteRange(req) { + return deleteNextChunk(req.trans, req.range, 10000); + } + function deleteNextChunk(trans, range, limit) { + return downTable.query({ trans: trans, values: false, query: { index: primaryKey, range: range }, limit: limit }) + .then(function (_a) { + var result = _a.result; + return addPutOrDelete({ type: 'delete', keys: result, trans: trans }).then(function (res) { + if (res.numFailures > 0) + return Promise.reject(res.failures[0]); + if (result.length < limit) { + return { failures: [], numFailures: 0, lastResult: undefined }; + } + else { + return deleteNextChunk(trans, __assign(__assign({}, range), { lower: result[result.length - 1], lowerOpen: true }), limit); + } + }); + }); + } + } }); + return tableMiddleware; + } })); } + }; + function getExistingValues(table, req, effectiveKeys) { + return req.type === "add" + ? Promise.resolve([]) + : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: "immutable" }); + } + + function getFromTransactionCache(keys, cache, clone) { + try { + if (!cache) + return null; + if (cache.keys.length < keys.length) + return null; + var result = []; + for (var i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) { + if (cmp(cache.keys[i], keys[j]) !== 0) + continue; + result.push(clone ? deepClone(cache.values[i]) : cache.values[i]); + ++j; + } + return result.length === keys.length ? result : null; + } + catch (_a) { + return null; + } + } + var cacheExistingValuesMiddleware = { + stack: "dbcore", + level: -1, + create: function (core) { + return { + table: function (tableName) { + var table = core.table(tableName); + return __assign(__assign({}, table), { getMany: function (req) { + if (!req.cache) { + return table.getMany(req); + } + var cachedResult = getFromTransactionCache(req.keys, req.trans["_cache"], req.cache === "clone"); + if (cachedResult) { + return DexiePromise.resolve(cachedResult); + } + return table.getMany(req).then(function (res) { + req.trans["_cache"] = { + keys: req.keys, + values: req.cache === "clone" ? deepClone(res) : res, + }; + return res; + }); + }, mutate: function (req) { + if (req.type !== "add") + req.trans["_cache"] = null; + return table.mutate(req); + } }); + }, + }; + }, + }; + + function isCachableContext(ctx, table) { + return (ctx.trans.mode === 'readonly' && + !!ctx.subscr && + !ctx.trans.explicit && + ctx.trans.db._options.cache !== 'disabled' && + !table.schema.primaryKey.outbound); + } + + function isCachableRequest(type, req) { + switch (type) { + case 'query': + return req.values && !req.unique; + case 'get': + return false; + case 'getMany': + return false; + case 'count': + return false; + case 'openCursor': + return false; + } + } + + var observabilityMiddleware = { + stack: "dbcore", + level: 0, + name: "Observability", + create: function (core) { + var dbName = core.schema.name; + var FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY); + return __assign(__assign({}, core), { transaction: function (stores, mode, options) { + if (PSD.subscr && mode !== 'readonly') { + throw new exceptions.ReadOnly("Readwrite transaction in liveQuery context. Querier source: ".concat(PSD.querier)); + } + return core.transaction(stores, mode, options); + }, table: function (tableName) { + var table = core.table(tableName); + var schema = table.schema; + var primaryKey = schema.primaryKey, indexes = schema.indexes; + var extractKey = primaryKey.extractKey, outbound = primaryKey.outbound; + var indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(function (index) { return index.compound && index.keyPath.includes(primaryKey.keyPath); }); + var tableClone = __assign(__assign({}, table), { mutate: function (req) { + var trans = req.trans; + var mutatedParts = req.mutatedParts || (req.mutatedParts = {}); + var getRangeSet = function (indexName) { + var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); + return (mutatedParts[part] || + (mutatedParts[part] = new RangeSet())); + }; + var pkRangeSet = getRangeSet(""); + var delsRangeSet = getRangeSet(":dels"); + var type = req.type; + var _a = req.type === "deleteRange" + ? [req.range] + : req.type === "delete" + ? [req.keys] + : req.values.length < 50 + ? [getEffectiveKeys(primaryKey, req).filter(function (id) { return id; }), req.values] + : [], keys = _a[0], newObjs = _a[1]; + var oldCache = req.trans["_cache"]; + if (isArray(keys)) { + pkRangeSet.addKeys(keys); + var oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null; + if (!oldObjs) { + delsRangeSet.addKeys(keys); + } + if (oldObjs || newObjs) { + trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs); + } + } + else if (keys) { + var range = { from: keys.lower, to: keys.upper }; + delsRangeSet.add(range); + pkRangeSet.add(range); + } + else { + pkRangeSet.add(FULL_RANGE); + delsRangeSet.add(FULL_RANGE); + schema.indexes.forEach(function (idx) { return getRangeSet(idx.name).add(FULL_RANGE); }); + } + return table.mutate(req).then(function (res) { + if (keys && (req.type === 'add' || req.type === 'put')) { + pkRangeSet.addKeys(res.results); + if (indexesWithAutoIncPK) { + indexesWithAutoIncPK.forEach(function (idx) { + var idxVals = req.values.map(function (v) { return idx.extractKey(v); }); + var pkPos = idx.keyPath.findIndex(function (prop) { return prop === primaryKey.keyPath; }); + res.results.forEach(function (pk) { return idxVals[pkPos] = pk; }); + getRangeSet(idx.name).addKeys(idxVals); + }); + } + } + trans.mutatedParts = extendObservabilitySet(trans.mutatedParts || {}, mutatedParts); + return res; + }); + } }); + var getRange = function (_a) { + var _b, _c; + var _d = _a.query, index = _d.index, range = _d.range; + return [ + index, + new RangeSet((_b = range.lower) !== null && _b !== void 0 ? _b : core.MIN_KEY, (_c = range.upper) !== null && _c !== void 0 ? _c : core.MAX_KEY), + ]; + }; + var readSubscribers = { + get: function (req) { return [primaryKey, new RangeSet(req.key)]; }, + getMany: function (req) { return [primaryKey, new RangeSet().addKeys(req.keys)]; }, + count: getRange, + query: getRange, + openCursor: getRange, + }; + keys(readSubscribers).forEach(function (method) { + tableClone[method] = function (req) { + var subscr = PSD.subscr; + var isLiveQuery = !!subscr; + var cachable = isCachableContext(PSD, table) && isCachableRequest(method, req); + var obsSet = cachable + ? req.obsSet = {} + : subscr; + if (isLiveQuery) { + var getRangeSet = function (indexName) { + var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); + return (obsSet[part] || + (obsSet[part] = new RangeSet())); + }; + var pkRangeSet_1 = getRangeSet(""); + var delsRangeSet_1 = getRangeSet(":dels"); + var _a = readSubscribers[method](req), queriedIndex = _a[0], queriedRanges = _a[1]; + if (method === 'query' && queriedIndex.isPrimaryKey && !req.values) { + delsRangeSet_1.add(queriedRanges); + } + else { + getRangeSet(queriedIndex.name || "").add(queriedRanges); + } + if (!queriedIndex.isPrimaryKey) { + if (method === "count") { + delsRangeSet_1.add(FULL_RANGE); + } + else { + var keysPromise_1 = method === "query" && + outbound && + req.values && + table.query(__assign(__assign({}, req), { values: false })); + return table[method].apply(this, arguments).then(function (res) { + if (method === "query") { + if (outbound && req.values) { + return keysPromise_1.then(function (_a) { + var resultingKeys = _a.result; + pkRangeSet_1.addKeys(resultingKeys); + return res; + }); + } + var pKeys = req.values + ? res.result.map(extractKey) + : res.result; + if (req.values) { + pkRangeSet_1.addKeys(pKeys); + } + else { + delsRangeSet_1.addKeys(pKeys); + } + } + else if (method === "openCursor") { + var cursor_1 = res; + var wantValues_1 = req.values; + return (cursor_1 && + Object.create(cursor_1, { + key: { + get: function () { + delsRangeSet_1.addKey(cursor_1.primaryKey); + return cursor_1.key; + }, + }, + primaryKey: { + get: function () { + var pkey = cursor_1.primaryKey; + delsRangeSet_1.addKey(pkey); + return pkey; + }, + }, + value: { + get: function () { + wantValues_1 && pkRangeSet_1.addKey(cursor_1.primaryKey); + return cursor_1.value; + }, + }, + })); + } + return res; + }); + } + } + } + return table[method].apply(this, arguments); + }; + }); + return tableClone; + } }); + }, + }; + function trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) { + function addAffectedIndex(ix) { + var rangeSet = getRangeSet(ix.name || ""); + function extractKey(obj) { + return obj != null ? ix.extractKey(obj) : null; + } + var addKeyOrKeys = function (key) { return ix.multiEntry && isArray(key) + ? key.forEach(function (key) { return rangeSet.addKey(key); }) + : rangeSet.addKey(key); }; + (oldObjs || newObjs).forEach(function (_, i) { + var oldKey = oldObjs && extractKey(oldObjs[i]); + var newKey = newObjs && extractKey(newObjs[i]); + if (cmp(oldKey, newKey) !== 0) { + if (oldKey != null) + addKeyOrKeys(oldKey); + if (newKey != null) + addKeyOrKeys(newKey); + } + }); + } + schema.indexes.forEach(addAffectedIndex); + } + + function adjustOptimisticFromFailures(tblCache, req, res) { + if (res.numFailures === 0) + return req; + if (req.type === 'deleteRange') { + return null; + } + var numBulkOps = req.keys + ? req.keys.length + : 'values' in req && req.values + ? req.values.length + : 1; + if (res.numFailures === numBulkOps) { + return null; + } + var clone = __assign({}, req); + if (isArray(clone.keys)) { + clone.keys = clone.keys.filter(function (_, i) { return !(i in res.failures); }); + } + if ('values' in clone && isArray(clone.values)) { + clone.values = clone.values.filter(function (_, i) { return !(i in res.failures); }); + } + return clone; + } + + function isAboveLower(key, range) { + return range.lower === undefined + ? true + : range.lowerOpen + ? cmp(key, range.lower) > 0 + : cmp(key, range.lower) >= 0; + } + function isBelowUpper(key, range) { + return range.upper === undefined + ? true + : range.upperOpen + ? cmp(key, range.upper) < 0 + : cmp(key, range.upper) <= 0; + } + function isWithinRange(key, range) { + return isAboveLower(key, range) && isBelowUpper(key, range); + } + + function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) { + if (!ops || ops.length === 0) + return result; + var index = req.query.index; + var multiEntry = index.multiEntry; + var queryRange = req.query.range; + var primaryKey = table.schema.primaryKey; + var extractPrimKey = primaryKey.extractKey; + var extractIndex = index.extractKey; + var extractLowLevelIndex = (index.lowLevelIndex || index).extractKey; + var finalResult = ops.reduce(function (result, op) { + var modifedResult = result; + var includedValues = op.type === 'add' || op.type === 'put' + ? op.values.filter(function (v) { + var key = extractIndex(v); + return multiEntry && isArray(key) + ? key.some(function (k) { return isWithinRange(k, queryRange); }) + : isWithinRange(key, queryRange); + }).map(function (v) { + v = deepClone(v); + if (immutable) + Object.freeze(v); + return v; + }) + : []; + switch (op.type) { + case 'add': + modifedResult = result.concat(req.values + ? includedValues + : includedValues.map(function (v) { return extractPrimKey(v); })); + break; + case 'put': + var keySet_1 = new RangeSet().addKeys(op.values.map(function (v) { return extractPrimKey(v); })); + modifedResult = result + .filter(function (item) { + var key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keySet_1); + }) + .concat(req.values + ? includedValues + : includedValues.map(function (v) { return extractPrimKey(v); })); + break; + case 'delete': + var keysToDelete_1 = new RangeSet().addKeys(op.keys); + modifedResult = result.filter(function (item) { + var key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keysToDelete_1); + }); + break; + case 'deleteRange': + var range_1 = op.range; + modifedResult = result.filter(function (item) { return !isWithinRange(extractPrimKey(item), range_1); }); + break; + } + return modifedResult; + }, result); + if (finalResult === result) + return result; + finalResult.sort(function (a, b) { + return cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) || + cmp(extractPrimKey(a), extractPrimKey(b)); + }); + if (req.limit && req.limit < Infinity) { + if (finalResult.length > req.limit) { + finalResult.length = req.limit; + } + else if (result.length === req.limit && finalResult.length < req.limit) { + cacheEntry.dirty = true; + } + } + return immutable ? Object.freeze(finalResult) : finalResult; + } + + function areRangesEqual(r1, r2) { + return (cmp(r1.lower, r2.lower) === 0 && + cmp(r1.upper, r2.upper) === 0 && + !!r1.lowerOpen === !!r2.lowerOpen && + !!r1.upperOpen === !!r2.upperOpen); + } + + function compareLowers(lower1, lower2, lowerOpen1, lowerOpen2) { + if (lower1 === undefined) + return lower2 !== undefined ? -1 : 0; + if (lower2 === undefined) + return 1; + var c = cmp(lower1, lower2); + if (c === 0) { + if (lowerOpen1 && lowerOpen2) + return 0; + if (lowerOpen1) + return 1; + if (lowerOpen2) + return -1; + } + return c; + } + function compareUppers(upper1, upper2, upperOpen1, upperOpen2) { + if (upper1 === undefined) + return upper2 !== undefined ? 1 : 0; + if (upper2 === undefined) + return -1; + var c = cmp(upper1, upper2); + if (c === 0) { + if (upperOpen1 && upperOpen2) + return 0; + if (upperOpen1) + return -1; + if (upperOpen2) + return 1; + } + return c; + } + function isSuperRange(r1, r2) { + return (compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 && + compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0); + } + + function findCompatibleQuery(dbName, tableName, type, req) { + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (!tblCache) + return []; + var queries = tblCache.queries[type]; + if (!queries) + return [null, false, tblCache, null]; + var indexName = req.query ? req.query.index.name : null; + var entries = queries[indexName || '']; + if (!entries) + return [null, false, tblCache, null]; + switch (type) { + case 'query': + var equalEntry = entries.find(function (entry) { + return entry.req.limit === req.limit && + entry.req.values === req.values && + areRangesEqual(entry.req.query.range, req.query.range); + }); + if (equalEntry) + return [ + equalEntry, + true, + tblCache, + entries, + ]; + var superEntry = entries.find(function (entry) { + var limit = 'limit' in entry.req ? entry.req.limit : Infinity; + return (limit >= req.limit && + (req.values ? entry.req.values : true) && + isSuperRange(entry.req.query.range, req.query.range)); + }); + return [superEntry, false, tblCache, entries]; + case 'count': + var countQuery = entries.find(function (entry) { + return areRangesEqual(entry.req.query.range, req.query.range); + }); + return [countQuery, !!countQuery, tblCache, entries]; + } + } + + function subscribeToCacheEntry(cacheEntry, container, requery, signal) { + cacheEntry.subscribers.add(requery); + signal.addEventListener("abort", function () { + cacheEntry.subscribers.delete(requery); + if (cacheEntry.subscribers.size === 0) { + enqueForDeletion(cacheEntry, container); + } + }); + } + function enqueForDeletion(cacheEntry, container) { + setTimeout(function () { + if (cacheEntry.subscribers.size === 0) { + delArrayItem(container, cacheEntry); + } + }, 3000); + } + + var cacheMiddleware = { + stack: 'dbcore', + level: 0, + name: 'Cache', + create: function (core) { + var dbName = core.schema.name; + var coreMW = __assign(__assign({}, core), { transaction: function (stores, mode, options) { + var idbtrans = core.transaction(stores, mode, options); + if (mode === 'readwrite') { + var ac_1 = new AbortController(); + var signal = ac_1.signal; + var endTransaction = function (wasCommitted) { return function () { + ac_1.abort(); + if (mode === 'readwrite') { + var affectedSubscribers_1 = new Set(); + for (var _i = 0, stores_1 = stores; _i < stores_1.length; _i++) { + var storeName = stores_1[_i]; + var tblCache = cache["idb://".concat(dbName, "/").concat(storeName)]; + if (tblCache) { + var table = core.table(storeName); + var ops = tblCache.optimisticOps.filter(function (op) { return op.trans === idbtrans; }); + if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) { + for (var _a = 0, _b = Object.values(tblCache.queries.query); _a < _b.length; _a++) { + var entries = _b[_a]; + for (var _c = 0, _d = entries.slice(); _c < _d.length; _c++) { + var entry = _d[_c]; + if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) { + delArrayItem(entries, entry); + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + } + } + } + else if (ops.length > 0) { + tblCache.optimisticOps = tblCache.optimisticOps.filter(function (op) { return op.trans !== idbtrans; }); + for (var _e = 0, _f = Object.values(tblCache.queries.query); _e < _f.length; _e++) { + var entries = _f[_e]; + for (var _g = 0, _h = entries.slice(); _g < _h.length; _g++) { + var entry = _h[_g]; + if (entry.res != null && + idbtrans.mutatedParts + ) { + if (wasCommitted && !entry.dirty) { + var freezeResults = Object.isFrozen(entry.res); + var modRes = applyOptimisticOps(entry.res, entry.req, ops, table, entry, freezeResults); + if (entry.dirty) { + delArrayItem(entries, entry); + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + else if (modRes !== entry.res) { + entry.res = modRes; + entry.promise = DexiePromise.resolve({ result: modRes }); + } + } + else { + if (entry.dirty) { + delArrayItem(entries, entry); + } + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + } + } + } + } + } + } + affectedSubscribers_1.forEach(function (requery) { return requery(); }); + } + }; }; + idbtrans.addEventListener('abort', endTransaction(false), { + signal: signal, + }); + idbtrans.addEventListener('error', endTransaction(false), { + signal: signal, + }); + idbtrans.addEventListener('complete', endTransaction(true), { + signal: signal, + }); + } + return idbtrans; + }, table: function (tableName) { + var downTable = core.table(tableName); + var primKey = downTable.schema.primaryKey; + var tableMW = __assign(__assign({}, downTable), { mutate: function (req) { + var trans = PSD.trans; + if (primKey.outbound || + trans.db._options.cache === 'disabled' || + trans.explicit + ) { + return downTable.mutate(req); + } + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (!tblCache) + return downTable.mutate(req); + var promise = downTable.mutate(req); + if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(function (key) { return key == null; }))) { + promise.then(function (res) { + var reqWithResolvedKeys = __assign(__assign({}, req), { values: req.values.map(function (value, i) { + var _a; + var valueWithKey = ((_a = primKey.keyPath) === null || _a === void 0 ? void 0 : _a.includes('.')) + ? deepClone(value) + : __assign({}, value); + setByKeyPath(valueWithKey, primKey.keyPath, res.results[i]); + return valueWithKey; + }) }); + var adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res); + tblCache.optimisticOps.push(adjustedReq); + queueMicrotask(function () { return req.mutatedParts && signalSubscribersLazily(req.mutatedParts); }); + }); + } + else { + tblCache.optimisticOps.push(req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + promise.then(function (res) { + if (res.numFailures > 0) { + delArrayItem(tblCache.optimisticOps, req); + var adjustedReq = adjustOptimisticFromFailures(tblCache, req, res); + if (adjustedReq) { + tblCache.optimisticOps.push(adjustedReq); + } + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + } + }); + promise.catch(function () { + delArrayItem(tblCache.optimisticOps, req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + }); + } + return promise; + }, query: function (req) { + var _a; + if (!isCachableContext(PSD, downTable) || !isCachableRequest("query", req)) + return downTable.query(req); + var freezeResults = ((_a = PSD.trans) === null || _a === void 0 ? void 0 : _a.db._options.cache) === 'immutable'; + var _b = PSD, requery = _b.requery, signal = _b.signal; + var _c = findCompatibleQuery(dbName, tableName, 'query', req), cacheEntry = _c[0], exactMatch = _c[1], tblCache = _c[2], container = _c[3]; + if (cacheEntry && exactMatch) { + cacheEntry.obsSet = req.obsSet; + } + else { + var promise = downTable.query(req).then(function (res) { + var result = res.result; + if (cacheEntry) + cacheEntry.res = result; + if (freezeResults) { + for (var i = 0, l = result.length; i < l; ++i) { + Object.freeze(result[i]); + } + Object.freeze(result); + } + else { + res.result = deepClone(result); + } + return res; + }).catch(function (error) { + if (container && cacheEntry) + delArrayItem(container, cacheEntry); + return Promise.reject(error); + }); + cacheEntry = { + obsSet: req.obsSet, + promise: promise, + subscribers: new Set(), + type: 'query', + req: req, + dirty: false, + }; + if (container) { + container.push(cacheEntry); + } + else { + container = [cacheEntry]; + if (!tblCache) { + tblCache = cache["idb://".concat(dbName, "/").concat(tableName)] = { + queries: { + query: {}, + count: {}, + }, + objs: new Map(), + optimisticOps: [], + unsignaledParts: {} + }; + } + tblCache.queries.query[req.query.index.name || ''] = container; + } + } + subscribeToCacheEntry(cacheEntry, container, requery, signal); + return cacheEntry.promise.then(function (res) { + return { + result: applyOptimisticOps(res.result, req, tblCache === null || tblCache === void 0 ? void 0 : tblCache.optimisticOps, downTable, cacheEntry, freezeResults), + }; + }); + } }); + return tableMW; + } }); + return coreMW; + }, + }; + + function vipify(target, vipDb) { + return new Proxy(target, { + get: function (target, prop, receiver) { + if (prop === 'db') + return vipDb; + return Reflect.get(target, prop, receiver); + } + }); + } + + var Dexie$1 = (function () { + function Dexie(name, options) { + var _this = this; + this._middlewares = {}; + this.verno = 0; + var deps = Dexie.dependencies; + this._options = options = __assign({ + addons: Dexie.addons, autoOpen: true, + indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange, cache: 'cloned' }, options); + this._deps = { + indexedDB: options.indexedDB, + IDBKeyRange: options.IDBKeyRange + }; + var addons = options.addons; + this._dbSchema = {}; + this._versions = []; + this._storeNames = []; + this._allTables = {}; + this.idbdb = null; + this._novip = this; + var state = { + dbOpenError: null, + isBeingOpened: false, + onReadyBeingFired: null, + openComplete: false, + dbReadyResolve: nop, + dbReadyPromise: null, + cancelOpen: nop, + openCanceller: null, + autoSchema: true, + PR1398_maxLoop: 3, + autoOpen: options.autoOpen, + }; + state.dbReadyPromise = new DexiePromise(function (resolve) { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise(function (_, reject) { + state.cancelOpen = reject; + }); + this._state = state; + this.name = name; + this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) { + return function (subscriber, bSticky) { + Dexie.vip(function () { + var state = _this._state; + if (state.openComplete) { + if (!state.dbOpenError) + DexiePromise.resolve().then(subscriber); + if (bSticky) + subscribe(subscriber); + } + else if (state.onReadyBeingFired) { + state.onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } + else { + subscribe(subscriber); + var db_1 = _this; + if (!bSticky) + subscribe(function unsubscribe() { + db_1.on.ready.unsubscribe(subscriber); + db_1.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.Collection = createCollectionConstructor(this); + this.Table = createTableConstructor(this); + this.Transaction = createTransactionConstructor(this); + this.Version = createVersionConstructor(this); + this.WhereClause = createWhereClauseConstructor(this); + this.on("versionchange", function (ev) { + if (ev.newVersion > 0) + console.warn("Another connection wants to upgrade database '".concat(_this.name, "'. Closing db now to resume the upgrade.")); + else + console.warn("Another connection wants to delete database '".concat(_this.name, "'. Closing db now to resume the delete request.")); + _this.close({ disableAutoOpen: false }); + }); + this.on("blocked", function (ev) { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn("Dexie.delete('".concat(_this.name, "') was blocked")); + else + console.warn("Upgrade '".concat(_this.name, "' blocked by other connection holding version ").concat(ev.oldVersion / 10)); + }); + this._maxKey = getMaxKey(options.IDBKeyRange); + this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { return new _this.Transaction(mode, storeNames, dbschema, _this._options.chromeTransactionDurability, parentTransaction); }; + this._fireOnBlocked = function (ev) { + _this.on("blocked").fire(ev); + connections + .filter(function (c) { return c.name === _this.name && c !== _this && !c._state.vcFired; }) + .map(function (c) { return c.on("versionchange").fire(ev); }); + }; + this.use(cacheExistingValuesMiddleware); + this.use(cacheMiddleware); + this.use(observabilityMiddleware); + this.use(virtualIndexMiddleware); + this.use(hooksMiddleware); + var vipDB = new Proxy(this, { + get: function (_, prop, receiver) { + if (prop === '_vip') + return true; + if (prop === 'table') + return function (tableName) { return vipify(_this.table(tableName), vipDB); }; + var rv = Reflect.get(_, prop, receiver); + if (rv instanceof Table) + return vipify(rv, vipDB); + if (prop === 'tables') + return rv.map(function (t) { return vipify(t, vipDB); }); + if (prop === '_createTransaction') + return function () { + var tx = rv.apply(this, arguments); + return vipify(tx, vipDB); + }; + return rv; + } + }); + this.vip = vipDB; + addons.forEach(function (addon) { return addon(_this); }); + } + Dexie.prototype.version = function (versionNumber) { + if (isNaN(versionNumber) || versionNumber < 0.1) + throw new exceptions.Type("Given version is not a positive number"); + versionNumber = Math.round(versionNumber * 10) / 10; + if (this.idbdb || this._state.isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + var versions = this._versions; + var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0]; + if (versionInstance) + return versionInstance; + versionInstance = new this.Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + versionInstance.stores({}); + this._state.autoSchema = false; + return versionInstance; + }; + Dexie.prototype._whenReady = function (fn) { + var _this = this; + return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise(function (resolve, reject) { + if (_this._state.openComplete) { + return reject(new exceptions.DatabaseClosed(_this._state.dbOpenError)); + } + if (!_this._state.isBeingOpened) { + if (!_this._state.autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + _this.open().catch(nop); + } + _this._state.dbReadyPromise.then(resolve, reject); + }).then(fn); + }; + Dexie.prototype.use = function (_a) { + var stack = _a.stack, create = _a.create, level = _a.level, name = _a.name; + if (name) + this.unuse({ stack: stack, name: name }); + var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); + middlewares.push({ stack: stack, create: create, level: level == null ? 10 : level, name: name }); + middlewares.sort(function (a, b) { return a.level - b.level; }); + return this; + }; + Dexie.prototype.unuse = function (_a) { + var stack = _a.stack, name = _a.name, create = _a.create; + if (stack && this._middlewares[stack]) { + this._middlewares[stack] = this._middlewares[stack].filter(function (mw) { + return create ? mw.create !== create : + name ? mw.name !== name : + false; + }); + } + return this; + }; + Dexie.prototype.open = function () { + var _this = this; + return usePSD(globalPSD, + function () { return dexieOpen(_this); }); + }; + Dexie.prototype._close = function () { + var state = this._state; + var idx = connections.indexOf(this); + if (idx >= 0) + connections.splice(idx, 1); + if (this.idbdb) { + try { + this.idbdb.close(); + } + catch (e) { } + this.idbdb = null; + } + if (!state.isBeingOpened) { + state.dbReadyPromise = new DexiePromise(function (resolve) { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise(function (_, reject) { + state.cancelOpen = reject; + }); + } + }; + Dexie.prototype.close = function (_a) { + var _b = _a === void 0 ? { disableAutoOpen: true } : _a, disableAutoOpen = _b.disableAutoOpen; + var state = this._state; + if (disableAutoOpen) { + if (state.isBeingOpened) { + state.cancelOpen(new exceptions.DatabaseClosed()); + } + this._close(); + state.autoOpen = false; + state.dbOpenError = new exceptions.DatabaseClosed(); + } + else { + this._close(); + state.autoOpen = this._options.autoOpen || + state.isBeingOpened; + state.openComplete = false; + state.dbOpenError = null; + } + }; + Dexie.prototype.delete = function (closeOptions) { + var _this = this; + if (closeOptions === void 0) { closeOptions = { disableAutoOpen: true }; } + var hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; + var state = this._state; + return new DexiePromise(function (resolve, reject) { + var doDelete = function () { + _this.close(closeOptions); + var req = _this._deps.indexedDB.deleteDatabase(_this.name); + req.onsuccess = wrap(function () { + _onDatabaseDeleted(_this._deps, _this.name); + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = _this._fireOnBlocked; + }; + if (hasInvalidArguments) + throw new exceptions.InvalidArgument("Invalid closeOptions argument to db.delete()"); + if (state.isBeingOpened) { + state.dbReadyPromise.then(doDelete); + } + else { + doDelete(); + } + }); + }; + Dexie.prototype.backendDB = function () { + return this.idbdb; + }; + Dexie.prototype.isOpen = function () { + return this.idbdb !== null; + }; + Dexie.prototype.hasBeenClosed = function () { + var dbOpenError = this._state.dbOpenError; + return dbOpenError && (dbOpenError.name === 'DatabaseClosed'); + }; + Dexie.prototype.hasFailed = function () { + return this._state.dbOpenError !== null; + }; + Dexie.prototype.dynamicallyOpened = function () { + return this._state.autoSchema; + }; + Object.defineProperty(Dexie.prototype, "tables", { + get: function () { + var _this = this; + return keys(this._allTables).map(function (name) { return _this._allTables[name]; }); + }, + enumerable: false, + configurable: true + }); + Dexie.prototype.transaction = function () { + var args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + }; + Dexie.prototype._transaction = function (mode, tables, scopeFunc) { + var _this = this; + var parentTransaction = PSD.trans; + if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) + parentTransaction = null; + var onlyIfCompatible = mode.indexOf('?') !== -1; + mode = mode.replace('!', '').replace('?', ''); + var idbMode, storeNames; + try { + storeNames = tables.map(function (table) { + var storeName = table instanceof _this.Table ? table.name : table; + if (typeof storeName !== 'string') + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + if (mode == "r" || mode === READONLY) + idbMode = READONLY; + else if (mode == "rw" || mode == READWRITE) + idbMode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + if (parentTransaction.mode === READONLY && idbMode === READWRITE) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach(function (storeName) { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Table " + storeName + + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + parentTransaction = null; + } + } + } + catch (e) { + return parentTransaction ? + parentTransaction._promise(null, function (_, reject) { reject(e); }) : + rejection(e); + } + var enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); + return (parentTransaction ? + parentTransaction._promise(idbMode, enterTransaction, "lock") : + PSD.trans ? + usePSD(PSD.transless, function () { return _this._whenReady(enterTransaction); }) : + this._whenReady(enterTransaction)); + }; + Dexie.prototype.table = function (tableName) { + if (!hasOwn(this._allTables, tableName)) { + throw new exceptions.InvalidTable("Table ".concat(tableName, " does not exist")); + } + return this._allTables[tableName]; + }; + return Dexie; + }()); + + var symbolObservable = typeof Symbol !== "undefined" && "observable" in Symbol + ? Symbol.observable + : "@@observable"; + var Observable = (function () { + function Observable(subscribe) { + this._subscribe = subscribe; + } + Observable.prototype.subscribe = function (x, error, complete) { + return this._subscribe(!x || typeof x === "function" ? { next: x, error: error, complete: complete } : x); + }; + Observable.prototype[symbolObservable] = function () { + return this; + }; + return Observable; + }()); + + var domDeps; + try { + domDeps = { + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; + } + catch (e) { + domDeps = { indexedDB: null, IDBKeyRange: null }; + } + + function liveQuery(querier) { + var hasValue = false; + var currentValue; + var observable = new Observable(function (observer) { + var scopeFuncIsAsync = isAsyncFunction(querier); + function execute(ctx) { + var wasRootExec = beginMicroTickScope(); + try { + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + var rv = newScope(querier, ctx); + if (scopeFuncIsAsync) { + rv = rv.finally(decrementExpectedAwaits); + } + return rv; + } + finally { + wasRootExec && endMicroTickScope(); + } + } + var closed = false; + var abortController; + var accumMuts = {}; + var currentObs = {}; + var subscription = { + get closed() { + return closed; + }, + unsubscribe: function () { + if (closed) + return; + closed = true; + if (abortController) + abortController.abort(); + if (startedListening) + globalEvents.storagemutated.unsubscribe(mutationListener); + }, + }; + observer.start && observer.start(subscription); + var startedListening = false; + var doQuery = function () { return execInGlobalContext(_doQuery); }; + function shouldNotify() { + return obsSetsOverlap(currentObs, accumMuts); + } + var mutationListener = function (parts) { + extendObservabilitySet(accumMuts, parts); + if (shouldNotify()) { + doQuery(); + } + }; + var _doQuery = function () { + if (closed || + !domDeps.indexedDB) + { + return; + } + accumMuts = {}; + var subscr = {}; + if (abortController) + abortController.abort(); + abortController = new AbortController(); + var ctx = { + subscr: subscr, + signal: abortController.signal, + requery: doQuery, + querier: querier, + trans: null + }; + var ret = execute(ctx); + Promise.resolve(ret).then(function (result) { + hasValue = true; + currentValue = result; + if (closed || ctx.signal.aborted) { + return; + } + accumMuts = {}; + currentObs = subscr; + if (!objectIsEmpty(currentObs) && !startedListening) { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener); + startedListening = true; + } + execInGlobalContext(function () { return !closed && observer.next && observer.next(result); }); + }, function (err) { + hasValue = false; + if (!['DatabaseClosedError', 'AbortError'].includes(err === null || err === void 0 ? void 0 : err.name)) { + if (!closed) + execInGlobalContext(function () { + if (closed) + return; + observer.error && observer.error(err); + }); + } + }); + }; + setTimeout(doQuery, 0); + return subscription; + }); + observable.hasValue = function () { return hasValue; }; + observable.getValue = function () { return currentValue; }; + return observable; + } + + var Dexie = Dexie$1; + props(Dexie, __assign(__assign({}, fullNameExceptions), { + delete: function (databaseName) { + var db = new Dexie(databaseName, { addons: [] }); + return db.delete(); + }, + exists: function (name) { + return new Dexie(name, { addons: [] }).open().then(function (db) { + db.close(); + return true; + }).catch('NoSuchDatabaseError', function () { return false; }); + }, + getDatabaseNames: function (cb) { + try { + return getDatabaseNames(Dexie.dependencies).then(cb); + } + catch (_a) { + return rejection(new exceptions.MissingAPI()); + } + }, + defineClass: function () { + function Class(content) { + extend(this, content); + } + return Class; + }, ignoreTransaction: function (scopeFunc) { + return PSD.trans ? + usePSD(PSD.transless, scopeFunc) : + scopeFunc(); + }, vip: vip, async: function (generatorFn) { + return function () { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }; + }, spawn: function (generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }, + currentTransaction: { + get: function () { return PSD.trans || null; } + }, waitFor: function (promiseOrFunction, optionalTimeout) { + var promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ? + Dexie.ignoreTransaction(promiseOrFunction) : + promiseOrFunction) + .timeout(optionalTimeout || 60000); + return PSD.trans ? + PSD.trans.waitFor(promise) : + promise; + }, + Promise: DexiePromise, + debug: { + get: function () { return debug; }, + set: function (value) { + setDebug(value); + } + }, + derive: derive, extend: extend, props: props, override: override, + Events: Events, on: globalEvents, liveQuery: liveQuery, extendObservabilitySet: extendObservabilitySet, + getByKeyPath: getByKeyPath, setByKeyPath: setByKeyPath, delByKeyPath: delByKeyPath, shallowClone: shallowClone, deepClone: deepClone, getObjectDiff: getObjectDiff, cmp: cmp, asap: asap$1, + minKey: minKey, + addons: [], + connections: connections, + errnames: errnames, + dependencies: domDeps, cache: cache, + semVer: DEXIE_VERSION, version: DEXIE_VERSION.split('.') + .map(function (n) { return parseInt(n); }) + .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }) })); + Dexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange); + + if (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function (updatedParts) { + if (!propagatingLocally) { + var event_1; + event_1 = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, { + detail: updatedParts + }); + propagatingLocally = true; + dispatchEvent(event_1); + propagatingLocally = false; + } + }); + addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, function (_a) { + var detail = _a.detail; + if (!propagatingLocally) { + propagateLocally(detail); + } + }); + } + function propagateLocally(updateParts) { + var wasMe = propagatingLocally; + try { + propagatingLocally = true; + globalEvents.storagemutated.fire(updateParts); + signalSubscribersNow(updateParts, true); + } + finally { + propagatingLocally = wasMe; + } + } + var propagatingLocally = false; + + var bc; + var createBC = function () { }; + if (typeof BroadcastChannel !== 'undefined') { + createBC = function () { + bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME); + bc.onmessage = function (ev) { return ev.data && propagateLocally(ev.data); }; + }; + createBC(); + if (typeof bc.unref === 'function') { + bc.unref(); + } + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function (changedParts) { + if (!propagatingLocally) { + bc.postMessage(changedParts); + } + }); + } + + if (typeof addEventListener !== 'undefined') { + addEventListener('pagehide', function (event) { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pagehide'); + bc === null || bc === void 0 ? void 0 : bc.close(); + for (var _i = 0, connections_1 = connections; _i < connections_1.length; _i++) { + var db = connections_1[_i]; + db.close({ disableAutoOpen: false }); + } + } + }); + addEventListener('pageshow', function (event) { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pageshow'); + createBC(); + propagateLocally({ all: new RangeSet(-Infinity, [[]]) }); + } + }); + } + + function add(value) { + return new PropModification({ add: value }); + } + + function remove(value) { + return new PropModification({ remove: value }); + } + + function replacePrefix(a, b) { + return new PropModification({ replacePrefix: [a, b] }); + } + + DexiePromise.rejectionMapper = mapError; + setDebug(debug); + + var namedExports = /*#__PURE__*/Object.freeze({ + __proto__: null, + Dexie: Dexie$1, + liveQuery: liveQuery, + Entity: Entity, + cmp: cmp, + PropModSymbol: PropModSymbol, + PropModification: PropModification, + replacePrefix: replacePrefix, + add: add, + remove: remove, + 'default': Dexie$1, + RangeSet: RangeSet, + mergeRanges: mergeRanges, + rangesOverlap: rangesOverlap + }); + + __assign(Dexie$1, namedExports, { default: Dexie$1 }); + + return Dexie$1; + +})); +//# sourceMappingURL=dexie.js.map diff --git a/src/assets/dexie/dist/dexie.js.map b/src/assets/dexie/dist/dexie.js.map new file mode 100644 index 000000000..29172da0a --- /dev/null +++ b/src/assets/dexie/dist/dexie.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dexie.js","sources":["../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.es6.js","../src/globals/global.ts","../src/functions/utils.ts","../src/errors/errors.js","../src/functions/chaining-functions.js","../src/helpers/debug.ts","../src/helpers/promise.js","../src/functions/temp-transaction.ts","../src/globals/constants.ts","../src/functions/combine.ts","../src/dbcore/keyrange.ts","../src/functions/workaround-undefined-primkey.ts","../src/classes/entity/Entity.ts","../src/functions/cmp.ts","../src/classes/table/table.ts","../src/helpers/Events.js","../src/functions/make-class-constructor.ts","../src/classes/table/table-constructor.ts","../src/classes/collection/collection-helpers.ts","../src/helpers/prop-modification.ts","../src/classes/collection/collection.ts","../src/classes/collection/collection-constructor.ts","../src/functions/compare-functions.ts","../src/classes/where-clause/where-clause-helpers.ts","../src/classes/where-clause/where-clause.ts","../src/classes/where-clause/where-clause-constructor.ts","../src/functions/event-wrappers.ts","../src/globals/global-events.ts","../src/classes/transaction/transaction.ts","../src/classes/transaction/transaction-constructor.ts","../src/helpers/index-spec.ts","../src/helpers/table-schema.ts","../src/functions/quirks.ts","../src/dbcore/get-key-extractor.ts","../src/dbcore/dbcore-indexeddb.ts","../src/classes/dexie/generate-middleware-stacks.ts","../src/classes/version/schema-helpers.ts","../src/classes/version/version.ts","../src/classes/version/version-constructor.ts","../src/helpers/database-enumerator.ts","../src/classes/dexie/vip.ts","../node_modules/.pnpm/safari-14-idb-fix@3.0.0/node_modules/safari-14-idb-fix/dist/index.js","../src/helpers/rangeset.ts","../src/live-query/extend-observability-set.ts","../src/live-query/obs-sets-overlap.ts","../src/live-query/cache/cache.ts","../src/live-query/cache/signalSubscribers.ts","../src/classes/dexie/dexie-open.ts","../src/helpers/yield-support.ts","../src/classes/dexie/transaction-helpers.ts","../src/dbcore/virtual-index-middleware.ts","../src/functions/get-object-diff.ts","../src/dbcore/get-effective-keys.ts","../src/hooks/hooks-middleware.ts","../src/dbcore/cache-existing-values-middleware.ts","../src/live-query/cache/is-cachable-context.ts","../src/live-query/cache/is-cachable-request.ts","../src/live-query/observability-middleware.ts","../src/live-query/cache/adjust-optimistic-request-from-failures.ts","../src/live-query/cache/is-within-range.ts","../src/live-query/cache/apply-optimistic-ops.ts","../src/live-query/cache/are-ranges-equal.ts","../src/live-query/cache/is-super-range.ts","../src/live-query/cache/find-compatible-query.ts","../src/live-query/cache/subscribe-cachentry.ts","../src/live-query/cache/cache-middleware.ts","../src/helpers/vipify.ts","../src/classes/dexie/dexie.ts","../src/classes/observable/observable.ts","../src/classes/dexie/dexie-dom-dependencies.ts","../src/live-query/live-query.ts","../src/classes/dexie/dexie-static-props.ts","../src/live-query/propagate-locally.ts","../src/live-query/enable-broadcast.ts","../src/support-bfcache.ts","../src/functions/propmods/add.ts","../src/functions/propmods/remove.ts","../src/functions/propmods/replace-prefix.ts","../src/index.ts","../src/index-umd.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","declare var global;\nexport const _global: any =\n typeof globalThis !== 'undefined' ? globalThis :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window :\n global;\n","import { _global } from \"../globals/global\";\nexport const keys = Object.keys;\nexport const isArray = Array.isArray;\nif (typeof Promise !== 'undefined' && !_global.Promise){\n // In jsdom, this it can be the case that Promise is not put on the global object.\n // If so, we need to patch the global object for the rest of the code to work as expected.\n // Other dexie code expects Promise to be on the global object (like normal browser environments)\n _global.Promise = Promise;\n}\nexport { _global }\n\nexport function extend(obj: T, extension: X): T & X {\n if (typeof extension !== 'object') return obj as T & X;\n keys(extension).forEach(function (key) {\n obj[key] = extension[key];\n });\n return obj as T & X;\n}\n\nexport const getProto = Object.getPrototypeOf;\nexport const _hasOwn = {}.hasOwnProperty;\nexport function hasOwn(obj, prop) {\n return _hasOwn.call(obj, prop);\n}\n\nexport function props (proto, extension) {\n if (typeof extension === 'function') extension = extension(getProto(proto));\n (typeof Reflect === \"undefined\" ? keys : Reflect.ownKeys)(extension).forEach(key => {\n setProp(proto, key, extension[key]);\n });\n}\n\nexport const defineProperty = Object.defineProperty;\n\nexport function setProp(obj, prop, functionOrGetSet, options?) {\n defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ?\n {get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true} :\n {value: functionOrGetSet, configurable: true, writable: true}, options));\n}\n\nexport function derive(Child) {\n return {\n from: function (Parent) {\n Child.prototype = Object.create(Parent.prototype);\n setProp(Child.prototype, \"constructor\", Child);\n return {\n extend: props.bind(null, Child.prototype)\n };\n }\n };\n}\n\nexport const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nexport function getPropertyDescriptor(obj, prop) {\n const pd = getOwnPropertyDescriptor(obj, prop);\n let proto;\n return pd || (proto = getProto(obj)) && getPropertyDescriptor (proto, prop);\n}\n\nconst _slice = [].slice;\nexport function slice(args, start?, end?) {\n return _slice.call(args, start, end);\n}\n\nexport function override(origFunc, overridedFactory) {\n return overridedFactory(origFunc);\n}\n\nexport function assert (b) {\n if (!b) throw new Error(\"Assertion Failed\");\n}\n\nexport function asap(fn) {\n // @ts-ignore\n if (_global.setImmediate) setImmediate(fn); else setTimeout(fn, 0);\n}\n\nexport function getUniqueArray(a) {\n return a.filter((value, index, self) => self.indexOf(value) === index);\n}\n\n/** Generate an object (hash map) based on given array.\n * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to\n * instert on the resulting object for each item in the array. If this function returns a falsy value, the\n * current item wont affect the resulting object.\n */\nexport function arrayToObject (array: T[], extractor: (x:T, idx: number)=>[string, R]): {[name: string]: R} {\n return array.reduce((result, item, i) => {\n var nameAndValue = extractor(item, i);\n if (nameAndValue) result[nameAndValue[0]] = nameAndValue[1];\n return result;\n }, {});\n}\n\nexport function trycatcher(fn, reject) {\n return function () {\n try {\n fn.apply(this, arguments);\n } catch (e) {\n reject(e);\n }\n };\n}\n\nexport function tryCatch(fn: (...args: any[])=>void, onerror, args?) : void {\n try {\n fn.apply(null, args);\n } catch (ex) {\n onerror && onerror(ex);\n }\n}\n\nexport function getByKeyPath(obj, keyPath) {\n // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path\n if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) return obj[keyPath]; // This line is moved from last to first for optimization purpose.\n if (!keyPath) return obj;\n if (typeof keyPath !== 'string') {\n var rv = [];\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n var val = getByKeyPath(obj, keyPath[i]);\n rv.push(val);\n }\n return rv;\n }\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var innerObj = obj[keyPath.substr(0, period)];\n return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n }\n return undefined;\n}\n\nexport function setByKeyPath(obj, keyPath, value) {\n if (!obj || keyPath === undefined) return;\n if ('isFrozen' in Object && Object.isFrozen(obj)) return;\n if (typeof keyPath !== 'string' && 'length' in keyPath) {\n assert(typeof value !== 'string' && 'length' in value);\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n setByKeyPath(obj, keyPath[i], value[i]);\n }\n } else {\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var currentKeyPath = keyPath.substr(0, period);\n var remainingKeyPath = keyPath.substr(period + 1);\n if (remainingKeyPath === \"\")\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) obj.splice(currentKeyPath, 1);\n else delete obj[currentKeyPath];\n } else obj[currentKeyPath] = value;\n else {\n var innerObj = obj[currentKeyPath];\n if (!innerObj || !hasOwn(obj, currentKeyPath)) innerObj = (obj[currentKeyPath] = {});\n setByKeyPath(innerObj, remainingKeyPath, value);\n }\n } else {\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(keyPath))) obj.splice(keyPath, 1);\n else delete obj[keyPath];\n } else obj[keyPath] = value;\n }\n }\n}\n\nexport function delByKeyPath(obj, keyPath) {\n if (typeof keyPath === 'string')\n setByKeyPath(obj, keyPath, undefined);\n else if ('length' in keyPath)\n [].map.call(keyPath, function(kp) {\n setByKeyPath(obj, kp, undefined);\n });\n}\n\nexport function shallowClone(obj) {\n var rv = {};\n for (var m in obj) {\n if (hasOwn(obj, m)) rv[m] = obj[m];\n }\n return rv;\n}\n\nconst concat = [].concat;\nexport function flatten (a: (T | T[])[]) : T[] {\n return concat.apply([], a);\n}\n\n//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\nconst intrinsicTypeNames =\n \"BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey\"\n .split(',').concat(\n flatten([8,16,32,64].map(num=>[\"Int\",\"Uint\",\"Float\"].map(t=>t+num+\"Array\")))\n ).filter(t=>_global[t]);\nconst intrinsicTypes = new Set(intrinsicTypeNames.map(t=>_global[t]));\n\n/** Deep clone a simple object tree.\n * \n * Copies object tree deeply, but does not deep-copy arrays,\n * typed arrays, Dates or other intrinsic types.\n * \n * Does not check for cyclic references.\n * \n * This function is 6 times faster than structuredClone() on chromium 111.\n * \n * This function can safely be used for cloning ObservabilitySets and RangeSets.\n * \n * @param o Object to clone\n * @returns Cloned object\n */\nexport function cloneSimpleObjectTree(o: T): T {\n const rv = {} as T;\n for (const k in o) if (hasOwn(o, k)) {\n const v = o[k];\n rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v);\n }\n return rv;\n}\n\nexport function objectIsEmpty(o: object) {\n for (const k in o) if (hasOwn(o, k)) return false;\n return true;\n}\n\nlet circularRefs: null | WeakMap = null;\n\n/** Deep clone an object or array.\n * \n * \n * @param any \n * @returns \n */\nexport function deepClone(any: T): T {\n circularRefs = new WeakMap();\n const rv = innerDeepClone(any);\n circularRefs = null;\n return rv;\n}\n\nfunction innerDeepClone(x: T): T {\n if (!x || typeof x !== 'object') return x;\n let rv = circularRefs.get(x); // Resolve circular references\n if (rv) return rv;\n if (isArray(x)) {\n rv = [];\n circularRefs.set(x, rv);\n for (var i = 0, l = x.length; i < l; ++i) {\n rv.push(innerDeepClone(x[i]));\n }\n } else if (intrinsicTypes.has(x.constructor)) {\n // For performance, we're less strict than structuredClone - we're only\n // cloning arrays and custom objects.\n // Typed arrays, Dates etc are not cloned.\n rv = x;\n } else {\n // We're nicer to custom classes than what structuredClone() is -\n // we preserve the proto of each object.\n const proto = getProto(x);\n rv = proto === Object.prototype ? {} : Object.create(proto);\n circularRefs.set(x, rv);\n for (var prop in x) {\n if (hasOwn(x, prop)) {\n rv[prop] = innerDeepClone(x[prop]);\n }\n }\n }\n return rv;\n}\n\nconst {toString} = {};\nexport function toStringTag(o: Object) {\n return toString.call(o).slice(8, -1);\n}\n\n// If first argument is iterable or array-like, return it as an array\nexport const iteratorSymbol = typeof Symbol !== 'undefined' ?\n Symbol.iterator :\n '@@iterator';\nexport const getIteratorOf = typeof iteratorSymbol === \"symbol\" ? function(x) {\n var i;\n return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nexport const asyncIteratorSymbol = typeof Symbol !== 'undefined'\n ? Symbol.asyncIterator || Symbol.for(\"Symbol.asyncIterator\")\n : '@asyncIterator';\n\nexport function delArrayItem(a: any[], x: any) {\n const i = a.indexOf(x);\n if (i >= 0) a.splice(i, 1);\n return i >= 0;\n}\n\nexport const NO_CHAR_ARRAY = {};\n// Takes one or several arguments and returns an array based on the following criteras:\n// * If several arguments provided, return arguments converted to an array in a way that\n// still allows javascript engine to optimize the code.\n// * If single argument is an array, return a clone of it.\n// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special\n// case to the two bullets below.\n// * If single argument is an iterable, convert it to an array and return the resulting array.\n// * If single argument is array-like (has length of type number), convert it to an array.\nexport function getArrayOf (arrayLike) {\n var i, a, x, it;\n if (arguments.length === 1) {\n if (isArray(arrayLike)) return arrayLike.slice();\n if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') return [arrayLike];\n if ((it = getIteratorOf(arrayLike))) {\n a = [];\n while ((x = it.next()), !x.done) a.push(x.value);\n return a;\n }\n if (arrayLike == null) return [arrayLike];\n i = arrayLike.length;\n if (typeof i === 'number') {\n a = new Array(i);\n while (i--) a[i] = arrayLike[i];\n return a;\n }\n return [arrayLike];\n }\n i = arguments.length;\n a = new Array(i);\n while (i--) a[i] = arguments[i];\n return a;\n}\nexport const isAsyncFunction = typeof Symbol !== 'undefined'\n ? (fn: Function) => fn[Symbol.toStringTag] === 'AsyncFunction'\n : ()=>false;\n","import { derive, setProp } from '../functions/utils';\n\nvar dexieErrorNames = [\n 'Modify',\n 'Bulk',\n 'OpenFailed',\n 'VersionChange',\n 'Schema',\n 'Upgrade',\n 'InvalidTable',\n 'MissingAPI',\n 'NoSuchDatabase',\n 'InvalidArgument',\n 'SubTransaction',\n 'Unsupported',\n 'Internal',\n 'DatabaseClosed',\n 'PrematureCommit',\n 'ForeignAwait'\n];\n\nvar idbDomErrorNames = [\n 'Unknown',\n 'Constraint',\n 'Data',\n 'TransactionInactive',\n 'ReadOnly',\n 'Version',\n 'NotFound',\n 'InvalidState',\n 'InvalidAccess',\n 'Abort',\n 'Timeout',\n 'QuotaExceeded',\n 'Syntax',\n 'DataClone'\n];\n\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\n\nvar defaultTexts = {\n VersionChanged: \"Database version changed by other database connection\",\n DatabaseClosed: \"Database has been closed\",\n Abort: \"Transaction aborted\",\n TransactionInactive: \"Transaction has already completed or failed\",\n MissingAPI: \"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb\"\n};\n\n//\n// DexieError - base class of all out exceptions.\n//\nexport function DexieError (name, msg) {\n // Reason we don't use ES6 classes is because:\n // 1. It bloats transpiled code and increases size of minified code.\n // 2. It doesn't give us much in this case.\n // 3. It would require sub classes to call super(), which\n // is not needed when deriving from Error.\n this.name = name;\n this.message = msg;\n}\n\nderive(DexieError).from(Error).extend({\n toString: function(){ return this.name + \": \" + this.message; }\n});\n\nfunction getMultiErrorMessage (msg, failures) {\n return msg + \". Errors: \" + Object.keys(failures)\n .map(key=>failures[key].toString())\n .filter((v,i,s)=>s.indexOf(v) === i) // Only unique error strings\n .join('\\n');\n}\n\n//\n// ModifyError - thrown in Collection.modify()\n// Specific constructor because it contains members failures and failedKeys.\n//\nexport function ModifyError (msg, failures, successCount, failedKeys) {\n this.failures = failures;\n this.failedKeys = failedKeys;\n this.successCount = successCount;\n this.message = getMultiErrorMessage(msg, failures);\n}\nderive(ModifyError).from(DexieError);\n\nexport function BulkError (msg, failures) {\n this.name = \"BulkError\";\n this.failures = Object.keys(failures).map(pos => failures[pos]);\n this.failuresByPos = failures;\n this.message = getMultiErrorMessage(msg, this.failures);\n}\nderive(BulkError).from(DexieError);\n\n//\n//\n// Dynamically generate error names and exception classes based\n// on the names in errorList.\n//\n//\n\n// Map of {ErrorName -> ErrorName + \"Error\"}\nexport var errnames = errorList.reduce((obj,name)=>(obj[name]=name+\"Error\",obj),{});\n\n// Need an alias for DexieError because we're gonna create subclasses with the same name.\nconst BaseException = DexieError;\n// Map of {ErrorName -> exception constructor}\nexport var exceptions = errorList.reduce((obj,name)=>{\n // Let the name be \"DexieError\" because this name may\n // be shown in call stack and when debugging. DexieError is\n // the most true name because it derives from DexieError,\n // and we cannot change Function.name programatically without\n // dynamically create a Function object, which would be considered\n // 'eval-evil'.\n var fullName = name + \"Error\";\n function DexieError (msgOrInner, inner){\n this.name = fullName;\n if (!msgOrInner) {\n this.message = defaultTexts[name] || fullName;\n this.inner = null;\n } else if (typeof msgOrInner === 'string') {\n this.message = `${msgOrInner}${!inner ? '' : '\\n ' + inner}`;\n this.inner = inner || null;\n } else if (typeof msgOrInner === 'object') {\n this.message = `${msgOrInner.name} ${msgOrInner.message}`;\n this.inner = msgOrInner;\n }\n }\n derive(DexieError).from(BaseException);\n obj[name]=DexieError;\n return obj;\n},{});\n\n// Use ECMASCRIPT standard exceptions where applicable:\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\n\nexport var exceptionMap = idbDomErrorNames.reduce((obj, name)=>{\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nexport function mapError (domError, message) {\n if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])\n return domError;\n var rv = new exceptionMap[domError.name](message || domError.message, domError);\n if (\"stack\" in domError) {\n // Derive stack from inner exception if it has a stack\n setProp(rv, \"stack\", {get: function(){\n return this.inner.stack;\n }});\n }\n return rv;\n}\n\nexport var fullNameExceptions = errorList.reduce((obj, name)=>{\n if ([\"Syntax\",\"Type\",\"Range\"].indexOf(name) === -1)\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n","import {extend} from './utils';\n\nexport function nop() { }\nexport function mirror(val) { return val; }\nexport function pureFunctionChain(f1, f2) {\n // Enables chained events that takes ONE argument and returns it to the next function in chain.\n // This pattern is used in the hook(\"reading\") event.\n if (f1 == null || f1 === mirror) return f2;\n return function (val) {\n return f2(f1(val));\n };\n}\n\nexport function callBoth(on1, on2) {\n return function () {\n on1.apply(this, arguments);\n on2.apply(this, arguments);\n };\n}\n\nexport function hookCreatingChain(f1, f2) {\n // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance.\n // This pattern is used in the hook(\"creating\") event.\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res !== undefined) arguments[0] = res;\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res2 !== undefined ? res2 : res;\n };\n}\n\nexport function hookDeletingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = this.onerror = null;\n f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n };\n}\n\nexport function hookUpdatingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function (modifications) {\n var res = f1.apply(this, arguments);\n extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain.\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res === undefined ?\n (res2 === undefined ? undefined : res2) :\n (extend(res, res2));\n };\n}\n\nexport function reverseStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n if (f2.apply(this, arguments) === false) return false;\n return f1.apply(this, arguments);\n };\n}\n\nexport function nonStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n f2.apply(this, arguments);\n };\n}\n\nexport function promisableChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res && typeof res.then === 'function') {\n var thiz = this,\n i = arguments.length,\n args = new Array(i);\n while (i--) args[i] = arguments[i];\n return res.then(function () {\n return f2.apply(thiz, args);\n });\n }\n return f2.apply(this, arguments);\n };\n}\n","// By default, debug will be true only if platform is a web platform and its page is served from localhost.\n// When debug = true, error's stacks will contain asyncronic long stacks.\nexport var debug = typeof location !== 'undefined' &&\n // By default, use debug mode if served from localhost.\n /^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\n\nexport function setDebug(value, filter) {\n debug = value;\n}\n\nexport function deprecated (what: string, fn: (...args)=>T) {\n return function () {\n console.warn(`${what} is deprecated. See https://dexie.org/docs/Deprecations}`);\n return fn.apply(this, arguments);\n } as (...args)=>T\n}\n","/*\n * Copyright (c) 2014-2017 David Fahlander\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n */\nimport { _global } from '../globals/global';\nimport {tryCatch, props, setProp,\n getPropertyDescriptor, getArrayOf, extend, getProto} from '../functions/utils';\nimport {nop, callBoth, mirror} from '../functions/chaining-functions';\nimport {debug} from './debug';\nimport {exceptions} from '../errors';\n\n//\n// Promise and Zone (PSD) for Dexie library\n//\n// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by\n// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation.\n//\n// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another\n// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use\n// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task\n// engine that is indexedDB compliant across all browsers.\n// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible.\n//\n// Specific non-standard features of this Promise class:\n// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as\n// native async / await.\n// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame\n// and below + all promises that those promises creates or awaits.\n// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). \n//\n// David Fahlander, https://github.com/dfahlander\n//\n\n// Just a pointer that only this module knows about.\n// Used in Promise constructor to emulate a private constructor.\nvar INTERNAL = {};\n\nconst\n ZONE_ECHO_LIMIT = 100,\n [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ?\n [] :\n (()=>{\n let globalP = Promise.resolve();\n if (typeof crypto === 'undefined' || !crypto.subtle)\n return [globalP, getProto(globalP), globalP];\n // Generate a native promise (as window.Promise may have been patched)\n const nativeP = crypto.subtle.digest(\"SHA-512\", new Uint8Array([0]));\n return [\n nativeP,\n getProto(nativeP),\n globalP\n ];\n })(),\n nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\n\nexport const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nconst patchGlobalPromise = !!resolvedGlobalPromise;\n\n/* The default function used only for the very first promise in a promise chain.\n As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks\n emulated in this module. For indexedDB compatibility, this means that every method needs to \n execute at least one promise before doing an indexedDB operation. Dexie will always call \n db.ready().then() for every operation to make sure the indexedDB event is started in an\n indexedDB-compatible emulated micro task loop.\n*/\nfunction schedulePhysicalTick() {\n queueMicrotask(physicalTick);\n}\n\n// Configurable through Promise.scheduler.\n// Don't export because it would be unsafe to let unknown\n// code call it unless they do try..catch within their callback.\n// This function can be retrieved through getter of Promise.scheduler though,\n// but users must not do Promise.scheduler = myFuncThatThrowsException\nvar asap = function (callback, args) {\n microtickQueue.push([callback, args]);\n if (needsNewPhysicalTick) {\n schedulePhysicalTick();\n needsNewPhysicalTick = false;\n }\n};\n\nvar isOutsideMicroTick = true, // True when NOT in a virtual microTick.\n needsNewPhysicalTick = true, // True when a push to microtickQueue must also schedulePhysicalTick()\n unhandledErrors = [], // Rejected promises that has occured. Used for triggering 'unhandledrejection'.\n rejectingErrors = [], // Tracks if errors are being re-rejected during onRejected callback.\n rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions\n \nexport var globalPSD = {\n id: 'global',\n global: true,\n ref: 0,\n unhandleds: [],\n onunhandled: nop,\n pgp: false,\n env: {},\n finalize: nop\n};\n\nexport var PSD = globalPSD;\n\nexport var microtickQueue = []; // Callbacks to call in this or next physical tick.\nexport var numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick.\nexport var tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick.\n\nexport default function DexiePromise(fn) {\n if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); \n this._listeners = [];\n \n // A library may set `promise._lib = true;` after promise is created to make resolve() or reject()\n // execute the microtask engine implicitely within the call to resolve() or reject().\n // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack\n // only contains library code when calling resolve() or reject().\n // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from\n // global scope (event handler, timer etc)!\n this._lib = false;\n // Current async scope\n var psd = (this._PSD = PSD);\n \n if (typeof fn !== 'function') {\n if (fn !== INTERNAL) throw new TypeError('Not a function');\n // Private constructor (INTERNAL, state, value).\n // Used internally by Promise.resolve() and Promise.reject().\n this._state = arguments[1];\n this._value = arguments[2];\n if (this._state === false)\n handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError().\n return;\n }\n \n this._state = null; // null (=pending), false (=rejected) or true (=resolved)\n this._value = null; // error or result\n ++psd.ref; // Refcounting current scope\n executePromiseTask(this, fn);\n}\n\n// Prepare a property descriptor to put onto Promise.prototype.then\nconst thenProp = {\n get: function() {\n var psd = PSD, microTaskId = totalEchoes;\n\n function then (onFulfilled, onRejected) {\n var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n const cleanup = possibleAwait && !decrementExpectedAwaits();\n var rv = new DexiePromise((resolve, reject) => {\n propagateToListener(this, new Listener(\n nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup),\n nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup),\n resolve,\n reject,\n psd));\n });\n if (this._consoleTask) rv._consoleTask = this._consoleTask;\n return rv;\n }\n\n then.prototype = INTERNAL; // For idempotense, see setter below.\n\n return then;\n },\n // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then\n // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor.\n set: function (value) {\n setProp (this, 'then', value && value.prototype === INTERNAL ?\n thenProp : // Restore to original property descriptor.\n {\n get: function(){\n return value; // Getter returning provided value (behaves like value is just changed)\n },\n set: thenProp.set // Keep a setter that is prepared to restore original.\n }\n );\n }\n};\n\nprops(DexiePromise.prototype, {\n then: thenProp, // Defined above.\n _then: function (onFulfilled, onRejected) {\n // A little tinier version of then() that don't have to create a resulting promise.\n propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); \n },\n\n catch: function (onRejected) {\n if (arguments.length === 1) return this.then(null, onRejected);\n // First argument is the Error type to catch\n var type = arguments[0],\n handler = arguments[1];\n return typeof type === 'function' ? this.then(null, err =>\n // Catching errors by its constructor type (similar to java / c++ / c#)\n // Sample: promise.catch(TypeError, function (e) { ... });\n err instanceof type ? handler(err) : PromiseReject(err))\n : this.then(null, err =>\n // Catching errors by the error.name property. Makes sense for indexedDB where error type\n // is always DOMError but where e.name tells the actual error type.\n // Sample: promise.catch('ConstraintError', function (e) { ... });\n err && err.name === type ? handler(err) : PromiseReject(err));\n },\n\n finally: function (onFinally) {\n return this.then(value => {\n return DexiePromise.resolve(onFinally()).then(()=>value);\n }, err => {\n return DexiePromise.resolve(onFinally()).then(()=>PromiseReject(err));\n });\n },\n \n timeout: function (ms, msg) {\n return ms < Infinity ?\n new DexiePromise((resolve, reject) => {\n var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms);\n this.then(resolve, reject).finally(clearTimeout.bind(null, handle));\n }) : this;\n }\n});\n\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag)\n setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise');\n\n// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env.\n// Environment globals snapshotted on leaving global zone\nglobalPSD.env = snapShot();\n\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n this.psd = zone;\n}\n\n// Promise Static Properties\nprops (DexiePromise, {\n all: function () {\n var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like.\n .map(onPossibleParallellAsync); // Handle parallell async/awaits \n return new DexiePromise(function (resolve, reject) {\n if (values.length === 0) resolve([]);\n var remaining = values.length;\n values.forEach((a,i) => DexiePromise.resolve(a).then(x => {\n values[i] = x;\n if (!--remaining) resolve(values);\n }, reject));\n });\n },\n \n resolve: value => {\n if (value instanceof DexiePromise) return value;\n if (value && typeof value.then === 'function') return new DexiePromise((resolve, reject)=>{\n value.then(resolve, reject);\n });\n var rv = new DexiePromise(INTERNAL, true, value);\n return rv;\n },\n \n reject: PromiseReject,\n \n race: function () {\n var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n values.map(value => DexiePromise.resolve(value).then(resolve, reject));\n });\n },\n\n PSD: {\n get: ()=>PSD,\n set: value => PSD = value\n },\n\n totalEchoes: {get: ()=>totalEchoes},\n\n //task: {get: ()=>task},\n \n newPSD: newScope,\n \n usePSD: usePSD,\n \n scheduler: {\n get: () => asap,\n set: value => {asap = value}\n },\n \n rejectionMapper: {\n get: () => rejectionMapper,\n set: value => {rejectionMapper = value;} // Map reject failures\n },\n \n follow: (fn, zoneProps) => {\n return new DexiePromise((resolve, reject) => {\n return newScope((resolve, reject) => {\n var psd = PSD;\n psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize()\n psd.onunhandled = reject; // Triggered directly on unhandled promises of this library.\n psd.finalize = callBoth(function () {\n // Unhandled standard or 3rd part promises are put in PSD.unhandleds and\n // examined upon scope completion while unhandled rejections in this Promise\n // will trigger directly through psd.onunhandled\n run_at_end_of_this_or_next_physical_tick(()=>{\n this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]);\n });\n }, psd.finalize);\n fn();\n }, zoneProps, resolve, reject);\n });\n }\n});\n\nif (NativePromise) {\n if (NativePromise.allSettled) setProp (DexiePromise, \"allSettled\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise(resolve => {\n if (possiblePromises.length === 0) resolve([]);\n let remaining = possiblePromises.length;\n const results = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => results[i] = {status: \"fulfilled\", value},\n reason => results[i] = {status: \"rejected\", reason})\n .then(()=>--remaining || resolve(results)));\n });\n });\n if (NativePromise.any && typeof AggregateError !== 'undefined') setProp(DexiePromise, \"any\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n if (possiblePromises.length === 0) reject(new AggregateError([]));\n let remaining = possiblePromises.length;\n const failures = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => resolve(value),\n failure => {\n failures[i] = failure;\n if (!--remaining) reject(new AggregateError(failures));\n }));\n });\n });\n}\n\n/**\n* Take a potentially misbehaving resolver function and make sure\n* onFulfilled and onRejected are only called once.\n*\n* Makes no guarantees about asynchrony.\n*/\nfunction executePromiseTask (promise, fn) {\n // Promise Resolution Procedure:\n // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n try {\n fn(value => {\n if (promise._state !== null) return; // Already settled\n if (value === promise) throw new TypeError('A promise cannot be resolved with itself.');\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n if (value && typeof value.then === 'function') {\n executePromiseTask(promise, (resolve, reject) => {\n value instanceof DexiePromise ?\n value._then(resolve, reject) :\n value.then(resolve, reject);\n });\n } else {\n promise._state = true;\n promise._value = value;\n propagateAllListeners(promise);\n }\n if (shouldExecuteTick) endMicroTickScope();\n }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below\n } catch (ex) {\n handleRejection(promise, ex);\n }\n}\n\nfunction handleRejection (promise, reason) {\n rejectingErrors.push(reason);\n if (promise._state !== null) return;\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n reason = rejectionMapper(reason);\n promise._state = false;\n promise._value = reason;\n // Add the failure to a list of possibly uncaught errors\n addPossiblyUnhandledError(promise);\n propagateAllListeners(promise);\n if (shouldExecuteTick) endMicroTickScope();\n}\n\nfunction propagateAllListeners (promise) {\n //debug && linkToPreviousPromise(promise);\n var listeners = promise._listeners;\n promise._listeners = [];\n for (var i = 0, len = listeners.length; i < len; ++i) {\n propagateToListener(promise, listeners[i]);\n }\n var psd = promise._PSD;\n --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize();\n if (numScheduledCalls === 0) {\n // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call,\n // and that no deferreds where listening to this rejection or success.\n // Since there is a risk that our stack can contain application code that may\n // do stuff after this code is finished that may generate new calls, we cannot\n // call finalizers here.\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick(); // Will detect unhandled errors\n }, []);\n }\n}\n\nfunction propagateToListener(promise, listener) {\n if (promise._state === null) {\n promise._listeners.push(listener);\n return;\n }\n\n var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n if (cb === null) {\n // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch()\n return (promise._state ? listener.resolve : listener.reject) (promise._value);\n }\n ++listener.psd.ref;\n ++numScheduledCalls;\n asap (callListener, [cb, promise, listener]);\n}\n\nfunction callListener (cb, promise, listener) {\n try {\n // Call callback and resolve our listener with it's return value.\n var ret, value = promise._value;\n \n if (!promise._state && rejectingErrors.length) rejectingErrors = [];\n // cb is onResolved\n ret = debug && promise._consoleTask ? promise._consoleTask.run(()=>cb (value)) : cb (value);\n if (!promise._state && rejectingErrors.indexOf(value) === -1) {\n markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise.\n }\n listener.resolve(ret);\n } catch (e) {\n // Exception thrown in callback. Reject our listener.\n listener.reject(e);\n } finally {\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n --listener.psd.ref || listener.psd.finalize();\n }\n}\n\n/* The callback to schedule with queueMicrotask().\n It runs a virtual microtick and executes any callback registered in microtickQueue.\n */\nfunction physicalTick() {\n usePSD(globalPSD, ()=>{\n // Make sure to reset the async context to globalPSD before\n // executing any of the microtick subscribers.\n beginMicroTickScope() && endMicroTickScope();\n });\n}\n\nexport function beginMicroTickScope() {\n var wasRootExec = isOutsideMicroTick;\n isOutsideMicroTick = false;\n needsNewPhysicalTick = false;\n return wasRootExec;\n}\n\n/* Executes micro-ticks without doing try..catch.\n This can be possible because we only use this internally and\n the registered functions are exception-safe (they do try..catch\n internally before calling any external method). If registering\n functions in the microtickQueue that are not exception-safe, this\n would destroy the framework and make it instable. So we don't export\n our asap method.\n*/\nexport function endMicroTickScope() {\n var callbacks, i, l;\n do {\n while (microtickQueue.length > 0) {\n callbacks = microtickQueue;\n microtickQueue = [];\n l = callbacks.length;\n for (i = 0; i < l; ++i) {\n var item = callbacks[i];\n item[0].apply(null, item[1]);\n }\n }\n } while (microtickQueue.length > 0);\n isOutsideMicroTick = true;\n needsNewPhysicalTick = true;\n}\n\nfunction finalizePhysicalTick() {\n var unhandledErrs = unhandledErrors;\n unhandledErrors = [];\n unhandledErrs.forEach(p => {\n p._PSD.onunhandled.call(null, p._value, p);\n });\n var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list.\n var i = finalizers.length;\n while (i) finalizers[--i](); \n}\n\nfunction run_at_end_of_this_or_next_physical_tick (fn) {\n function finalizer() {\n fn();\n tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n }\n tickFinalizers.push(finalizer);\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n }, []);\n}\n\nfunction addPossiblyUnhandledError(promise) {\n // Only add to unhandledErrors if not already there. The first one to add to this list\n // will be upon the first rejection so that the root cause (first promise in the\n // rejection chain) is the one listed.\n if (!unhandledErrors.some(p => p._value === promise._value))\n unhandledErrors.push(promise);\n}\n\nfunction markErrorAsHandled(promise) {\n // Called when a reject handled is actually being called.\n // Search in unhandledErrors for any promise whos _value is this promise_value (list\n // contains only rejected promises, and only one item per error)\n var i = unhandledErrors.length;\n while (i) if (unhandledErrors[--i]._value === promise._value) {\n // Found a promise that failed with this same error object pointer,\n // Remove that since there is a listener that actually takes care of it.\n unhandledErrors.splice(i, 1);\n return;\n }\n}\n\nfunction PromiseReject (reason) {\n return new DexiePromise(INTERNAL, false, reason);\n}\n\nexport function wrap (fn, errorCatcher) {\n var psd = PSD;\n return function() {\n var wasRootExec = beginMicroTickScope(),\n outerScope = PSD;\n\n try {\n switchToZone(psd, true);\n return fn.apply(this, arguments);\n } catch (e) {\n errorCatcher && errorCatcher(e);\n } finally {\n switchToZone(outerScope, false);\n if (wasRootExec) endMicroTickScope();\n }\n };\n}\n\n\n//\n// variables used for native await support\n//\nconst task = { awaits: 0, echoes: 0, id: 0}; // The ongoing macro-task when using zone-echoing.\nvar taskCounter = 0; // ID counter for macro tasks.\nvar zoneStack = []; // Stack of left zones to restore asynchronically.\nvar zoneEchoes = 0; // When > 0, zoneLeaveEcho is queued. When 0 and task.echoes is also 0, nothing is queued.\nvar totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then.\n\n\nvar zone_id_counter = 0;\nexport function newScope (fn, props, a1, a2) {\n var parent = PSD,\n psd = Object.create(parent);\n psd.parent = parent;\n psd.ref = 0;\n psd.global = false;\n psd.id = ++zone_id_counter;\n // Prepare for promise patching (done in usePSD):\n var globalEnv = globalPSD.env;\n psd.env = patchGlobalPromise ? {\n Promise: DexiePromise, // Changing window.Promise could be omitted for Chrome and Edge, where IDB+Promise plays well!\n PromiseProp: {value: DexiePromise, configurable: true, writable: true},\n all: DexiePromise.all,\n race: DexiePromise.race,\n allSettled: DexiePromise.allSettled,\n any: DexiePromise.any,\n resolve: DexiePromise.resolve,\n reject: DexiePromise.reject,\n } : {};\n if (props) extend(psd, props);\n \n // unhandleds and onunhandled should not be specifically set here.\n // Leave them on parent prototype.\n // unhandleds.push(err) will push to parent's prototype\n // onunhandled() will call parents onunhandled (with this scope's this-pointer though!)\n ++parent.ref;\n psd.finalize = function () {\n --this.parent.ref || this.parent.finalize();\n }\n var rv = usePSD (psd, fn, a1, a2);\n if (psd.ref === 0) psd.finalize();\n return rv;\n}\n\n// Function to call if scopeFunc returns NativePromise\n// Also for each NativePromise in the arguments to Promise.all()\nexport function incrementExpectedAwaits() {\n if (!task.id) task.id = ++taskCounter;\n ++task.awaits;\n task.echoes += ZONE_ECHO_LIMIT;\n return task.id;\n}\n\n// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called.\n// Also call this when a native await calls then method on a promise. In that case, don't supply\n// sourceTaskId because we already know it refers to current task.\nexport function decrementExpectedAwaits() {\n if (!task.awaits) return false;\n if (--task.awaits === 0) task.id = 0;\n task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0.\n return true;\n}\n\nif ((''+nativePromiseThen).indexOf('[native code]') === -1) {\n // If the native promise' prototype is patched, we cannot rely on zone echoing.\n // Disable that here:\n incrementExpectedAwaits = decrementExpectedAwaits = nop;\n}\n\n// Call from Promise.all() and Promise.race()\nexport function onPossibleParallellAsync (possiblePromise) {\n if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n incrementExpectedAwaits(); \n return possiblePromise.then(x => {\n decrementExpectedAwaits();\n return x;\n }, e => {\n decrementExpectedAwaits();\n return rejection(e);\n });\n }\n return possiblePromise;\n}\n\nfunction zoneEnterEcho(targetZone) {\n ++totalEchoes;\n //console.log(\"Total echoes \", totalEchoes);\n //if (task.echoes === 1) console.warn(\"Cancelling echoing of async context.\");\n if (!task.echoes || --task.echoes === 0) {\n task.echoes = task.awaits = task.id = 0; // Cancel echoing.\n }\n\n zoneStack.push(PSD);\n switchToZone(targetZone, true);\n}\n\nfunction zoneLeaveEcho() {\n var zone = zoneStack[zoneStack.length-1];\n zoneStack.pop();\n switchToZone(zone, false);\n}\n\nfunction switchToZone (targetZone, bEnteringZone) {\n var currentZone = PSD;\n if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {\n // Enter or leave zone asynchronically as well, so that tasks initiated during current tick\n // will be surrounded by the zone when they are invoked.\n queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n }\n if (targetZone === PSD) return;\n\n PSD = targetZone; // The actual zone switch occurs at this line.\n\n // Snapshot on every leave from global zone.\n if (currentZone === globalPSD) globalPSD.env = snapShot();\n\n if (patchGlobalPromise) {\n // Let's patch the global and native Promises (may be same or may be different)\n var GlobalPromise = globalPSD.env.Promise;\n // Swich environments (may be PSD-zone or the global zone. Both apply.)\n var targetEnv = targetZone.env;\n\n if (currentZone.global || targetZone.global) {\n // Leaving or entering global zone. It's time to patch / restore global Promise.\n\n // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular.\n Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);\n\n // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might\n // not be accessing global.Promise but a local reference to it)\n GlobalPromise.all = targetEnv.all;\n GlobalPromise.race = targetEnv.race;\n GlobalPromise.resolve = targetEnv.resolve;\n GlobalPromise.reject = targetEnv.reject;\n if (targetEnv.allSettled) GlobalPromise.allSettled = targetEnv.allSettled;\n if (targetEnv.any) GlobalPromise.any = targetEnv.any;\n }\n }\n}\n\nfunction snapShot () {\n var GlobalPromise = _global.Promise;\n return patchGlobalPromise ? {\n Promise: GlobalPromise,\n PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n all: GlobalPromise.all,\n race: GlobalPromise.race,\n allSettled: GlobalPromise.allSettled,\n any: GlobalPromise.any,\n resolve: GlobalPromise.resolve,\n reject: GlobalPromise.reject,\n } : {};\n}\n\nexport function usePSD (psd, fn, a1, a2, a3) {\n var outerScope = PSD;\n try {\n switchToZone(psd, true);\n return fn(a1, a2, a3);\n } finally {\n switchToZone(outerScope, false);\n }\n}\n\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) {\n return typeof fn !== 'function' ? fn : function () {\n var outerZone = PSD;\n if (possibleAwait) incrementExpectedAwaits();\n switchToZone(zone, true);\n try {\n return fn.apply(this, arguments);\n } finally {\n switchToZone(outerZone, false);\n if (cleanup) queueMicrotask(decrementExpectedAwaits);\n }\n };\n}\n\n/** Execute callback in global context */\nexport function execInGlobalContext(cb) {\n if (Promise === NativePromise && task.echoes === 0) {\n if (zoneEchoes === 0) {\n cb();\n } else {\n enqueueNativeMicroTask(cb);\n }\n } else {\n setTimeout(cb, 0);\n }\n}\n\nexport var rejection = DexiePromise.reject;\n\nexport {DexiePromise};\n","import { PSD, rejection, newScope } from \"../helpers/promise\";\nimport { DexieOptions } from \"../public/types/dexie-constructor\";\nimport { errnames, exceptions } from \"../errors\";\nimport { nop } from \"./chaining-functions\";\nimport { Transaction } from \"../classes/transaction\";\nimport { Dexie } from '../classes/dexie';\n\n/* Generate a temporary transaction when db operations are done outside a transaction scope.\n*/\nexport function tempTransaction (\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n fn: (resolve, reject, trans: Transaction) => any)\n // Last argument is \"writeLocked\". But this doesnt apply to oneshot direct db operations, so we ignore it.\n{\n if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) {\n if (db._state.openComplete) {\n // db.idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError));\n }\n if (!db._state.isBeingOpened) {\n if (!db._state.autoOpen)\n return rejection(new exceptions.DatabaseClosed());\n db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn));\n } else {\n var trans = db._createTransaction(mode, storeNames, db._dbSchema);\n try {\n trans.create();\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(()=>tempTransaction(db, mode, storeNames, fn));\n }\n return rejection(ex);\n }\n return trans._promise(mode, (resolve, reject) => {\n return newScope(() => { // OPTIMIZATION POSSIBLE? newScope() not needed because it's already done in _promise.\n PSD.trans = trans;\n return fn(resolve, reject, trans);\n });\n }).then(result => {\n // Instead of resolving value directly, wait with resolving it until transaction has completed.\n // Otherwise the data would not be in the DB if requesting it in the then() operation.\n // Specifically, to ensure that the following expression will work:\n //\n // db.friends.put({name: \"Arne\"}).then(function () {\n // db.friends.where(\"name\").equals(\"Arne\").count(function(count) {\n // assert (count === 1);\n // });\n // });\n //\n if (mode === 'readwrite') try {trans.idbtrans.commit();} catch {}\n return mode === 'readonly' ? result : trans._completion.then(() => result);\n });/*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major.\n trans._reject(err);\n return rejection(err);\n });*/\n }\n}\n","import { Dexie } from \"../classes/dexie\";\n\nexport const DEXIE_VERSION = '{version}'; // Replaced by build-script.\nexport const maxString = String.fromCharCode(65535);\nexport const minKey = -Infinity; // minKey can be constant. maxKey must be a prop of Dexie (_maxKey)\nexport const INVALID_KEY_ARGUMENT =\n \"Invalid key provided. Keys must be of type string, number, Date or Array.\";\nexport const STRING_EXPECTED = \"String expected.\";\nexport const connections: Dexie[] = [];\nexport const dexieStackFrameFilter = frame => !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\nexport const DBNAMES_DB = '__dbnames';\nexport const READONLY = 'readonly';\nexport const READWRITE = 'readwrite';\n","export function combine(filter1, filter2) {\n return filter1 ?\n filter2 ?\n function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :\n filter1 :\n filter2;\n}\n","import { DBCoreKeyRange, DBCoreRangeType } from '../public/types/dbcore';\n\nexport const AnyRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Any,\n lower: -Infinity,\n lowerOpen: false,\n upper: [[]],\n upperOpen: false\n}\n\nexport const NeverRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Never,\n lower: -Infinity,\n lowerOpen: true,\n upper: -Infinity,\n upperOpen: true\n}\n","import { deepClone, delByKeyPath, getByKeyPath } from './utils';\n\n// This workaround is needed since obj could be a custom-class instance with an\n// uninitialized keyPath. See the following comment for more context:\n// https://github.com/dfahlander/Dexie.js/issues/1280#issuecomment-823557881\nexport function workaroundForUndefinedPrimKey(keyPath: string | ArrayLike) {\n // Workaround only needed for plain non-dotted keyPaths\n return typeof keyPath === \"string\" && !/\\./.test(keyPath) \n ? (obj: object) => {\n if (obj[keyPath] === undefined && (keyPath in obj)) {\n // property exists but is undefined. This will not be liked by Indexeddb.\n // Need to remove the property before adding it but we need to clone it before\n // doing that to not be intrusive.\n obj = deepClone(obj);\n delete obj[keyPath];\n }\n return obj;\n }\n : (obj: object) => obj;\n}","import { exceptions } from \"../../errors\";\n\nexport function Entity(){\n throw exceptions.Type();\n}\n","// Implementation of https://www.w3.org/TR/IndexedDB-3/#compare-two-keys\n\nimport { toStringTag } from './utils';\n\n// ... with the adjustment to return NaN instead of throwing.\nexport function cmp(a: any, b: any): number {\n try {\n const ta = type(a);\n const tb = type(b);\n if (ta !== tb) {\n if (ta === 'Array') return 1;\n if (tb === 'Array') return -1;\n if (ta === 'binary') return 1;\n if (tb === 'binary') return -1;\n if (ta === 'string') return 1;\n if (tb === 'string') return -1;\n if (ta === 'Date') return 1;\n if (tb !== 'Date') return NaN;\n return -1;\n }\n switch (ta) {\n case 'number':\n case 'Date':\n case 'string':\n return a > b ? 1 : a < b ? -1 : 0;\n case 'binary': {\n return compareUint8Arrays(getUint8Array(a), getUint8Array(b));\n }\n case 'Array':\n return compareArrays(a, b);\n }\n } catch {}\n return NaN; // Return value if any given args are valid keys.\n}\n\nexport function compareArrays(a: any[], b: any[]): number {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n const res = cmp(a[i], b[i]);\n if (res !== 0) return res;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\nexport function compareUint8Arrays(\n a: Uint8Array,\n b: Uint8Array\n) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n if (a[i] !== b[i]) return a[i] < b[i] ? -1 : 1;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\n// Implementation of https://www.w3.org/TR/IndexedDB-3/#key-type\nfunction type(x: any) {\n const t = typeof x;\n if (t !== 'object') return t;\n if (ArrayBuffer.isView(x)) return 'binary';\n const tsTag = toStringTag(x); // Cannot use instanceof in Safari\n return tsTag === 'ArrayBuffer' ? 'binary' : (tsTag as 'Array' | 'Date');\n}\n\ntype BinaryType =\n | ArrayBuffer\n | DataView\n | Uint8ClampedArray\n | ArrayBufferView\n | Uint8Array\n | Int8Array\n | Uint16Array\n | Int16Array\n | Uint32Array\n | Int32Array\n | Float32Array\n | Float64Array\n | BigInt64Array \n | BigUint64Array;\n\nfunction getUint8Array(a: BinaryType): Uint8Array {\n if (a instanceof Uint8Array) return a;\n if (ArrayBuffer.isView(a))\n // TypedArray or DataView\n return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return new Uint8Array(a); // ArrayBuffer\n}\n","import { BulkError, exceptions } from '../../errors';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { DexiePromise as Promise, PSD, newScope, rejection, beginMicroTickScope, endMicroTickScope } from '../../helpers/promise';\nimport { Transaction } from '../transaction';\nimport { Dexie } from '../dexie';\nimport { tempTransaction } from '../../functions/temp-transaction';\nimport { Collection } from '../collection';\nimport { isArray, keys, getByKeyPath, setByKeyPath, extend, getProto } from '../../functions/utils';\nimport { maxString } from '../../globals/constants';\nimport { combine } from '../../functions/combine';\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { IndexableType } from '../../public/types/indexable-type';\nimport { debug } from '../../helpers/debug';\nimport { DBCoreTable } from '../../public/types/dbcore';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { workaroundForUndefinedPrimKey } from '../../functions/workaround-undefined-primkey';\nimport { Entity } from '../entity/Entity';\nimport { UpdateSpec } from '../../public';\nimport { cmp } from '../../functions/cmp';\n\n/** class Table\n * \n * https://dexie.org/docs/Table/Table\n */\nexport class Table implements ITable {\n db: Dexie;\n _tx?: Transaction;\n name: string;\n schema: TableSchema;\n hook: TableHooks;\n core: DBCoreTable;\n\n _trans(\n mode: IDBTransactionMode,\n fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike | void,\n writeLocked?: boolean | string) : PromiseExtended\n {\n const trans: Transaction = this._tx || PSD.trans;\n const tableName = this.name;\n // @ts-ignore: Use Chrome's Async Stack Tagging API to allow tracing and simplify debugging for dexie users.\n const task = debug && typeof console !== 'undefined' && console.createTask && console.createTask(`Dexie: ${mode === 'readonly' ? 'read' : 'write' } ${this.name}`);\n \n function checkTableInTransaction(resolve, reject, trans: Transaction) {\n if (!trans.schema[tableName])\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n return fn(trans.idbtrans, trans) as Promise;\n }\n // Surround all in a microtick scope.\n // Reason: Browsers (modern Safari + older others)\n // still as of 2018-10-10 has problems keeping a transaction\n // alive between micro ticks. Safari because if transaction\n // is created but not used in same microtick, it will go\n // away. That specific issue could be solved in DBCore\n // by opening the transaction just before using it instead.\n // But older Firefoxes and IE11 (with Promise polyfills)\n // will still have probs.\n // The beginMicrotickScope()/endMicrotickScope() works\n // in cooperation with Dexie.Promise to orchestrate\n // the micro-ticks in endMicrotickScope() rather than\n // in native engine.\n const wasRootExec = beginMicroTickScope();\n try {\n let p = trans && trans.db._novip === this.db._novip ?\n trans === PSD.trans ?\n trans._promise(mode, checkTableInTransaction, writeLocked) :\n newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) :\n tempTransaction(this.db, mode, [this.name], checkTableInTransaction);\n if (task) { // Dexie.debug = true so we trace errors\n p._consoleTask = task;\n p = p.catch(err => {\n console.trace(err);\n return rejection(err);\n });\n }\n return p; \n } finally {\n if (wasRootExec) endMicroTickScope();\n }\n }\n\n /** Table.get()\n * \n * https://dexie.org/docs/Table/Table.get()\n * \n **/\n get(keyOrCrit, cb?) {\n if (keyOrCrit && keyOrCrit.constructor === Object)\n return this.where(keyOrCrit as { [key: string]: IndexableType }).first(cb);\n if (keyOrCrit == null) return rejection(new exceptions.Type(`Invalid argument to Table.get()`));\n\n return this._trans('readonly', (trans) => {\n return this.core.get({trans, key: keyOrCrit})\n .then(res => this.hook.reading.fire(res));\n }).then(cb);\n }\n\n /** Table.where()\n * \n * https://dexie.org/docs/Table/Table.where()\n * \n **/\n where(indexOrCrit: string | string[] | { [key: string]: IndexableType }) {\n if (typeof indexOrCrit === 'string')\n return new this.db.WhereClause(this, indexOrCrit);\n if (isArray(indexOrCrit))\n return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`);\n // indexOrCrit is an object map of {[keyPath]:value} \n const keyPaths = keys(indexOrCrit);\n if (keyPaths.length === 1)\n // Only one critera. This was the easy case:\n return this\n .where(keyPaths[0])\n .equals(indexOrCrit[keyPaths[0]]);\n\n // Multiple criterias.\n // Let's try finding a compound index that matches all keyPaths in\n // arbritary order:\n const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => {\n if (\n ix.compound &&\n keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0)) {\n for (let i=0; i a.keyPath.length - b.keyPath.length)[0];\n \n if (compoundIndex && this.db._maxKey !== maxString) {\n // Cool! We found such compound index\n // and this browser supports compound indexes (maxKey !== maxString)!\n const keyPathsInValidOrder = (compoundIndex.keyPath as string[]).slice(0, keyPaths.length);\n return this\n .where(keyPathsInValidOrder)\n .equals(keyPathsInValidOrder.map(kp => indexOrCrit[kp]));\n }\n\n if (!compoundIndex && debug) console.warn(\n `The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit from a ` +\n `compound index [${keyPaths.join('+')}]`);\n\n // Ok, now let's fallback to finding at least one matching index\n // and filter the rest.\n const { idxByName } = this.schema;\n const idb = this.db._deps.indexedDB;\n\n function equals (a, b) {\n return idb.cmp(a,b) === 0; // Works with all indexable types including binary keys.\n }\n\n const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => {\n const index = idxByName[keyPath];\n const value = indexOrCrit[keyPath];\n return [\n prevIndex || index, // idx::=Pick index of first matching keypath\n prevIndex || !index ? // filter::=null if not needed, otherwise combine function filter\n combine(\n prevFilterFn,\n index && index.multi ?\n x => {\n const prop = getByKeyPath(x, keyPath);\n return isArray(prop) && prop.some(item => equals(value, item));\n } : x => equals(value, getByKeyPath(x, keyPath)))\n : prevFilterFn\n ];\n }, [null, null]);\n\n return idx ?\n this.where(idx.name).equals(indexOrCrit[idx.keyPath])\n .filter(filterFunction) :\n compoundIndex ?\n this.filter(filterFunction) : // Has compound but browser bad. Allow filter.\n this.where(keyPaths).equals(''); // No index at all. Fail lazily with \"[a+b+c] is not indexed\"\n }\n\n /** Table.filter()\n * \n * https://dexie.org/docs/Table/Table.filter()\n * \n **/\n filter(filterFunction: (obj: any) => boolean) {\n return this.toCollection().and(filterFunction);\n }\n\n /** Table.count()\n * \n * https://dexie.org/docs/Table/Table.count()\n * \n **/\n count(thenShortcut?: any) {\n return this.toCollection().count(thenShortcut);\n }\n\n /** Table.offset()\n * \n * https://dexie.org/docs/Table/Table.offset()\n * \n **/\n offset(offset: number) {\n return this.toCollection().offset(offset);\n }\n\n /** Table.limit()\n * \n * https://dexie.org/docs/Table/Table.limit()\n * \n **/\n limit(numRows: number) {\n return this.toCollection().limit(numRows);\n }\n\n /** Table.each()\n * \n * https://dexie.org/docs/Table/Table.each()\n * \n **/\n each(callback: (obj: any, cursor: { key: IndexableType, primaryKey: IndexableType }) => any) {\n return this.toCollection().each(callback);\n }\n\n /** Table.toArray()\n * \n * https://dexie.org/docs/Table/Table.toArray()\n * \n **/\n toArray(thenShortcut?: any) {\n return this.toCollection().toArray(thenShortcut);\n }\n\n /** Table.toCollection()\n * \n * https://dexie.org/docs/Table/Table.toCollection()\n * \n **/\n toCollection() {\n return new this.db.Collection(new this.db.WhereClause(this));\n }\n\n /** Table.orderBy()\n * \n * https://dexie.org/docs/Table/Table.orderBy()\n * \n **/\n orderBy(index: string | string[]) {\n return new this.db.Collection(\n new this.db.WhereClause(this, isArray(index) ?\n `[${index.join('+')}]` :\n index));\n }\n\n /** Table.reverse()\n * \n * https://dexie.org/docs/Table/Table.reverse()\n * \n **/\n reverse(): Collection {\n return this.toCollection().reverse();\n }\n\n /** Table.mapToClass()\n * \n * https://dexie.org/docs/Table/Table.mapToClass()\n * \n **/\n mapToClass(constructor: Function) {\n const {db, name: tableName} = this;\n this.schema.mappedClass = constructor;\n if (constructor.prototype instanceof Entity) {\n constructor = class extends (constructor as any) {\n get db () { return db; }\n table() { return tableName; }\n }\n }\n // Collect all inherited property names (including method names) by\n // walking the prototype chain. This is to avoid overwriting them from\n // database data - so application code can rely on inherited props never\n // becoming shadowed by database object props.\n const inheritedProps = new Set();\n for (let proto = constructor.prototype; proto; proto = getProto(proto)) {\n Object.getOwnPropertyNames(proto).forEach(propName => inheritedProps.add(propName));\n }\n \n // Now, subscribe to the when(\"reading\") event to make all objects that come out from this table inherit from given class\n // no matter which method to use for reading (Table.get() or Table.where(...)... )\n const readHook = (obj: Object) => {\n if (!obj) return obj; // No valid object. (Value is null or undefined). Return as is.\n // Create a new object that derives from constructor:\n const res = Object.create(constructor.prototype);\n // Clone members (but never those that collide with a property in the prototype\n // hierchary (MUST BE ABLE TO RELY ON Entity methods and props!)):\n for (let m in obj) if (!inheritedProps.has(m)) try { res[m] = obj[m]; } catch (_) { }\n return res;\n };\n\n if (this.schema.readHook) {\n this.hook.reading.unsubscribe(this.schema.readHook);\n }\n this.schema.readHook = readHook;\n this.hook(\"reading\", readHook);\n return constructor;\n }\n\n /** @deprecated */\n defineClass() {\n function Class (content){\n extend(this, content);\n };\n return this.mapToClass(Class);\n }\n\n /** Table.add()\n * \n * https://dexie.org/docs/Table/Table.add()\n * \n **/\n add(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd]});\n }).then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.update()\n * \n * https://dexie.org/docs/Table/Table.update()\n * \n **/\n update(keyOrObject, modifications: { [keyPath: string]: any; } | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n if (key === undefined) return rejection(new exceptions.InvalidArgument(\n \"Given object does not contain its primary key\"));\n /*// object to modify. Also modify given object with the modifications:\n // This part should be here for backward compatibility.\n // If ever feeling too bad about mutating given object, please wait to a new major before removing it,\n // and document the change thoroughly. TODO: Document this change!\n if (!Object.isFrozen(keyOrObject)) try {\n if (typeof modifications !== \"function\") {\n keys(modifications).forEach(keyPath => {\n setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n });\n } else {\n // Now since we support function argument, we should have a similar behavior here as well\n // (as long as we do this mutability stuff on the given object)\n modifications(keyOrObject, {value: keyOrObject, primKey: key});\n }\n } catch {\n // Maybe given object was frozen.\n // This part is not essential. Just move on as nothing happened...\n }*/\n return this.where(\":id\").equals(key).modify(modifications);\n } else {\n // key to modify\n return this.where(\":id\").equals(keyOrObject).modify(modifications);\n }\n }\n\n /** Table.put()\n * \n * https://dexie.org/docs/Table/Table.put()\n * \n **/\n put(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans(\n 'readwrite',\n trans => this.core.mutate({trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.delete()\n * \n * https://dexie.org/docs/Table/Table.delete()\n * \n **/\n delete(key: IndexableType): PromiseExtended {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'delete', keys: [key]}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.clear()\n * \n * https://dexie.org/docs/Table/Table.clear()\n * \n **/\n clear() {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'deleteRange', range: AnyRange}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.bulkGet()\n * \n * https://dexie.org/docs/Table/Table.bulkGet()\n * \n * @param keys \n */\n bulkGet(keys: IndexableType[]) {\n return this._trans('readonly', trans => {\n return this.core.getMany({\n keys,\n trans\n }).then(result => result.map(res => this.hook.reading.fire(res)));\n });\n }\n\n /** Table.bulkAdd()\n * \n * https://dexie.org/docs/Table/Table.bulkAdd()\n * \n **/\n bulkAdd(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToAdd = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate(\n {trans, type: 'add', keys: keys as IndexableType[], values: objectsToAdd, wantResults}\n )\n .then(({numFailures, results,lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkPut()\n * \n * https://dexie.org/docs/Table/Table.bulkPut()\n * \n **/\n bulkPut(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToPut = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n\n return this.core.mutate(\n {trans, type: 'put', keys: keys as IndexableType[], values: objectsToPut, wantResults}\n )\n .then(({numFailures, results, lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkUpdate()\n *\n * https://dexie.org/docs/Table.Table.bulkUpdate()\n */\n bulkUpdate(\n keysAndChanges: readonly { key: any; changes: UpdateSpec }[]\n ): PromiseExtended {\n const coreTable = this.core;\n const keys = keysAndChanges.map((entry) => entry.key);\n const changeSpecs = keysAndChanges.map((entry) => entry.changes);\n const offsetMap: number[] = [];\n return this._trans('readwrite', (trans) => {\n return coreTable.getMany({ trans, keys, cache: 'clone' }).then((objs) => {\n const resultKeys: any[] = [];\n const resultObjs: any[] = [];\n keysAndChanges.forEach(({ key, changes }, idx) => {\n const obj = objs[idx];\n if (obj) {\n for (const keyPath of Object.keys(changes)) {\n const value = changes[keyPath];\n if (keyPath === this.schema.primKey.keyPath) {\n if (cmp(value, key) !== 0) {\n throw new exceptions.Constraint(\n `Cannot update primary key in bulkUpdate()`\n );\n }\n } else {\n setByKeyPath(obj, keyPath, value);\n }\n }\n offsetMap.push(idx);\n resultKeys.push(key);\n resultObjs.push(obj);\n }\n });\n const numEntries = resultKeys.length;\n return coreTable\n .mutate({\n trans,\n type: 'put',\n keys: resultKeys,\n values: resultObjs,\n updates: {\n keys,\n changeSpecs\n }\n })\n .then(({ numFailures, failures }) => {\n if (numFailures === 0) return numEntries;\n // Failure. bulkPut() may have a subset of keys\n // so we must translate returned 'failutes' into the offsets of given argument:\n for (const offset of Object.keys(failures)) {\n const mappedOffset = offsetMap[Number(offset)];\n if (mappedOffset != null) {\n const failure = failures[offset];\n delete failures[offset];\n failures[mappedOffset] = failure;\n }\n }\n throw new BulkError(\n `${this.name}.bulkUpdate(): ${numFailures} of ${numEntries} operations failed`,\n failures\n );\n });\n });\n });\n }\n\n /** Table.bulkDelete()\n * \n * https://dexie.org/docs/Table/Table.bulkDelete()\n * \n **/\n bulkDelete(keys: ReadonlyArray): PromiseExtended {\n const numKeys = keys.length;\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'delete', keys: keys as IndexableType[]});\n }).then(({numFailures, lastResult, failures}) => {\n if (numFailures === 0) return lastResult;\n throw new BulkError(\n `${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures);\n });\n }\n}\n","import {keys, isArray, asap} from '../functions/utils';\nimport {nop, mirror, reverseStoppableEventChain} from '../functions/chaining-functions';\nimport {exceptions} from '../errors';\n\nexport default function Events(ctx) {\n var evs = {};\n var rv = function (eventName, subscriber) {\n if (subscriber) {\n // Subscribe. If additional arguments than just the subscriber was provided, forward them as well.\n var i = arguments.length, args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n evs[eventName].subscribe.apply(null, args);\n return ctx;\n } else if (typeof (eventName) === 'string') {\n // Return interface allowing to fire or unsubscribe from event\n return evs[eventName];\n }\n };\n rv.addEventType = add;\n \n for (var i = 1, l = arguments.length; i < l; ++i) {\n add(arguments[i]);\n }\n \n return rv;\n\n function add(eventName, chainFunction, defaultFunction) {\n if (typeof eventName === 'object') return addConfiguredEvents(eventName);\n if (!chainFunction) chainFunction = reverseStoppableEventChain;\n if (!defaultFunction) defaultFunction = nop;\n\n var context = {\n subscribers: [],\n fire: defaultFunction,\n subscribe: function (cb) {\n if (context.subscribers.indexOf(cb) === -1) {\n context.subscribers.push(cb);\n context.fire = chainFunction(context.fire, cb);\n }\n },\n unsubscribe: function (cb) {\n context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });\n context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n }\n };\n evs[eventName] = rv[eventName] = context;\n return context;\n }\n\n function addConfiguredEvents(cfg) {\n // events(this, {reading: [functionChain, nop]});\n keys(cfg).forEach(function (eventName) {\n var args = cfg[eventName];\n if (isArray(args)) {\n add(eventName, cfg[eventName][0], cfg[eventName][1]);\n } else if (args === 'asap') {\n // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack\n // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten.\n var context = add(eventName, mirror, function fire() {\n // Optimazation-safe cloning of arguments into args.\n var i = arguments.length, args = new Array(i);\n while (i--) args[i] = arguments[i];\n // All each subscriber:\n context.subscribers.forEach(function (fn) {\n asap(function fireEvent() {\n fn.apply(null, args);\n });\n });\n });\n } else throw new exceptions.InvalidArgument(\"Invalid event config\");\n });\n }\n}\n","import { arrayToObject, derive } from './utils';\n\n\nexport function makeClassConstructor (prototype: Object, constructor: Function) {\n /*const propertyDescriptorMap = arrayToObject(\n Object.getOwnPropertyNames(prototype),\n propKey => [propKey, Object.getOwnPropertyDescriptor(prototype, propKey)]);\n\n // Both derive and clone the prototype.\n // derive: So that x instanceof T returns true when T is the class template.\n // clone: Optimizes method access a bit (but actually not nescessary)\n const derivedPrototypeClone = Object.create(prototype, propertyDescriptorMap);\n derivedPrototypeClone.constructor = constructor;\n constructor.prototype = derivedPrototypeClone;\n return constructor as any as TConstructor;*/\n\n // Keep the above code in case we want to clone AND derive the parent prototype.\n // Reason would be optimization of property access.\n // The code below will only create a prototypal inheritance from given constructor function\n // to given prototype.\n derive(constructor).from({prototype});\n return constructor as any as TConstructor; \n}\n","import { Dexie } from '../dexie';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { Transaction } from '../transaction/transaction';\nimport { hookCreatingChain, pureFunctionChain, nop, mirror, hookUpdatingChain, hookDeletingChain } from '../../functions/chaining-functions';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { Table } from './table';\nimport Events from '../../helpers/Events';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\n\nexport interface TableConstructor {\n new (name: string, tableSchema: TableSchema, optionalTrans?: Transaction) : Table;\n prototype: Table;\n}\n\n/** Generates a Table constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTableConstructor (db: Dexie) {\n return makeClassConstructor(\n Table.prototype,\n\n function Table (this: Table, name: string, tableSchema: TableSchema, trans?: Transaction) {\n this.db = db;\n this._tx = trans;\n this.name = name;\n this.schema = tableSchema;\n this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {\n \"creating\": [hookCreatingChain, nop],\n \"reading\": [pureFunctionChain, mirror],\n \"updating\": [hookUpdatingChain, nop],\n \"deleting\": [hookDeletingChain, nop]\n }) as TableHooks;\n }\n\n );\n}\n","import { combine } from \"../../functions/combine\";\nimport { exceptions } from \"../../errors\";\nimport { hasOwn } from \"../../functions/utils\";\nimport { wrap } from \"../../helpers/promise\";\nimport { Collection } from './';\nimport { DBCoreCursor, DBCoreTable, DBCoreTransaction, DBCoreTableSchema, DBCoreRangeType } from '../../public/types/dbcore';\nimport { nop } from '../../functions/chaining-functions';\n\ntype CollectionContext = Collection[\"_ctx\"];\n\nexport function isPlainKeyRange (ctx: CollectionContext, ignoreLimitFilter?: boolean) {\n return !(ctx.filter || ctx.algorithm || ctx.or) &&\n (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n} \n\nexport function addFilter(ctx: CollectionContext, fn: Function) {\n ctx.filter = combine(ctx.filter, fn);\n}\n\nexport function addReplayFilter (ctx: CollectionContext, factory, isLimitFilter?) {\n var curr = ctx.replayFilter;\n ctx.replayFilter = curr ? ()=>combine(curr(), factory()) : factory;\n ctx.justLimit = isLimitFilter && !curr;\n}\n\nexport function addMatchFilter(ctx: CollectionContext, fn) {\n ctx.isMatch = combine(ctx.isMatch, fn);\n}\n\nexport function getIndexOrStore(ctx: CollectionContext, coreSchema: DBCoreTableSchema) {\n // TODO: Rewrite this. No need to know ctx.isPrimKey. ctx.index should hold the keypath.\n // Still, throw if not found!\n if (ctx.isPrimKey) return coreSchema.primaryKey;\n const index = coreSchema.getIndexByKeyPath(ctx.index);\n if (!index) throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + coreSchema.name + \" is not indexed\");\n return index;\n}\n\nexport function openCursor(ctx: CollectionContext, coreTable: DBCoreTable, trans: DBCoreTransaction) {\n const index = getIndexOrStore(ctx, coreTable.schema);\n return coreTable.openCursor({\n trans,\n values: !ctx.keysOnly,\n reverse: ctx.dir === 'prev',\n unique: !!ctx.unique,\n query: {\n index, \n range: ctx.range\n }\n });\n}\n\nexport function iter (\n ctx: CollectionContext, \n fn: (item, cursor: DBCoreCursor, advance: Function)=>void,\n coreTrans: DBCoreTransaction,\n coreTable: DBCoreTable): Promise\n{\n const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n if (!ctx.or) {\n return iterate(\n openCursor(ctx, coreTable, coreTrans),\n combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);\n } else {\n const set = {};\n\n const union = (item: any, cursor: DBCoreCursor, advance) => {\n if (!filter || filter(cursor, advance, result=>cursor.stop(result), err => cursor.fail(err))) {\n var primaryKey = cursor.primaryKey;\n var key = '' + primaryKey;\n if (key === '[object ArrayBuffer]') key = '' + new Uint8Array(primaryKey);\n if (!hasOwn(set, key)) {\n set[key] = true;\n fn(item, cursor, advance);\n }\n }\n }\n\n return Promise.all([\n ctx.or._iterate(union, coreTrans),\n iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)\n ]);\n }\n}\n\nfunction iterate(cursorPromise: Promise, filter, fn, valueMapper): Promise {\n \n // Apply valueMapper (hook('reading') or mappped class)\n var mappedFn = valueMapper ? (x,c,a) => fn(valueMapper(x),c,a) : fn;\n // Wrap fn with PSD and microtick stuff from Promise.\n var wrappedFn = wrap(mappedFn);\n \n return cursorPromise.then(cursor => {\n if (cursor) {\n return cursor.start(()=>{\n var c = ()=>cursor.continue();\n if (!filter || filter(cursor, advancer => c = advancer, val=>{cursor.stop(val);c=nop}, e => {cursor.fail(e);c = nop;}))\n wrappedFn(cursor.value, cursor, advancer => c = advancer);\n c();\n });\n }\n });\n}\n","import { isArray } from \"../functions/utils\";\nimport { PropModSpec } from \"../public/types/prop-modification\";\n\nexport const PropModSymbol: unique symbol = Symbol();\n\n/** Consistent change propagation across offline synced data.\n * \n * This class is executed client- and server side on sync, making\n * an operation consistent across sync for full consistency and accuracy.\n * \n * Example: An object represents a bank account with a balance.\n * One offline user adds $ 1.00 to the balance.\n * Another user (online) adds $ 2.00 to the balance.\n * When first user syncs, the balance becomes the sum of every operation (3.00).\n * \n * -- initial: balance is 0\n * 1. db.bankAccounts.update(1, { balance: new ProdModification({add: 100})}) // user 1 (offline)\n * 2. db.bankAccounts.update(1, { balance: new ProdModification({add: 200})}) // user 2 (online)\n * -- before user 1 syncs, balance is 200 (representing money with integers * 100 to avoid rounding issues)\n * \n * -- balance is 300\n * \n * When new operations are added, they need to be added to:\n * 1. PropModSpec interface\n * 2. Here in PropModification with the logic they represent\n * 3. (Optionally) a sugar function for it, such as const mathAdd = (amount: number | BigInt) => new PropModification({mathAdd: amount})\n */\nexport class PropModification implements PropModSpec {\n [PropModSymbol]?: true;\n replacePrefix?: [string, string];\n add?: number | BigInt | Array;\n remove?: number | BigInt | Array;\n\n execute(value: any): any {\n // add (mathematical or set-wise)\n if (this.add !== undefined) {\n const term = this.add;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(term)) {\n return [...(isArray(value) ? value : []), ...term].sort();\n }\n // Mathematical addition:\n if (typeof term === 'number') return (Number(value) || 0) + term; // if value is not convertible to number, return 0 + term\n if (typeof term === 'bigint') {\n try {\n return BigInt(value) + term;\n } catch {\n return BigInt(0) + term; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid term ${term}`);\n }\n\n // remove (mathematical or set-wise)\n if (this.remove !== undefined) {\n const subtrahend = this.remove;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(subtrahend)) {\n return isArray(value) ? value.filter(item => !subtrahend.includes(item)).sort() : [];\n } \n // Mathematical addition:\n if (typeof subtrahend === 'number') return Number(value) - subtrahend;\n if (typeof subtrahend === 'bigint') {\n try {\n return BigInt(value) - subtrahend;\n } catch {\n return BigInt(0) - subtrahend; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid subtrahend ${subtrahend}`);\n }\n\n // Replace a prefix:\n const prefixToReplace = this.replacePrefix?.[0];\n if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) {\n return this.replacePrefix[1] + value.substring(prefixToReplace.length);\n }\n return value;\n }\n\n constructor(spec: PropModSpec) {\n Object.assign(this, spec);\n }\n}\n","import { Collection as ICollection } from \"../../public/types/collection\";\nimport { Dexie } from \"../dexie\";\nimport { Table } from \"../table\";\nimport { IndexableType, IndexableTypeArrayReadonly } from \"../../public/types/indexable-type\";\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { iter, isPlainKeyRange, getIndexOrStore, addReplayFilter, addFilter, addMatchFilter } from \"./collection-helpers\";\nimport { rejection } from \"../../helpers/promise\";\nimport { combine } from \"../../functions/combine\";\nimport { extend, hasOwn, deepClone, keys, setByKeyPath, getByKeyPath } from \"../../functions/utils\";\nimport { ModifyError } from \"../../errors\";\nimport { ThenShortcut } from \"../../public/types/then-shortcut\";\nimport { Transaction } from '../transaction';\nimport { DBCoreCursor, DBCoreTransaction, DBCoreRangeType, DBCoreMutateResponse, DBCoreKeyRange } from '../../public/types/dbcore';\nimport { cmp } from \"../../functions/cmp\";\nimport { PropModification } from \"../../helpers/prop-modification\";\nimport { UpdateSpec } from \"../../public/types/update-spec\";\n\n/** class Collection\n * \n * https://dexie.org/docs/Collection/Collection\n */\nexport class Collection implements ICollection {\n db: Dexie;\n _ctx: {\n table: Table;\n index?: string | null;\n isPrimKey?: boolean;\n range: DBCoreKeyRange;\n keysOnly: boolean;\n dir: \"next\" | \"prev\";\n unique: \"\" | \"unique\";\n algorithm?: Function | null;\n filter?: Function | null;\n replayFilter: Function | null;\n justLimit: boolean; // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: Function | null;\n offset: number,\n limit: number,\n error: any, // If set, any promise must be rejected with this error\n or: Collection,\n valueMapper: (any) => any\n }\n \n _ondirectionchange?: Function;\n\n _read(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike, cb?): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readonly', fn).then(cb);\n }\n\n _write(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readwrite', fn, \"locked\"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued.\n }\n\n _addAlgorithm(fn) {\n var ctx = this._ctx;\n ctx.algorithm = combine(ctx.algorithm, fn);\n }\n\n _iterate(\n fn: (item, cursor: DBCoreCursor, advance: Function) => void,\n coreTrans: DBCoreTransaction) : Promise\n {\n return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n }\n\n /** Collection.clone()\n * \n * https://dexie.org/docs/Collection/Collection.clone()\n * \n **/\n clone(props?): this {\n var rv = Object.create(this.constructor.prototype),\n ctx = Object.create(this._ctx);\n if (props) extend(ctx, props);\n rv._ctx = ctx;\n return rv;\n }\n\n /** Collection.raw()\n * \n * https://dexie.org/docs/Collection/Collection.raw()\n * \n **/\n raw(): this {\n this._ctx.valueMapper = null;\n return this;\n }\n\n /** Collection.each()\n * \n * https://dexie.org/docs/Collection/Collection.each()\n * \n **/\n each(fn: (obj, cursor: DBCoreCursor) => any): PromiseExtended {\n var ctx = this._ctx;\n\n return this._read(trans => iter(ctx, fn, trans, ctx.table.core));\n }\n\n /** Collection.count()\n * \n * https://dexie.org/docs/Collection/Collection.count()\n * \n **/\n count(cb?) {\n return this._read(trans => {\n const ctx = this._ctx;\n const coreTable = ctx.table.core;\n if (isPlainKeyRange(ctx, true)) {\n // This is a plain key range. We can use the count() method if the index.\n return coreTable.count({\n trans,\n query: {\n index: getIndexOrStore(ctx, coreTable.schema),\n range: ctx.range\n }\n }).then(count => Math.min(count, ctx.limit));\n } else {\n // Algorithms, filters or expressions are applied. Need to count manually.\n var count = 0;\n return iter(ctx, () => { ++count; return false; }, trans, coreTable)\n .then(()=>count);\n }\n }).then(cb);\n }\n\n /** Collection.sortBy()\n * \n * https://dexie.org/docs/Collection/Collection.sortBy()\n * \n **/\n sortBy(keyPath: string): PromiseExtended;\n sortBy(keyPath: string, thenShortcut: ThenShortcut) : PromiseExtended;\n sortBy(keyPath: string, cb?: ThenShortcut) {\n const parts = keyPath.split('.').reverse(),\n lastPart = parts[0],\n lastIndex = parts.length - 1;\n function getval(obj, i) {\n if (i) return getval(obj[parts[i]], i - 1);\n return obj[lastPart];\n }\n var order = this._ctx.dir === \"next\" ? 1 : -1;\n\n function sorter(a, b) {\n var aVal = getval(a, lastIndex),\n bVal = getval(b, lastIndex);\n return aVal < bVal ? -order : aVal > bVal ? order : 0;\n }\n return this.toArray(function (a) {\n return a.sort(sorter);\n }).then(cb);\n }\n\n /** Collection.toArray()\n * \n * https://dexie.org/docs/Collection/Collection.toArray()\n * \n **/\n toArray(cb?): PromiseExtended {\n return this._read(trans => {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAll() or\n // IDBKeyRange.getAll():\n const {valueMapper} = ctx;\n const index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n limit: ctx.limit,\n values: true,\n query: {\n index,\n range: ctx.range\n }\n }).then(({result}) => valueMapper ? result.map(valueMapper) : result);\n } else {\n // Getting array through a cursor.\n const a = [];\n return iter(ctx, item => a.push(item), trans, ctx.table.core).then(()=>a);\n }\n }, cb);\n }\n\n /** Collection.offset()\n * \n * https://dexie.org/docs/Collection/Collection.offset()\n * \n **/\n offset(offset: number) : Collection{\n var ctx = this._ctx;\n if (offset <= 0) return this;\n ctx.offset += offset; // For count()\n if (isPlainKeyRange(ctx)) {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return (cursor, advance) => {\n if (offsetLeft === 0) return true;\n if (offsetLeft === 1) { --offsetLeft; return false; }\n advance(() => {\n cursor.advance(offsetLeft);\n offsetLeft = 0;\n });\n return false;\n };\n });\n } else {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return () => (--offsetLeft < 0);\n });\n }\n return this;\n }\n\n /** Collection.limit()\n * \n * https://dexie.org/docs/Collection/Collection.limit()\n * \n **/\n limit(numRows: number) : Collection {\n this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count()\n addReplayFilter(this._ctx, () => {\n var rowsLeft = numRows;\n return function (cursor, advance, resolve) {\n if (--rowsLeft <= 0) advance(resolve); // Stop after this item has been included\n return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here.\n };\n }, true);\n return this;\n }\n\n /** Collection.until()\n * \n * https://dexie.org/docs/Collection/Collection.until()\n * \n **/\n until(filterFunction: (x) => boolean, bIncludeStopEntry?) {\n addFilter(this._ctx, function (cursor, advance, resolve) {\n if (filterFunction(cursor.value)) {\n advance(resolve);\n return bIncludeStopEntry;\n } else {\n return true;\n }\n });\n return this;\n }\n\n /** Collection.first()\n * \n * https://dexie.org/docs/Collection/Collection.first()\n * \n **/\n first(cb?) {\n return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.last()\n * \n * https://dexie.org/docs/Collection/Collection.last()\n * \n **/\n last(cb?) {\n return this.reverse().first(cb);\n }\n\n /** Collection.filter()\n * \n * https://dexie.org/docs/Collection/Collection.filter()\n * \n **/\n filter(filterFunction: (x) => boolean): Collection {\n /// function(val){return true/false}\n addFilter(this._ctx, function (cursor) {\n return filterFunction(cursor.value);\n });\n // match filters not used in Dexie.js but can be used by 3rd part libraries to test a\n // collection for a match without querying DB. Used by Dexie.Observable.\n addMatchFilter(this._ctx, filterFunction);\n return this;\n }\n\n /** Collection.and()\n * \n * https://dexie.org/docs/Collection/Collection.and()\n * \n **/\n and(filter: (x) => boolean) {\n return this.filter(filter);\n }\n\n /** Collection.or()\n * \n * https://dexie.org/docs/Collection/Collection.or()\n * \n **/\n or(indexName: string) {\n return new this.db.WhereClause(this._ctx.table, indexName, this);\n }\n\n /** Collection.reverse()\n * \n * https://dexie.org/docs/Collection/Collection.reverse()\n * \n **/\n reverse() {\n this._ctx.dir = (this._ctx.dir === \"prev\" ? \"next\" : \"prev\");\n if (this._ondirectionchange) this._ondirectionchange(this._ctx.dir);\n return this;\n }\n\n /** Collection.desc()\n * \n * https://dexie.org/docs/Collection/Collection.desc()\n * \n **/\n desc() {\n return this.reverse();\n }\n\n /** Collection.eachKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachKey()\n * \n **/\n eachKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n }\n\n /** Collection.eachUniqueKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachUniqueKey()\n * \n **/\n eachUniqueKey(cb?) {\n this._ctx.unique = \"unique\";\n return this.eachKey(cb);\n }\n\n /** Collection.eachPrimaryKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachPrimaryKey()\n * \n **/\n eachPrimaryKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n }\n\n /** Collection.keys()\n * \n * https://dexie.org/docs/Collection/Collection.keys()\n * \n **/\n keys(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.key);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.primaryKeys()\n * \n * https://dexie.org/docs/Collection/Collection.primaryKeys()\n * \n **/\n primaryKeys(cb?) : PromiseExtended {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAllKeys() or\n // IDBKeyRange.getAllKeys():\n return this._read(trans => {\n var index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n values: false,\n limit: ctx.limit,\n query: {\n index,\n range: ctx.range\n }});\n }).then(({result})=>result).then(cb);\n }\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.primaryKey);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.uniqueKeys()\n * \n * https://dexie.org/docs/Collection/Collection.uniqueKeys()\n * \n **/\n uniqueKeys(cb?) {\n this._ctx.unique = \"unique\";\n return this.keys(cb);\n }\n\n /** Collection.firstKey()\n * \n * https://dexie.org/docs/Collection/Collection.firstKey()\n * \n **/\n firstKey(cb?) {\n return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.lastKey()\n * \n * https://dexie.org/docs/Collection/Collection.lastKey()\n * \n **/\n lastKey(cb?) {\n return this.reverse().firstKey(cb);\n }\n\n /** Collection.distinct()\n * \n * https://dexie.org/docs/Collection/Collection.distinct()\n * \n **/\n distinct() {\n var ctx = this._ctx,\n idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n if (!idx || !idx.multi) return this; // distinct() only makes differencies on multiEntry indexes.\n var set = {};\n addFilter(this._ctx, function (cursor: DBCoreCursor) {\n var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string\n var found = hasOwn(set, strKey);\n set[strKey] = true;\n return !found;\n });\n return this;\n }\n\n //\n // Methods that mutate storage\n //\n\n /** Collection.modify()\n * \n * https://dexie.org/docs/Collection/Collection.modify()\n * \n **/\n modify(changes: UpdateSpec | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n var ctx = this._ctx;\n return this._write(trans => {\n var modifyer: (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean\n if (typeof changes === 'function') {\n // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item)\n modifyer = changes as (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean;\n } else {\n // changes is a set of {keyPath: value} and no one is listening to the updating hook.\n var keyPaths = keys(changes);\n var numKeys = keyPaths.length;\n modifyer = function (item) {\n let anythingModified = false;\n for (let i = 0; i < numKeys; ++i) {\n let keyPath = keyPaths[i];\n let val = changes[keyPath];\n let origVal = getByKeyPath(item, keyPath);\n\n if (val instanceof PropModification) {\n setByKeyPath(item, keyPath, val.execute(origVal));\n anythingModified = true;\n } else if (origVal !== val) {\n setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n anythingModified = true;\n }\n }\n return anythingModified;\n };\n }\n\n const coreTable = ctx.table.core;\n const {outbound, extractKey} = coreTable.schema.primaryKey;\n const limit = this.db._options.modifyChunkSize || 200;\n const totalFailures = [];\n let successCount = 0;\n const failedKeys: IndexableType[] = [];\n const applyMutateResult = (expectedCount: number, res: DBCoreMutateResponse) => {\n const {failures, numFailures} = res;\n successCount += expectedCount - numFailures;\n for (let pos of keys(failures)) {\n totalFailures.push(failures[pos]);\n }\n }\n return this.clone().primaryKeys().then(keys => {\n const criteria = isPlainKeyRange(ctx) &&\n ctx.limit === Infinity &&\n (typeof changes !== 'function' || changes === deleteCallback) && {\n index: ctx.index,\n range: ctx.range\n };\n\n const nextChunk = (offset: number) => {\n const count = Math.min(limit, keys.length - offset);\n return coreTable.getMany({\n trans,\n keys: keys.slice(offset, offset + count),\n cache: \"immutable\" // Optimize for 2 things:\n // 1) observability-middleware can track changes better.\n // 2) hooks middleware don't have to query the existing values again when tracking changes.\n // We can use \"immutable\" because we promise to not touch the values we retrieve here!\n }).then(values => {\n const addValues = [];\n const putValues = [];\n const putKeys = outbound ? [] : null;\n const deleteKeys = [];\n for (let i=0; i 0 &&\n coreTable.mutate({trans, type: 'add', values: addValues})\n .then(res => {\n for (let pos in res.failures) {\n // Remove from deleteKeys the key of the object that failed to change its primary key\n deleteKeys.splice(parseInt(pos), 1);\n }\n applyMutateResult(addValues.length, res);\n })\n ).then(()=>(putValues.length > 0 || (criteria && typeof changes === 'object')) &&\n coreTable.mutate({\n trans,\n type: 'put',\n keys: putKeys,\n values: putValues,\n criteria,\n changeSpec: typeof changes !== 'function'\n && changes,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(putValues.length, res))\n ).then(()=>(deleteKeys.length > 0 || (criteria && changes === deleteCallback)) &&\n coreTable.mutate({\n trans,\n type: 'delete',\n keys: deleteKeys,\n criteria,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(deleteKeys.length, res))\n ).then(()=>{\n return keys.length > offset + count && nextChunk(offset + limit);\n });\n });\n }\n\n return nextChunk(0).then(()=>{\n if (totalFailures.length > 0)\n throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys as IndexableTypeArrayReadonly);\n\n return keys.length;\n });\n });\n\n });\n }\n\n /** Collection.delete()\n * \n * https://dexie.org/docs/Collection/Collection.delete()\n * \n **/\n delete() : PromiseExtended {\n var ctx = this._ctx,\n range = ctx.range;\n //deletingHook = ctx.table.hook.deleting.fire,\n //hasDeleteHook = deletingHook !== nop;\n if (isPlainKeyRange(ctx) &&\n (ctx.isPrimKey || range.type === DBCoreRangeType.Any)) // if no range, we'll use clear().\n {\n // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208)\n // For chromium, this is the way most optimized version.\n // For IE/Edge, this could hang the indexedDB engine and make operating system instable\n // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7)\n return this._write(trans => {\n // Our API contract is to return a count of deleted items, so we have to count() before delete().\n const {primaryKey} = ctx.table.core.schema;\n const coreRange = range;\n return ctx.table.core.count({trans, query: {index: primaryKey, range: coreRange}}).then(count => {\n return ctx.table.core.mutate({trans, type: 'deleteRange', range: coreRange})\n .then(({failures, lastResult, results, numFailures}) => {\n if (numFailures) throw new ModifyError(\"Could not delete some values\",\n Object.keys(failures).map(pos => failures[pos]),\n count - numFailures);\n return count - numFailures;\n });\n });\n });\n }\n\n return this.modify(deleteCallback);\n }\n}\n\nconst deleteCallback = (value, ctx) => ctx.value = null;\n","import { Dexie } from '../../classes/dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Collection } from './collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\nimport { mirror } from '../../functions/chaining-functions';\n\n/** Constructs a Collection instance. */\nexport interface CollectionConstructor {\n new(whereClause?: WhereClause | null, keyRangeGenerator?: () => DBCoreKeyRange): Collection;\n prototype: Collection;\n}\n\n/** Generates a Collection constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createCollectionConstructor(db: Dexie) {\n return makeClassConstructor(\n Collection.prototype,\n\n function Collection(\n this: Collection,\n whereClause?: WhereClause | null,\n keyRangeGenerator?: () => DBCoreKeyRange)\n {\n this.db = db;\n let keyRange = AnyRange, error = null;\n if (keyRangeGenerator) try {\n keyRange = keyRangeGenerator();\n } catch (ex) {\n error = ex;\n }\n\n const whereCtx = whereClause._ctx;\n const table = whereCtx.table;\n const readingHook = table.hook.reading.fire;\n this._ctx = {\n table: table,\n index: whereCtx.index,\n isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),\n range: keyRange,\n keysOnly: false,\n dir: \"next\",\n unique: \"\",\n algorithm: null,\n filter: null,\n replayFilter: null,\n justLimit: true, // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: null,\n offset: 0,\n limit: Infinity,\n error: error, // If set, any promise must be rejected with this error\n or: whereCtx.or,\n valueMapper: readingHook !== mirror ? readingHook : null\n };\n }\n );\n}\n","import { IndexableType } from '../public/types/indexable-type';\n\nexport function simpleCompare(a, b) {\n return a < b ? -1 : a === b ? 0 : 1;\n}\n\nexport function simpleCompareReverse(a, b) {\n return a > b ? -1 : a === b ? 0 : 1;\n}\n","import { WhereClause } from './where-clause';\nimport { Collection } from '../collection';\nimport { STRING_EXPECTED } from '../../globals/constants';\nimport { simpleCompare, simpleCompareReverse } from '../../functions/compare-functions';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange, DBCoreRangeType } from '../../public/types/dbcore';\n\nexport function fail(collectionOrWhereClause: Collection | WhereClause, err, T?) {\n var collection = collectionOrWhereClause instanceof WhereClause ?\n new collectionOrWhereClause.Collection (collectionOrWhereClause) :\n collectionOrWhereClause;\n \n collection._ctx.error = T ? new T(err) : new TypeError(err);\n return collection;\n}\n\nexport function emptyCollection(whereClause: WhereClause) {\n return new whereClause.Collection (whereClause, () => rangeEqual(\"\")).limit(0);\n}\n\nexport function upperFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toUpperCase() :\n (s: string) => s.toLowerCase();\n}\n\nexport function lowerFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toLowerCase() :\n (s: string) => s.toUpperCase();\n}\n\nexport function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n var length = Math.min(key.length, lowerNeedle.length);\n var llp = -1;\n for (var i = 0; i < length; ++i) {\n var lwrKeyChar = lowerKey[i];\n if (lwrKeyChar !== lowerNeedle[i]) {\n if (cmp(key[i], upperNeedle[i]) < 0) return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n if (cmp(key[i], lowerNeedle[i]) < 0) return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n if (llp >= 0) return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n return null;\n }\n if (cmp(key[i], lwrKeyChar) < 0) llp = i;\n }\n if (length < lowerNeedle.length && dir === \"next\") return key + upperNeedle.substr(key.length);\n if (length < key.length && dir === \"prev\") return key.substr(0, upperNeedle.length);\n return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));\n}\n\nexport function addIgnoreCaseAlgorithm(whereClause: WhereClause, match, needles, suffix) {\n /// \n var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix,\n needlesLen = needles.length;\n if (!needles.every(s => typeof s === 'string')) {\n return fail(whereClause, STRING_EXPECTED);\n }\n function initDirection(dir) {\n upper = upperFactory(dir);\n lower = lowerFactory(dir);\n compare = (dir === \"next\" ? simpleCompare : simpleCompareReverse);\n var needleBounds = needles.map(function (needle){\n return {lower: lower(needle), upper: upper(needle)};\n }).sort(function(a,b) {\n return compare(a.lower, b.lower);\n });\n upperNeedles = needleBounds.map(function (nb){ return nb.upper; });\n lowerNeedles = needleBounds.map(function (nb){ return nb.lower; });\n direction = dir;\n nextKeySuffix = (dir === \"next\" ? \"\" : suffix);\n }\n initDirection(\"next\");\n\n var c = new whereClause.Collection (\n whereClause,\n ()=>createRange(upperNeedles[0], lowerNeedles[needlesLen-1] + suffix)\n );\n\n c._ondirectionchange = function (direction) {\n // This event onlys occur before filter is called the first time.\n initDirection(direction);\n };\n\n var firstPossibleNeedle = 0;\n\n c._addAlgorithm(function (cursor, advance, resolve) {\n /// \n /// \n /// \n var key = cursor.key;\n if (typeof key !== 'string') return false;\n var lowerKey = lower(key);\n if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n return true;\n } else {\n var lowestPossibleCasing = null;\n for (var i=firstPossibleNeedle; i 0) {\n lowestPossibleCasing = casing;\n }\n }\n if (lowestPossibleCasing !== null) {\n advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });\n } else {\n advance(resolve);\n }\n return false;\n }\n });\n return c;\n}\n\nexport function createRange (lower: IndexableType, upper: IndexableType, lowerOpen?: boolean, upperOpen?: boolean): DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Range,\n lower,\n upper,\n lowerOpen,\n upperOpen\n };\n}\n\nexport function rangeEqual (value: IndexableType) : DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Equal,\n lower: value,\n upper: value\n };\n}\n","import { WhereClause as IWhereClause } from \"../../public/types/where-clause\";\nimport { Collection } from \"../collection\";\nimport { Table } from \"../table\";\nimport { IndexableType } from \"../../public/types/indexable-type\";\nimport { emptyCollection, fail, addIgnoreCaseAlgorithm, createRange, rangeEqual } from './where-clause-helpers';\nimport { INVALID_KEY_ARGUMENT, STRING_EXPECTED, maxString, minKey } from '../../globals/constants';\nimport { getArrayOf, NO_CHAR_ARRAY } from '../../functions/utils';\nimport { exceptions } from '../../errors';\nimport { Dexie } from '../dexie';\nimport { Collection as ICollection} from \"../../public/types/collection\";\n\n/** class WhereClause\n * \n * https://dexie.org/docs/WhereClause/WhereClause\n */\nexport class WhereClause implements IWhereClause {\n db: Dexie;\n _IDBKeyRange: typeof IDBKeyRange;\n _ctx: {\n table: Table;\n index: string;\n or: Collection;\n }\n _cmp: (a: IndexableType, b: IndexableType) => number;\n _ascending: (a: IndexableType, b: IndexableType) => number;\n _descending: (a: IndexableType, b: IndexableType) => number;\n _min: (a: IndexableType, b: IndexableType) => IndexableType;\n _max: (a: IndexableType, b: IndexableType) => IndexableType;\n\n get Collection() {\n return this._ctx.table.db.Collection;\n }\n\n /** WhereClause.between()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.between()\n * \n **/\n between(lower: IndexableType, upper: IndexableType, includeLower?: boolean, includeUpper?: boolean) {\n includeLower = includeLower !== false; // Default to true\n includeUpper = includeUpper === true; // Default to false\n try {\n if ((this._cmp(lower, upper) > 0) ||\n (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))\n return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection.\n return new this.Collection(this, ()=>createRange(lower, upper, !includeLower, !includeUpper));\n } catch (e) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n }\n\n /** WhereClause.equals()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equals()\n * \n **/\n equals(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => rangeEqual(value)) as ICollection;\n }\n\n /** WhereClause.above()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.above()\n * \n **/\n above(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, true));\n }\n\n /** WhereClause.aboveOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.aboveOrEqual()\n * \n **/\n aboveOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, false));\n }\n\n /** WhereClause.below()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.below()\n * \n **/\n below(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value, false, true));\n }\n\n /** WhereClause.belowOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.belowOrEqual()\n * \n **/\n belowOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value));\n }\n\n /** WhereClause.startsWith()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWith()\n * \n **/\n startsWith(str: string) {\n if (typeof str !== 'string') return fail(this, STRING_EXPECTED);\n return this.between(str, str + maxString, true, true);\n }\n\n /** WhereClause.startsWithIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithIgnoreCase()\n * \n **/\n startsWithIgnoreCase(str: string) {\n if (str === \"\") return this.startsWith(str);\n return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString);\n }\n\n /** WhereClause.equalsIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equalsIgnoreCase()\n * \n **/\n equalsIgnoreCase(str: string) {\n return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], \"\");\n }\n\n /** WhereClause.anyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOfIgnoreCase()\n * \n **/\n anyOfIgnoreCase(...values: string[]): Collection;\n anyOfIgnoreCase(values: string[]): Collection;\n anyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, \"\");\n }\n\n /** WhereClause.startsWithAnyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOfIgnoreCase()\n * \n **/\n startsWithAnyOfIgnoreCase(...values: string[]): Collection;\n startsWithAnyOfIgnoreCase(values: string[]): Collection;\n startsWithAnyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString);\n }\n\n /** WhereClause.anyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOf()\n * \n **/\n anyOf(...values: string[]): Collection;\n anyOf(values: string[]): Collection;\n anyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n let compare = this._cmp;\n try { set.sort(compare); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n if (set.length === 0) return emptyCollection(this);\n const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1]));\n\n c._ondirectionchange = direction => {\n compare = (direction === \"next\" ?\n this._ascending :\n this._descending);\n set.sort(compare);\n };\n\n let i = 0;\n c._addAlgorithm((cursor, advance, resolve) => {\n const key = cursor.key;\n while (compare(key, set[i]) > 0) {\n // The cursor has passed beyond this key. Check next.\n ++i;\n if (i === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (compare(key, set[i]) === 0) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => { cursor.continue(set[i]); });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.notEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.notEqual()\n * \n **/\n notEqual(value: IndexableType) {\n return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.noneOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.noneOf()\n * \n **/\n noneOf(...values: string[]): Collection;\n noneOf(values: string[]): Collection;\n noneOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return new this.Collection(this); // Return entire collection.\n try { set.sort(this._ascending); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n // Transform [\"a\",\"b\",\"c\"] to a set of ranges for between/above/below: [[minKey,\"a\"], [\"a\",\"b\"], [\"b\",\"c\"], [\"c\",maxKey]]\n const ranges = set.reduce(\n (res, val) => res ?\n res.concat([[res[res.length - 1][1], val]]) :\n [[minKey, val]],\n null);\n ranges.push([set[set.length - 1], this.db._maxKey]);\n return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.inAnyRange()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.inAnyRange()\n * \n **/\n inAnyRange(\n ranges: ReadonlyArray<{ 0: IndexableType, 1: IndexableType }>,\n options?: { includeLowers?: boolean, includeUppers?: boolean })\n {\n const cmp = this._cmp,\n ascending = this._ascending,\n descending = this._descending,\n min = this._min,\n max = this._max;\n\n if (ranges.length === 0) return emptyCollection(this);\n if (!ranges.every(range =>\n range[0] !== undefined &&\n range[1] !== undefined &&\n ascending(range[0], range[1]) <= 0)) {\n return fail(\n this,\n \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\",\n exceptions.InvalidArgument);\n }\n const includeLowers = !options || options.includeLowers !== false; // Default to true\n const includeUppers = options && options.includeUppers === true; // Default to false\n\n function addRange(ranges, newRange) {\n let i = 0, l = ranges.length;\n for (; i < l; ++i) {\n const range = ranges[i];\n if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n range[0] = min(range[0], newRange[0]);\n range[1] = max(range[1], newRange[1]);\n break;\n }\n }\n if (i === l)\n ranges.push(newRange);\n return ranges;\n }\n\n let sortDirection = ascending;\n function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n\n // Join overlapping ranges\n let set;\n try {\n set = ranges.reduce(addRange, []);\n set.sort(rangeSorter);\n } catch (ex) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n\n let rangePos = 0;\n const keyIsBeyondCurrentEntry = includeUppers ?\n key => ascending(key, set[rangePos][1]) > 0 :\n key => ascending(key, set[rangePos][1]) >= 0;\n\n const keyIsBeforeCurrentEntry = includeLowers ?\n key => descending(key, set[rangePos][0]) > 0 :\n key => descending(key, set[rangePos][0]) >= 0;\n\n function keyWithinCurrentRange(key) {\n return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n }\n\n let checkKey = keyIsBeyondCurrentEntry;\n\n const c = new this.Collection(\n this,\n () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers));\n\n c._ondirectionchange = direction => {\n if (direction === \"next\") {\n checkKey = keyIsBeyondCurrentEntry;\n sortDirection = ascending;\n } else {\n checkKey = keyIsBeforeCurrentEntry;\n sortDirection = descending;\n }\n set.sort(rangeSorter);\n };\n\n c._addAlgorithm((cursor, advance, resolve) => {\n var key = cursor.key;\n while (checkKey(key)) {\n // The cursor has passed beyond this key. Check next.\n ++rangePos;\n if (rangePos === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (keyWithinCurrentRange(key)) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) {\n // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border.\n // Continue to next key but don't include this one.\n return false;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => {\n if (sortDirection === ascending) cursor.continue(set[rangePos][0]);\n else cursor.continue(set[rangePos][1]);\n });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.startsWithAnyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOf()\n * \n **/\n startsWithAnyOf(...prefixes: string[]): Collection;\n startsWithAnyOf(prefixes: string[]): Collection;\n startsWithAnyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n\n if (!set.every(s => typeof s === 'string')) {\n return fail(this, \"startsWithAnyOf() only works with strings\");\n }\n if (set.length === 0) return emptyCollection(this);\n\n return this.inAnyRange(set.map((str: string) => [str, str + maxString]));\n }\n\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { WhereClause } from './where-clause';\nimport { Table } from '../table';\nimport { Collection } from '../collection';\nimport { exceptions } from '../../errors';\nimport { cmp } from '../../functions/cmp';\n\nexport interface WhereClauseConstructor {\n new(table: Table, index?: string, orCollection?: Collection): WhereClause;\n prototype: WhereClause;\n}\n\n/** Generates a WhereClause constructor.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createWhereClauseConstructor(db: Dexie) {\n return makeClassConstructor(\n WhereClause.prototype,\n\n function WhereClause(this: WhereClause, table: Table, index?: string, orCollection?: Collection) {\n this.db = db;\n this._ctx = {\n table: table,\n index: index === \":id\" ? null : index,\n or: orCollection\n };\n this._cmp = this._ascending = cmp;\n this._descending = (a, b) => cmp(b, a);\n this._max = (a, b) => cmp(a,b) > 0 ? a : b;\n this._min = (a, b) => cmp(a,b) < 0 ? a : b;\n this._IDBKeyRange = db._deps.IDBKeyRange;\n if (!this._IDBKeyRange) throw new exceptions.MissingAPI();\n }\n );\n}\n","import { wrap } from \"../helpers/promise\";\n\nexport function eventRejectHandler(reject) {\n return wrap(function (event) {\n preventDefault(event);\n reject (event.target.error);\n return false;\n });\n}\n\nexport function eventSuccessHandler (resolve) {\n return wrap(function (event){\n resolve(event.target.result);\n });\n}\n\nexport function hookedEventRejectHandler (reject) {\n return wrap(function (event) {\n // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks.\n \n var req = event.target,\n err = req.error,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n hookErrorHandler = ctx && ctx.onerror;\n hookErrorHandler && hookErrorHandler(err);\n preventDefault(event);\n reject (err);\n return false;\n });\n}\n\nexport function hookedEventSuccessHandler(resolve) {\n // wrap() is needed when calling hooks because the rare scenario of:\n // * hook does a db operation that fails immediately (IDB throws exception)\n // For calling db operations on correct transaction, wrap makes sure to set PSD correctly.\n // wrap() will also execute in a virtual tick.\n // * If not wrapped in a virtual tick, direct exception will launch a new physical tick.\n // * If this was the last event in the bulk, the promise will resolve after a physical tick\n // and the transaction will have committed already.\n // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise,\n // because it is always marked with _lib = true when created using Transaction._promise().\n return wrap(function(event) {\n var req = event.target,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key.\n hookSuccessHandler = ctx && ctx.onsuccess;\n hookSuccessHandler && hookSuccessHandler(result);\n resolve && resolve(result);\n }, resolve);\n}\n\n\nexport function preventDefault(event) {\n if (event.stopPropagation) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.stopPropagation();\n if (event.preventDefault) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.preventDefault();\n}\n\nexport function BulkErrorHandlerCatchAll(errorList, done?, supportHooks?) {\n return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(e => {\n errorList.push(e);\n done && done();\n });\n}\n\n","import Events from '../helpers/Events';\nimport { GlobalDexieEvents } from '../public/types/db-events';\n\nexport const DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated' as 'storagemutated';\n\n// Name of the global event fired using DOM dispatchEvent (if not in node).\n// Reason for propagating this as a DOM event is for getting reactivity across\n// multiple versions of Dexie within the same app (as long as they are\n// compatible with regards to the event data).\n// If the ObservabilitySet protocol change in a way that would not be backward\n// compatible, make sure also update the event name to a new number at the end\n// so that two Dexie instances of different versions continue to work together\n// - maybe not able to communicate but won't fail due to unexpected data in\n// the detail property of the CustomEvent. If so, also make sure to udpate\n// docs and explain at which Dexie version the new name and format of the event\n// is being used.\nexport const STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1';\n\nexport const globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME) as GlobalDexieEvents;\n","import { Transaction as ITransaction } from '../../public/types/transaction';\nimport { DexiePromise, wrap, rejection } from \"../../helpers/promise\";\nimport { DbSchema } from '../../public/types/db-schema';\nimport { assert, hasOwn } from '../../functions/utils';\nimport { PSD, usePSD } from '../../helpers/promise';\nimport { Dexie } from '../dexie';\nimport { exceptions } from '../../errors';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { preventDefault } from '../../functions/event-wrappers';\nimport { newScope } from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { Table } from '../table';\nimport { globalEvents } from '../../globals/global-events';\n\n/** Transaction\n * \n * https://dexie.org/docs/Transaction/Transaction\n * \n **/\nexport class Transaction implements ITransaction {\n db: Dexie;\n active: boolean;\n mode: IDBTransactionMode;\n chromeTransactionDurability: ChromeTransactionDurability;\n idbtrans: IDBTransaction;\n storeNames: string[];\n explicit?: boolean;\n on: any;\n parent?: Transaction;\n schema: DbSchema;\n _memoizedTables: {[tableName: string]: Table};\n\n _reculock: number;\n _blockedFuncs: { 0: () => any, 1: any }[];\n _resolve: () => void;\n _reject: (Error) => void;\n _waitingFor: DexiePromise; // for waitFor()\n _waitingQueue: Function[]; // for waitFor()\n _spinCount: number; // Just for debugging waitFor()\n _completion: DexiePromise;\n\n //\n // Transaction internal methods (not required by API users, but needed internally and eventually by dexie extensions)\n //\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _lock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n // Temporary set all requests into a pending queue if they are called before database is ready.\n ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage)\n if (this._reculock === 1 && !PSD.global) PSD.lockOwnerFor = this;\n return this;\n }\n\n /** Transaction._unlock()\n * \n * Internal method.\n */\n _unlock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n if (--this._reculock === 0) {\n if (!PSD.global) PSD.lockOwnerFor = null;\n while (this._blockedFuncs.length > 0 && !this._locked()) {\n var fnAndPSD = this._blockedFuncs.shift();\n try { usePSD(fnAndPSD[1], fnAndPSD[0]); } catch (e) { }\n }\n }\n return this;\n }\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _locked() {\n // Checks if any write-lock is applied on this transaction.\n // To simplify the Dexie API for extension implementations, we support recursive locks.\n // This is accomplished by using \"Promise Specific Data\" (PSD).\n // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ).\n // PSD is local to code executing on top of the call stacks of any of any code executed by Promise():\n // * callback given to the Promise() constructor (function (resolve, reject){...})\n // * callbacks given to then()/catch()/finally() methods (function (value){...})\n // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise.\n // Derivation is done so that the inner PSD __proto__ points to the outer PSD.\n // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock.\n return this._reculock && PSD.lockOwnerFor !== this;\n }\n\n /** Transaction.create()\n * \n * Internal method.\n * \n */\n create(idbtrans?: IDBTransaction & {[prop: string]: any}) {\n if (!this.mode) return this;\n const idbdb = this.db.idbdb;\n const dbOpenError = this.db._state.dbOpenError;\n assert(!this.idbtrans);\n if (!idbtrans && !idbdb) {\n switch (dbOpenError && dbOpenError.name) {\n case \"DatabaseClosedError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.DatabaseClosed(dbOpenError);\n case \"MissingAPIError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n default:\n // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()!\n throw new exceptions.OpenFailed(dbOpenError);\n }\n }\n if (!this.active) throw new exceptions.TransactionInactive();\n assert(this._completion._state === null); // Completion Promise must still be pending.\n\n idbtrans = this.idbtrans = idbtrans ||\n (this.db.core \n ? this.db.core.transaction(this.storeNames, this.mode as 'readwrite' | 'readonly', { durability: this.chromeTransactionDurability })\n : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })\n ) as IDBTransaction;\n\n idbtrans.onerror = wrap(ev => {\n preventDefault(ev);// Prohibit default bubbling to window.error\n this._reject(idbtrans.error);\n });\n idbtrans.onabort = wrap(ev => {\n preventDefault(ev);\n this.active && this._reject(new exceptions.Abort(idbtrans.error));\n this.active = false;\n this.on(\"abort\").fire(ev);\n });\n idbtrans.oncomplete = wrap(() => {\n this.active = false;\n this._resolve();\n if ('mutatedParts' in idbtrans) {\n globalEvents.storagemutated.fire(idbtrans[\"mutatedParts\"]);\n }\n });\n return this;\n }\n\n /** Transaction._promise()\n * \n * Internal method.\n */\n _promise(\n mode: IDBTransactionMode,\n fn: (resolve, reject, trans: Transaction) => PromiseLike | void,\n bWriteLock?: string | boolean): DexiePromise\n {\n if (mode === 'readwrite' && this.mode !== 'readwrite')\n return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n\n if (!this.active)\n return rejection(new exceptions.TransactionInactive());\n\n if (this._locked()) {\n return new DexiePromise((resolve, reject) => {\n this._blockedFuncs.push([() => {\n this._promise(mode, fn, bWriteLock).then(resolve, reject);\n }, PSD]);\n });\n\n } else if (bWriteLock) {\n return newScope(() => {\n var p = new DexiePromise((resolve, reject) => {\n this._lock();\n const rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p.finally(() => this._unlock());\n p._lib = true;\n return p;\n });\n\n } else {\n var p = new DexiePromise((resolve, reject) => {\n var rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p._lib = true;\n return p;\n }\n }\n\n /** Transaction._root()\n * \n * Internal method. Retrieves the root transaction in the tree of sub transactions.\n */\n _root() {\n return this.parent ? this.parent._root() : this;\n }\n\n /** Transaction.waitFor()\n * \n * Internal method. Can be accessed from the public API through\n * Dexie.waitFor(): https://dexie.org/docs/Dexie/Dexie.waitFor()\n * \n **/\n waitFor(promiseLike: PromiseLike) {\n // Always operate on the root transaction (in case this is a sub stransaction)\n var root = this._root();\n // For stability reasons, convert parameter to promise no matter what type is passed to waitFor().\n // (We must be able to call .then() on it.)\n const promise = DexiePromise.resolve(promiseLike);\n if (root._waitingFor) {\n // Already called waitFor(). Wait for both to complete.\n root._waitingFor = root._waitingFor.then(() => promise);\n } else {\n // We're not in waiting state. Start waiting state.\n root._waitingFor = promise;\n root._waitingQueue = [];\n // Start interacting with indexedDB until promise completes:\n var store = root.idbtrans.objectStore(root.storeNames[0]);\n (function spin() {\n ++root._spinCount; // For debugging only\n while (root._waitingQueue.length) (root._waitingQueue.shift())();\n if (root._waitingFor) store.get(-Infinity).onsuccess = spin;\n }());\n }\n var currentWaitPromise = root._waitingFor;\n return new DexiePromise((resolve, reject) => {\n promise.then(\n res => root._waitingQueue.push(wrap(resolve.bind(null, res))),\n err => root._waitingQueue.push(wrap(reject.bind(null, err)))\n ).finally(() => {\n if (root._waitingFor === currentWaitPromise) {\n // No one added a wait after us. Safe to stop the spinning.\n root._waitingFor = null;\n }\n });\n });\n } \n\n /** Transaction.abort()\n * \n * https://dexie.org/docs/Transaction/Transaction.abort()\n */\n abort() {\n if (this.active) {\n this.active = false;\n if (this.idbtrans) this.idbtrans.abort();\n this._reject(new exceptions.Abort());\n }\n }\n\n /** Transaction.table()\n * \n * https://dexie.org/docs/Transaction/Transaction.table()\n */\n table(tableName: string) {\n const memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n if (hasOwn(memoizedTables, tableName))\n return memoizedTables[tableName];\n const tableSchema = this.schema[tableName];\n if (!tableSchema) {\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\"); \n }\n\n const transactionBoundTable = new this.db.Table(tableName, tableSchema, this);\n transactionBoundTable.core = this.db.core.table(tableName);\n memoizedTables[tableName] = transactionBoundTable;\n return transactionBoundTable;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Transaction } from './transaction';\nimport { DbSchema } from '../../public/types/db-schema';\nimport Events from '../../helpers/Events';\nimport Promise, { rejection } from '../../helpers/promise';\n\nexport interface TransactionConstructor {\n new (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction) : T;\n prototype: T;\n}\n\n/** Generates a Transaction constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTransactionConstructor(db: Dexie) {\n return makeClassConstructor>(\n Transaction.prototype,\n function Transaction (\n this: Transaction,\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction)\n {\n this.db = db;\n this.mode = mode;\n this.storeNames = storeNames;\n this.schema = dbschema;\n this.chromeTransactionDurability = chromeTransactionDurability;\n this.idbtrans = null;\n this.on = Events(this, \"complete\", \"error\", \"abort\");\n this.parent = parent || null;\n this.active = true;\n this._reculock = 0;\n this._blockedFuncs = [];\n this._resolve = null;\n this._reject = null;\n this._waitingFor = null;\n this._waitingQueue = null;\n this._spinCount = 0; // Just for debugging waitFor()\n this._completion = new Promise ((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n \n this._completion.then(\n ()=> {\n this.active = false;\n this.on.complete.fire();\n },\n e => {\n var wasActive = this.active;\n this.active = false;\n this.on.error.fire(e);\n this.parent ?\n this.parent._reject(e) :\n wasActive && this.idbtrans && this.idbtrans.abort();\n return rejection(e); // Indicate we actually DO NOT catch this error.\n });\n \n });\n}\n","import { IndexSpec } from '../public/types/index-spec';\n\nexport function createIndexSpec(\n name: string,\n keyPath: string | string[],\n unique: boolean,\n multi: boolean,\n auto: boolean,\n compound: boolean,\n isPrimKey: boolean\n): IndexSpec {\n return {\n name,\n keyPath,\n unique,\n multi,\n auto,\n compound,\n src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + nameFromKeyPath(keyPath)\n }\n}\n\nexport function nameFromKeyPath (keyPath?: string | string[]): string {\n return typeof keyPath === 'string' ?\n keyPath :\n keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : \"\";\n}\n","import { IndexSpec } from '../public/types/index-spec';\nimport { TableSchema } from '../public/types/table-schema';\nimport { createIndexSpec } from './index-spec';\nimport { arrayToObject } from '../functions/utils';\n\nexport function createTableSchema (\n name: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n): TableSchema {\n return {\n name,\n primKey,\n indexes,\n mappedClass: null,\n idxByName: arrayToObject(indexes, index => [index.name, index])\n };\n}\n","import { maxString } from '../globals/constants';\n\nexport function safariMultiStoreFix(storeNames: string[]) {\n return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\n\nexport function getNativeGetDatabaseNamesFn(indexedDB) {\n var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n return fn && fn.bind(indexedDB);\n}\n\nexport let getMaxKey = (IdbKeyRange: typeof IDBKeyRange) => {\n try {\n IdbKeyRange.only([[]]);\n getMaxKey = () => [[]];\n return [[]];\n } catch (e) {\n getMaxKey = () => maxString;\n return maxString;\n }\n}\n","import { getByKeyPath } from '../functions/utils';\n\nexport function getKeyExtractor (keyPath: null | string | string[]) : (a: any) => any {\n if (keyPath == null) {\n return () => undefined;\n } else if (typeof keyPath === 'string') {\n return getSinglePathKeyExtractor(keyPath);\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n\nexport function getSinglePathKeyExtractor(keyPath: string) {\n const split = keyPath.split('.');\n if (split.length === 1) {\n return obj => obj[keyPath];\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n","import {\n DBCore,\n DBCoreCursor,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryResponse,\n DBCoreRangeType,\n DBCoreSchema,\n DBCoreTableSchema,\n DBCoreTable,\n DBCoreMutateResponse,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { eventRejectHandler, preventDefault } from '../functions/event-wrappers';\nimport { wrap } from '../helpers/promise';\nimport { getMaxKey } from '../functions/quirks';\nimport { getKeyExtractor } from './get-key-extractor';\n\nexport function arrayify(arrayLike: {length: number, [index: number]: T}): T[] {\n return [].slice.call(arrayLike);\n}\nexport function pick(obj: T, props: Prop[]): Pick {\n const result = {} as Pick;\n props.forEach(prop => result[prop] = obj[prop]);\n return result;\n}\n\nlet _id_counter = 0;\n\nexport function getKeyPathAlias(keyPath: null | string | string[]) {\n return keyPath == null ?\n \":id\" :\n typeof keyPath === 'string' ?\n keyPath :\n `[${keyPath.join('+')}]`;\n}\n\nexport function createDBCore (\n db: IDBDatabase,\n IdbKeyRange: typeof IDBKeyRange,\n tmpTrans: IDBTransaction) : DBCore\n{\n function extractSchema(db: IDBDatabase, trans: IDBTransaction) : {schema: DBCoreSchema, hasGetAll: boolean} {\n const tables = arrayify(db.objectStoreNames);\n return {\n schema: {\n name: db.name,\n tables: tables.map(table => trans.objectStore(table)).map(store => {\n const {keyPath, autoIncrement} = store;\n const compound = isArray(keyPath);\n const outbound = keyPath == null;\n const indexByKeyPath: {[keyPathAlias: string]: DBCoreIndex} = {};\n const result = {\n name: store.name,\n primaryKey: {\n name: null,\n isPrimaryKey: true,\n outbound,\n compound,\n keyPath,\n autoIncrement,\n unique: true,\n extractKey: getKeyExtractor(keyPath)\n } as DBCoreIndex,\n indexes: arrayify(store.indexNames).map(indexName => store.index(indexName))\n .map(index => {\n const {name, unique, multiEntry, keyPath} = index;\n const compound = isArray(keyPath);\n const result: DBCoreIndex = {\n name,\n compound,\n keyPath,\n unique,\n multiEntry,\n extractKey: getKeyExtractor(keyPath)\n };\n indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n return result;\n }),\n getIndexByKeyPath: (keyPath: null | string | string[]) => indexByKeyPath[getKeyPathAlias(keyPath)]\n };\n indexByKeyPath[\":id\"] = result.primaryKey;\n if (keyPath != null) {\n indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;\n }\n return result;\n })\n },\n hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&\n !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) // Bug with getAll() on Safari ver<604. See discussion following PR #579\n };\n }\n\n function makeIDBKeyRange (range: DBCoreKeyRange) : IDBKeyRange | null {\n if (range.type === DBCoreRangeType.Any) return null;\n if (range.type === DBCoreRangeType.Never) throw new Error(\"Cannot convert never type to IDBKeyRange\");\n const {lower, upper, lowerOpen, upperOpen} = range;\n const idbRange = lower === undefined ?\n upper === undefined ?\n null : //IDBKeyRange.lowerBound(-Infinity, false) : // Any range (TODO: Should we return null instead?)\n IdbKeyRange.upperBound(upper, !!upperOpen) : // below\n upper === undefined ?\n IdbKeyRange.lowerBound(lower, !!lowerOpen) : // above\n IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);\n return idbRange;\n }\n\n function createDbCoreTable(tableSchema: DBCoreTableSchema): DBCoreTable {\n const tableName = tableSchema.name;\n\n function mutate ({trans, type, keys, values, range}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const outbound = store.keyPath == null;\n const isAddOrPut = type === \"put\" || type === \"add\";\n if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n throw new Error (\"Invalid operation type: \" + type);\n\n const {length} = keys || values || {length: 1}; // keys.length if keys. values.length if values. 1 if range.\n if (keys && values && keys.length !== values.length) {\n throw new Error(\"Given keys array must have same length as given values array.\");\n }\n if (length === 0)\n // No items to write. Don't even bother!\n return resolve({numFailures: 0, failures: {}, results: [], lastResult: undefined});\n\n let req: IDBRequest;\n const reqs: IDBRequest[] = [];\n \n const failures: {[operationNumber: number]: Error} = [];\n let numFailures = 0;\n const errorHandler = \n event => {\n ++numFailures;\n preventDefault(event);\n };\n \n if (type === 'deleteRange') {\n // Here the argument is the range\n if (range.type === DBCoreRangeType.Never)\n return resolve({numFailures, failures, results: [], lastResult: undefined}); // Deleting the Never range shoulnt do anything.\n if (range.type === DBCoreRangeType.Any)\n reqs.push(req = store.clear()); // Deleting the Any range is equivalent to store.clear()\n else\n reqs.push(req = store.delete(makeIDBKeyRange(range)));\n } else {\n // No matter add, put or delete - find out arrays of first and second arguments to it.\n const [args1, args2] = isAddOrPut ?\n outbound ?\n [values, keys] :\n [values, null] :\n [keys, null];\n\n if (isAddOrPut) {\n for (let i=0; i {\n const lastResult = event.target.result;\n reqs.forEach((req, i) => req.error != null && (failures[i] = req.error));\n resolve({\n numFailures,\n failures,\n results: type === \"delete\" ? keys : reqs.map(req => req.result),\n lastResult\n });\n };\n \n req.onerror = event => { // wrap() not needed. All paths calling outside will wrap!\n errorHandler(event);\n done(event);\n };\n \n req.onsuccess = done;\n });\n }\n \n function openCursor ({trans, values, query, reverse, unique}: DBCoreOpenCursorRequest): Promise\n {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n // source\n const source = index.isPrimaryKey ?\n store :\n store.index(index.name);\n // direction\n const direction = reverse ?\n unique ?\n \"prevunique\" :\n \"prev\" :\n unique ?\n \"nextunique\" :\n \"next\";\n // request\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(makeIDBKeyRange(range), direction) :\n source.openKeyCursor(makeIDBKeyRange(range), direction);\n \n // iteration\n req.onerror = eventRejectHandler(reject);\n req.onsuccess = wrap(ev => {\n\n const cursor = req.result as unknown as DBCoreCursor;\n if (!cursor) {\n resolve(null);\n return;\n }\n (cursor as any).___id = ++_id_counter;\n (cursor as any).done = false;\n const _cursorContinue = cursor.continue.bind(cursor);\n let _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n if (_cursorContinuePrimaryKey) _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n const _cursorAdvance = cursor.advance.bind(cursor);\n const doThrowCursorIsNotStarted = ()=>{throw new Error(\"Cursor not started\");}\n const doThrowCursorIsStopped = ()=>{throw new Error(\"Cursor not stopped\");}\n (cursor as any).trans = trans;\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;\n cursor.fail = wrap(reject);\n cursor.next = function (this: DBCoreCursor) {\n // next() must work with \"this\" pointer in order to function correctly for ProxyCursors (derived objects)\n // without having to re-define next() on each child.\n let gotOne = 1;\n return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this);\n };\n cursor.start = (callback) => {\n //console.log(\"Starting cursor\", (cursor as any).___id);\n const iterationPromise = new Promise((resolveIteration, rejectIteration) =>{\n resolveIteration = wrap(resolveIteration);\n req.onerror = eventRejectHandler(rejectIteration);\n cursor.fail = rejectIteration;\n cursor.stop = value => {\n //console.log(\"Cursor stop\", cursor);\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n resolveIteration(value);\n };\n });\n // Now change req.onsuccess to a callback that doesn't call initCursor but just observer.next()\n const guardedCallback = () => {\n if (req.result) {\n //console.log(\"Next result\", cursor);\n try {\n callback();\n } catch (err) {\n cursor.fail(err);\n }\n } else {\n (cursor as any).done = true;\n cursor.start = ()=>{throw new Error(\"Cursor behind last entry\");}\n cursor.stop();\n }\n }\n req.onsuccess = wrap(ev => {\n //cursor.continue = _cursorContinue;\n //cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n //cursor.advance = _cursorAdvance;\n req.onsuccess = guardedCallback;\n guardedCallback();\n });\n cursor.continue = _cursorContinue;\n cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n cursor.advance = _cursorAdvance;\n guardedCallback();\n return iterationPromise;\n };\n resolve(cursor);\n }, reject); \n });\n }\n \n function query (hasGetAll: boolean) {\n return (request: DBCoreQueryRequest) => {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {trans, values, limit, query} = request;\n const nonInfinitLimit = limit === Infinity ? undefined : limit;\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n if (limit === 0) return resolve({result: []});\n if (hasGetAll) {\n const req = values ?\n (source as any).getAll(idbKeyRange, nonInfinitLimit) :\n (source as any).getAllKeys(idbKeyRange, nonInfinitLimit);\n req.onsuccess = event => resolve({result: event.target.result});\n req.onerror = eventRejectHandler(reject);\n } else {\n let count = 0;\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(idbKeyRange) :\n source.openKeyCursor(idbKeyRange)\n const result = [];\n req.onsuccess = event => {\n const cursor = req.result as IDBCursorWithValue;\n if (!cursor) return resolve({result});\n result.push(values ? cursor.value : cursor.primaryKey);\n if (++count === limit) return resolve({result});\n cursor.continue();\n };\n req.onerror = eventRejectHandler(reject);\n }\n });\n };\n }\n \n return {\n name: tableName,\n schema: tableSchema,\n \n mutate,\n\n getMany ({trans, keys}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const length = keys.length;\n const result = new Array(length);\n let keyCount = 0;\n let callbackCount = 0;\n let valueCount = 0;\n let req: IDBRequest & {_pos?: number};\n \n const successHandler = event => {\n const req = event.target;\n if ((result[req._pos] = req.result) != null) ++valueCount;\n if (++callbackCount === keyCount) resolve(result);\n };\n const errorHandler = eventRejectHandler(reject);\n \n for (let i=0; i((resolve, reject) => {\n resolve = wrap (resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const req = store.get(key);\n req.onsuccess = event => resolve((event.target as any).result);\n req.onerror = eventRejectHandler(reject);\n });\n },\n\n query: query(hasGetAll),\n \n openCursor,\n\n count ({query, trans}) {\n const {index, range} = query;\n return new Promise((resolve, reject) => {\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n const req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n req.onsuccess = wrap(ev => resolve((ev.target as IDBRequest).result));\n req.onerror = eventRejectHandler(reject);\n });\n }\n };\n }\n\n const {schema, hasGetAll} = extractSchema(db, tmpTrans);\n const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema));\n const tableMap: {[name: string]: DBCoreTable} = {};\n tables.forEach(table => tableMap[table.name] = table);\n return {\n stack: \"dbcore\",\n \n transaction: db.transaction.bind(db),\n\n table(name: string) {\n const result = tableMap[name];\n if (!result) throw new Error(`Table '${name}' not found`);\n return tableMap[name];\n },\n\n MIN_KEY: -Infinity,\n\n MAX_KEY: getMaxKey(IdbKeyRange),\n\n schema\n\n };\n}\n","import { Dexie } from './';\nimport { createDBCore } from '../../dbcore/dbcore-indexeddb';\nimport { DBCore } from '../../public/types/dbcore';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { DexieStacks, Middleware } from '../../public/types/middleware';\nimport { exceptions } from '../../errors';\n\nfunction createMiddlewareStack(\n stackImpl: {stack: string},\n middlewares: Middleware<{stack: string}>[]): TStack {\n return middlewares.reduce((down, {create}) => ({...down, ...create(down)}), stackImpl) as TStack;\n} \n\nfunction createMiddlewareStacks(\n middlewares: {[StackName in keyof DexieStacks]?: Middleware[]},\n idbdb: IDBDatabase,\n {IDBKeyRange, indexedDB}: DexieDOMDependencies,\n tmpTrans: IDBTransaction): {[StackName in keyof DexieStacks]?: DexieStacks[StackName]}\n{\n const dbcore = createMiddlewareStack(\n createDBCore(idbdb, IDBKeyRange, tmpTrans),\n middlewares.dbcore);\n \n // TODO: Create other stacks the same way as above. They might be dependant on the result\n // of creating dbcore stack.\n\n return {\n dbcore\n };\n}\n\nexport function generateMiddlewareStacks(db: Dexie, tmpTrans: IDBTransaction) {\n const idbdb = tmpTrans.db;\n const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n db.core = stacks.dbcore!;\n db.tables.forEach(table => {\n const tableName = table.name;\n if (db.core.schema.tables.some(tbl => tbl.name === tableName)) {\n table.core = db.core.table(tableName);\n if (db[tableName] instanceof db.Table) {\n db[tableName].core = table.core;\n }\n }\n });\n}\n","import { Dexie } from '../dexie';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { _global } from \"../../globals/global\";\nimport { setProp, keys, slice, isArray, shallowClone, isAsyncFunction, defineProperty, getPropertyDescriptor } from '../../functions/utils';\nimport { Transaction } from '../transaction';\nimport { Version } from './version';\nimport Promise, { PSD, newScope, NativePromise, decrementExpectedAwaits, incrementExpectedAwaits } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { IndexSpec } from '../../public/types/index-spec';\nimport { createIndexSpec, nameFromKeyPath } from '../../helpers/index-spec';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { generateMiddlewareStacks } from '../dexie/generate-middleware-stacks';\nimport { debug } from '../../helpers/debug';\nimport { PromiseExtended } from '../../public/types/promise-extended';\n\nexport function setApiOnPlace(db: Dexie, objs: Object[], tableNames: string[], dbschema: DbSchema) {\n tableNames.forEach(tableName => {\n const schema = dbschema[tableName];\n objs.forEach(obj => {\n const propDesc = getPropertyDescriptor(obj, tableName);\n if (!propDesc || (\"value\" in propDesc && propDesc.value === undefined)) {\n // Either the prop is not declared, or it is initialized to undefined.\n if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n // obj is a Transaction prototype (or prototype of a subclass to Transaction)\n // Make the API a getter that returns this.table(tableName)\n setProp(obj, tableName, {\n get(this: Transaction) { return this.table(tableName); },\n set(value: any) {\n // Issue #1039\n // Let \"this.schema = dbschema;\" and other props in transaction constructor work even if there's a name collision with the table name.\n defineProperty(this, tableName, {value, writable: true, configurable: true, enumerable: true});\n }\n });\n } else {\n // Table will not be bound to a transaction (will use Dexie.currentTransaction)\n obj[tableName] = new db.Table(tableName, schema);\n }\n }\n });\n });\n}\n\nexport function removeTablesApi(db: Dexie, objs: Object[]) {\n objs.forEach(obj => {\n for (let key in obj) {\n if (obj[key] instanceof db.Table) delete obj[key];\n }\n });\n}\n\nexport function lowerVersionFirst(a: Version, b: Version) {\n return a._cfg.version - b._cfg.version;\n}\n\nexport function runUpgraders(db: Dexie, oldVersion: number, idbUpgradeTrans: IDBTransaction, reject) {\n const globalSchema = db._dbSchema;\n if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) {\n globalSchema.$meta = createTableSchema(\"$meta\", parseIndexSyntax(\"\")[0], []);\n db._storeNames.push('$meta');\n }\n const trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n trans.create(idbUpgradeTrans);\n trans._completion.catch(reject);\n const rejectTransaction = trans._reject.bind(trans);\n const transless = PSD.transless || PSD;\n newScope(() => {\n PSD.trans = trans;\n PSD.transless = transless;\n if (oldVersion === 0) {\n // Create tables:\n keys(globalSchema).forEach(tableName => {\n createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n });\n generateMiddlewareStacks(db, idbUpgradeTrans);\n Promise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction);\n } else {\n generateMiddlewareStacks(db, idbUpgradeTrans);\n return getExistingVersion(db, trans, oldVersion)\n .then(oldVersion => updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans))\n .catch(rejectTransaction);\n }\n });\n}\n\nexport type UpgradeQueueItem = (idbtrans: IDBTransaction) => PromiseLike | void;\n\nexport function patchCurrentVersion(db: Dexie, idbUpgradeTrans: IDBTransaction) {\n createMissingTables(db._dbSchema, idbUpgradeTrans);\n if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) {\n // Rolled over to the next 10-ies due to many schema upgrades without bumping version.\n // No problem! We pin the database to its expected version by adding the $meta table so that next\n // time the programmer bumps the version and attaches, an upgrader, that upgrader will indeed run,\n // as well any further upgraders coming after that.\n idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version');\n }\n const globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans);\n const diff = getSchemaDiff(globalSchema, db._dbSchema);\n for (const tableChange of diff.change) {\n if (tableChange.change.length || tableChange.recreate) {\n console.warn(`Unable to patch indexes of table ${tableChange.name} because it has changes on the type of index or primary key.`);\n return;\n }\n const store = idbUpgradeTrans.objectStore(tableChange.name);\n tableChange.add.forEach(idx => {\n if (debug) console.debug(`Dexie upgrade patch: Creating missing index ${tableChange.name}.${idx.src}`);\n addIndex(store, idx);\n });\n }\n}\n\nfunction getExistingVersion(db: Dexie, trans: Transaction, oldVersion: number): PromiseExtended {\n // In normal case, existing version is the native installed version divided by 10.\n // However, in case more than 10 schema changes have been made on the same version (such as while\n // developing an app), the native version may have passed beyond a multiple of 10 within the same version.\n // When that happens, a table $meta will have been created, containing a single entry with key \"version\"\n // and the value of the real old version to use when running upgraders going forward.\n if (trans.storeNames.includes('$meta')) {\n return trans.table('$meta').get('version').then(metaVersion => {\n return metaVersion != null ? metaVersion : oldVersion\n })\n } else {\n return Promise.resolve(oldVersion);\n }\n}\n\nfunction updateTablesAndIndexes(\n db: Dexie,\n oldVersion: number,\n trans: Transaction,\n idbUpgradeTrans: IDBTransaction)\n{\n // Upgrade version to version, step-by-step from oldest to newest version.\n // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version)\n const queue: UpgradeQueueItem[] = [];\n const versions = db._versions;\n let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n let anyContentUpgraderHasRun = false;\n \n const versToRun = versions.filter(v => v._cfg.version >= oldVersion);\n if (versToRun.length === 0) {\n // Important not to continue at this point.\n // Coming here means we've already patched schema in patchCurrentVersion() after having\n // incremented native version to a value above the declared highest version.\n // When being in this mode, it means that there might be different versions the db competing\n // about it with different version of the schema. Therefore, we must avoid deleting tables\n // or indexes here so that both versions can co-exist until the application has been upgraded to\n // a version that declares no lower than the native version.\n // If after that, a downgrade happens again, we'll end up here again, accepting both versions\n // And we'll stay in this state until app developer releases a new declared version.\n return Promise.resolve(); \n }\n \n versToRun.forEach(version => {\n queue.push(() => {\n const oldSchema = globalSchema;\n const newSchema = version._cfg.dbschema;\n adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n\n globalSchema = db._dbSchema = newSchema;\n\n const diff = getSchemaDiff(oldSchema, newSchema);\n // Add tables \n diff.add.forEach(tuple => {\n createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n });\n // Change tables\n diff.change.forEach(change => {\n if (change.recreate) {\n throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n } else {\n const store = idbUpgradeTrans.objectStore(change.name);\n // Add indexes\n change.add.forEach(idx => addIndex(store, idx));\n // Update indexes\n change.change.forEach(idx => {\n store.deleteIndex(idx.name);\n addIndex(store, idx);\n });\n // Delete indexes\n change.del.forEach(idxName => store.deleteIndex(idxName));\n }\n });\n\n const contentUpgrade = version._cfg.contentUpgrade;\n\n if (contentUpgrade && version._cfg.version > oldVersion) {\n // Update db.core with new tables and indexes:\n generateMiddlewareStacks(db, idbUpgradeTrans);\n trans._memoizedTables = {}; // Invalidate memoization as transaction shape may change between versions.\n\n anyContentUpgraderHasRun = true;\n\n // Add to-be-deleted tables to contentUpgrade transaction\n let upgradeSchema = shallowClone(newSchema);\n diff.del.forEach(table => {\n upgradeSchema[table] = oldSchema[table];\n });\n\n // Safe to affect Transaction.prototype globally in this moment,\n // because when this code runs, there may not be any other code\n // that can access any transaction instance, else than this particular\n // upgrader function.\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema);\n trans.schema = upgradeSchema;\n\n // Support for native async await.\n const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade);\n if (contentUpgradeIsAsync) {\n incrementExpectedAwaits();\n }\n \n let returnValue: any;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = contentUpgrade(trans);\n if (returnValue) {\n if (contentUpgradeIsAsync) {\n // contentUpgrade is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n }\n }\n });\n return (returnValue && typeof returnValue.then === 'function' ?\n Promise.resolve(returnValue) : promiseFollowed.then(()=>returnValue));\n }\n });\n queue.push(idbtrans => {\n const newSchema = version._cfg.dbschema;\n // Delete old tables\n deleteRemovedTables(newSchema, idbtrans);\n // Restore the final API\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);\n trans.schema = db._dbSchema;\n });\n // Maintain the $meta table after this version's tables and indexes has been created and content upgraders have run.\n queue.push(idbtrans => {\n if (db.idbdb.objectStoreNames.contains('$meta')) {\n if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) {\n // Remove $meta table if it's no more needed - we are in line with the native version\n db.idbdb.deleteObjectStore('$meta');\n delete db._dbSchema.$meta;\n db._storeNames = db._storeNames.filter(name => name !== '$meta');\n } else {\n // We're still not in line with the native version. Make sure to update the virtual version\n // to the successfully run version\n idbtrans.objectStore('$meta').put(version._cfg.version, 'version');\n }\n }\n }); \n });\n\n // Now, create a queue execution engine\n function runQueue() {\n return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n Promise.resolve();\n }\n\n return runQueue().then(() => {\n createMissingTables(globalSchema, idbUpgradeTrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version)\n });\n}\n\nexport interface SchemaDiff {\n del: string[],\n add: [string, TableSchema][];\n change: TableSchemaDiff[];\n}\n\nexport interface TableSchemaDiff {\n name: string,\n recreate: boolean,\n del: string[],\n add: IndexSpec[],\n change: IndexSpec[]\n}\n\nexport function getSchemaDiff(oldSchema: DbSchema, newSchema: DbSchema): SchemaDiff {\n const diff: SchemaDiff = {\n del: [], // Array of table names\n add: [], // Array of [tableName, newDefinition]\n change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}\n };\n let table: string;\n for (table in oldSchema) {\n if (!newSchema[table]) diff.del.push(table);\n }\n for (table in newSchema) {\n const oldDef = oldSchema[table],\n newDef = newSchema[table];\n if (!oldDef) {\n diff.add.push([table, newDef]);\n } else {\n const change = {\n name: table,\n def: newDef,\n recreate: false,\n del: [],\n add: [],\n change: []\n };\n if (\n (\n // compare keyPaths no matter if string or string[]\n // compare falsy keypaths same no matter if they are null or empty string.\n ''+(oldDef.primKey.keyPath||'')\n ) !== (\n ''+(newDef.primKey.keyPath||'')\n ) ||\n // Compare the autoIncrement flag also\n (oldDef.primKey.auto !== newDef.primKey.auto))\n {\n // Primary key has changed. Remove and re-add table.\n change.recreate = true;\n diff.change.push(change);\n } else {\n // Same primary key. Just find out what differs:\n const oldIndexes = oldDef.idxByName;\n const newIndexes = newDef.idxByName;\n let idxName: string;\n for (idxName in oldIndexes) {\n if (!newIndexes[idxName]) change.del.push(idxName);\n }\n for (idxName in newIndexes) {\n const oldIdx = oldIndexes[idxName],\n newIdx = newIndexes[idxName];\n if (!oldIdx) change.add.push(newIdx);\n else if (oldIdx.src !== newIdx.src) change.change.push(newIdx);\n }\n if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n diff.change.push(change);\n }\n }\n }\n }\n return diff;\n}\n\nexport function createTable(\n idbtrans: IDBTransaction,\n tableName: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n) {\n const store = idbtrans.db.createObjectStore(\n tableName,\n primKey.keyPath ?\n { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n { autoIncrement: primKey.auto }\n );\n indexes.forEach(idx => addIndex(store, idx));\n return store;\n}\n\nexport function createMissingTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n keys(newSchema).forEach(tableName => {\n if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n if (debug) console.debug('Dexie: Creating missing table', tableName);\n createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n }\n });\n}\n\nexport function deleteRemovedTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName =>\n newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName));\n}\n\nexport function addIndex(store: IDBObjectStore, idx: IndexSpec) {\n store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\n\nfunction buildGlobalSchema(\n db: Dexie,\n idbdb: IDBDatabase,\n tmpTrans: IDBTransaction\n) {\n const globalSchema = {};\n const dbStoreNames = slice(idbdb.objectStoreNames, 0);\n dbStoreNames.forEach(storeName => {\n const store = tmpTrans.objectStore(storeName);\n let keyPath = store.keyPath;\n const primKey = createIndexSpec(\n nameFromKeyPath(keyPath),\n keyPath || \"\",\n true,\n false,\n !!store.autoIncrement,\n keyPath && typeof keyPath !== \"string\",\n true\n );\n const indexes: IndexSpec[] = [];\n for (let j = 0; j < store.indexNames.length; ++j) {\n const idbindex = store.index(store.indexNames[j]);\n keyPath = idbindex.keyPath;\n var index = createIndexSpec(\n idbindex.name,\n keyPath,\n !!idbindex.unique,\n !!idbindex.multiEntry,\n false,\n keyPath && typeof keyPath !== \"string\",\n false\n );\n indexes.push(index);\n }\n globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n });\n return globalSchema;\n}\n\nexport function readGlobalSchema(db: Dexie, idbdb: IDBDatabase, tmpTrans: IDBTransaction) {\n db.verno = idbdb.version / 10;\n const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);\n db._storeNames = slice(idbdb.objectStoreNames, 0);\n setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\n\nexport function verifyInstalledSchema(db: Dexie, tmpTrans: IDBTransaction): boolean {\n const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans);\n const diff = getSchemaDiff(installedSchema, db._dbSchema);\n return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length));\n}\n\nexport function adjustToExistingIndexNames(db: Dexie, schema: DbSchema, idbtrans: IDBTransaction) {\n // Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db\n const storeNames = idbtrans.db.objectStoreNames;\n\n for (let i = 0; i < storeNames.length; ++i) {\n const storeName = storeNames[i];\n const store = idbtrans.objectStore(storeName);\n db._hasGetAll = 'getAll' in store;\n\n for (let j = 0; j < store.indexNames.length; ++j) {\n const indexName = store.indexNames[j];\n const keyPath = store.index(indexName).keyPath;\n const dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n if (schema[storeName]) {\n const indexSpec = schema[storeName].idxByName[dexieName];\n if (indexSpec) {\n indexSpec.name = indexName;\n delete schema[storeName].idxByName[dexieName];\n schema[storeName].idxByName[indexName] = indexSpec;\n }\n }\n }\n }\n\n // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579\n if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604)\n {\n db._hasGetAll = false;\n }\n}\n\nexport function parseIndexSyntax(primKeyAndIndexes: string): IndexSpec[] {\n return primKeyAndIndexes.split(',').map((index, indexNum) => {\n index = index.trim();\n const name = index.replace(/([&*]|\\+\\+)/g, \"\"); // Remove \"&\", \"++\" and \"*\"\n // Let keyPath of \"[a+b]\" be [\"a\",\"b\"]:\n const keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n\n return createIndexSpec(\n name,\n keyPath || null,\n /\\&/.test(index),\n /\\*/.test(index),\n /\\+\\+/.test(index),\n isArray(keyPath),\n indexNum === 0\n );\n });\n}\n","import { Version as IVersion } from '../../public/types/version';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { extend, keys } from '../../functions/utils';\nimport { Dexie } from '../dexie';\nimport { Transaction } from '../transaction';\nimport { removeTablesApi, setApiOnPlace, parseIndexSyntax } from './schema-helpers';\nimport { exceptions } from '../../errors';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\n\n/** class Version\n *\n * https://dexie.org/docs/Version/Version\n */\nexport class Version implements IVersion {\n db: Dexie;\n _cfg: {\n version: number,\n storesSource: { [tableName: string]: string | null },\n dbschema: DbSchema,\n tables: {},\n contentUpgrade: Function | null\n }\n\n _parseStoresSpec(stores: { [tableName: string]: string | null }, outSchema: DbSchema): any {\n keys(stores).forEach(tableName => {\n if (stores[tableName] !== null) {\n var indexes = parseIndexSyntax(stores[tableName]);\n var primKey = indexes.shift();\n primKey.unique = true;\n if (primKey.multi) throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n indexes.forEach(idx => {\n if (idx.auto) throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n if (!idx.keyPath) throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n });\n outSchema[tableName] = createTableSchema(tableName, primKey, indexes);\n }\n });\n }\n\n stores(stores: { [key: string]: string | null; }): IVersion {\n const db = this.db;\n this._cfg.storesSource = this._cfg.storesSource ?\n extend(this._cfg.storesSource, stores) :\n stores;\n const versions = db._versions;\n\n // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax.\n const storesSpec: { [key: string]: string; } = {};\n let dbschema = {};\n versions.forEach(version => { // 'versions' is always sorted by lowest version first.\n extend(storesSpec, version._cfg.storesSource);\n dbschema = (version._cfg.dbschema = {});\n version._parseStoresSpec(storesSpec, dbschema);\n });\n // Update the latest schema to this version\n db._dbSchema = dbschema;\n // Update APIs\n removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);\n setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n db._storeNames = keys(dbschema);\n return this;\n }\n\n upgrade(upgradeFunction: (trans: Transaction) => PromiseLike | void): Version {\n this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction);\n return this;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Version } from './version';\n\nexport interface VersionConstructor {\n new(versionNumber: number): Version;\n prototype: Version;\n}\n\n/** Generates a Version constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createVersionConstructor(db: Dexie) {\n return makeClassConstructor(\n Version.prototype,\n\n function Version(this: Version, versionNumber: number) {\n this.db = db;\n this._cfg = {\n version: versionNumber,\n storesSource: null,\n dbschema: {},\n tables: {},\n contentUpgrade: null\n };\n });\n\n}\n","import { Dexie } from \"../classes/dexie/dexie\";\nimport { Table } from \"../public/types/table\";\nimport { DBNAMES_DB } from \"../globals/constants\";\nimport { DexieDOMDependencies } from \"../public/types/dexie-dom-dependencies\";\nimport { nop } from \"../functions/chaining-functions\";\n\ntype IDBKeyNamesVar = typeof IDBKeyRange;\n\nfunction getDbNamesTable(indexedDB: IDBFactory, IDBKeyRange: IDBKeyNamesVar) {\n let dbNamesDB = indexedDB[\"_dbNamesDB\"];\n if (!dbNamesDB) {\n dbNamesDB = indexedDB[\"_dbNamesDB\"] = new Dexie(DBNAMES_DB, {\n addons: [],\n indexedDB,\n IDBKeyRange,\n });\n dbNamesDB.version(1).stores({ dbnames: \"name\" });\n }\n return dbNamesDB.table(\"dbnames\") as Table<{ name: string }, string>;\n}\n\nfunction hasDatabasesNative(indexedDB: IDBFactory) {\n return indexedDB && typeof indexedDB.databases === \"function\";\n}\n\nexport function getDatabaseNames({\n indexedDB,\n IDBKeyRange,\n}: DexieDOMDependencies) {\n return hasDatabasesNative(indexedDB)\n ? Promise.resolve(indexedDB.databases()).then((infos) =>\n infos\n // Select name prop of infos:\n .map((info) => info.name)\n // Filter out DBNAMES_DB as previous Dexie or browser version would not have included it in the result.\n .filter((name) => name !== DBNAMES_DB)\n )\n : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys();\n}\n\nexport function _onDatabaseCreated(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).put({name}).catch(nop);\n}\n\nexport function _onDatabaseDeleted(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop);\n}\n","import { newScope } from '../../helpers/promise';\nimport { PSD } from '../../helpers/promise';\n\nexport function vip (fn) {\n // To be used by subscribers to the on('ready') event.\n // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing.\n // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD\n // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since\n // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that.\n // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip()\n // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by\n // the caller will not resolve until database is opened.\n return newScope(function () {\n PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing.\n return fn();\n });\n}\n\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import { cmp } from \"../functions/cmp\";\nimport { extend, iteratorSymbol, props } from '../functions/utils';\nimport { IndexableType } from '../public';\nimport {\n EmptyRange,\n IntervalTree,\n IntervalTreeNode,\n RangeSetConstructor,\n RangeSetPrototype,\n} from \"../public/types/rangeset\";\n\n/* An interval tree implementation to efficiently detect overlapping ranges of queried indexes.\n *\n * https://en.wikipedia.org/wiki/Interval_tree\n * \n */\n\nfunction isEmptyRange(node: IntervalTree | {from: IndexableType, to: IndexableType}): node is EmptyRange {\n return !(\"from\" in node);\n}\n\nexport type RangeSet = RangeSetPrototype & IntervalTree;\n\nexport const RangeSet = function(fromOrTree: any, to?: any) {\n if (this) {\n // Called with new()\n extend(this, arguments.length ? {d:1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree} : {d:0});\n } else {\n // Called without new()\n const rv = new RangeSet();\n if (fromOrTree && (\"d\" in fromOrTree)) {\n extend(rv, fromOrTree);\n }\n return rv;\n }\n} as RangeSetConstructor;\n\nprops(RangeSet.prototype, {\n add(rangeSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n mergeRanges(this, rangeSet);\n return this;\n },\n addKey(key: IndexableType) {\n addRange(this, key, key);\n return this;\n },\n addKeys(keys: IndexableType[]) {\n keys.forEach(key => addRange(this, key, key));\n return this;\n },\n\n [iteratorSymbol](): Iterator {\n return getRangeSetIterator(this);\n }\n});\n\nfunction addRange(target: IntervalTree, from: IndexableType, to: IndexableType) {\n const diff = cmp(from, to);\n // cmp() returns NaN if one of the args are IDB-invalid keys.\n // Avoid storing invalid keys in rangeset:\n if (isNaN(diff)) return;\n\n // Caller is trying to add a range where from is greater than to:\n if (diff > 0) throw RangeError();\n \n if (isEmptyRange(target)) return extend(target, { from, to, d: 1 });\n const left = target.l;\n const right = target.r;\n if (cmp(to, target.from) < 0) {\n left\n ? addRange(left, from, to)\n : (target.l = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.to) > 0) {\n right\n ? addRange(right, from, to)\n : (target.r = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n // Now we have some kind of overlap. We will be able to merge the new range into the node or let it be swallowed.\n\n // Grow left?\n if (cmp(from, target.from) < 0) {\n target.from = from;\n target.l = null; // Cut off for now. Re-add later.\n target.d = right ? right.d + 1 : 1;\n }\n // Grow right?\n if (cmp(to, target.to) > 0) {\n target.to = to;\n target.r = null; // Cut off for now. Re-add later.\n target.d = target.l ? target.l.d + 1 : 1;\n }\n const rightWasCutOff = !target.r;\n // Re-add left?\n if (left && !target.l) {\n //Ranges to the left may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, left);\n }\n // Re-add right?\n if (right && rightWasCutOff) {\n //Ranges to the right may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, right);\n }\n}\n\nexport function mergeRanges(target: IntervalTree, newSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n function _addRangeSet(\n target: IntervalTree,\n { from, to, l, r }: IntervalTreeNode | {from: IndexableType, to: IndexableType, l?: undefined, r?: undefined}\n ) {\n addRange(target, from, to);\n if (l) _addRangeSet(target, l);\n if (r) _addRangeSet(target, r);\n }\n\n if(!isEmptyRange(newSet)) _addRangeSet(target, newSet);\n}\n\nexport function rangesOverlap(\n rangeSet1: IntervalTree,\n rangeSet2: IntervalTree\n): boolean {\n // Start iterating other from scratch.\n const i1 = getRangeSetIterator(rangeSet2);\n let nextResult1 = i1.next();\n if (nextResult1.done) return false;\n let a = nextResult1.value;\n\n // Start iterating this from start of other\n const i2 = getRangeSetIterator(rangeSet1);\n let nextResult2 = i2.next(a.from); // Start from beginning of other range\n let b = nextResult2.value;\n\n while (!nextResult1.done && !nextResult2.done) {\n if (cmp(b!.from, a.to) <= 0 && cmp(b!.to, a.from) >= 0) return true;\n cmp(a.from, b!.from) < 0\n ? (a = (nextResult1 = i1.next(b!.from)).value!) // a is behind. forward it to beginning of next b-range\n : (b = (nextResult2 = i2.next(a.from)).value); // b is behind. forward it to beginning of next a-range\n }\n return false;\n}\n\ntype RangeSetIteratorState =\n | {\n up?: RangeSetIteratorState;\n n: IntervalTreeNode;\n s: 0 | 1 | 2 | 3;\n }\n | undefined\n | null;\nexport function getRangeSetIterator(\n node: EmptyRange | IntervalTreeNode\n): Generator {\n let state: RangeSetIteratorState = isEmptyRange(node) ? null : { s: 0, n: node };\n\n return {\n next(key?) {\n const keyProvided = arguments.length > 0;\n while (state) {\n switch (state.s) {\n case 0:\n // Initial state for node.\n // Fast forward to leftmost node.\n state.s = 1;\n if (keyProvided) {\n while (state.n.l && cmp(key, state.n.from) < 0)\n state = { up: state, n: state.n.l, s: 1 };\n } else {\n while (state.n.l) state = { up: state, n: state.n.l, s: 1 };\n }\n // intentionally fall into case 1:\n case 1:\n // We're on a node where it's left part is already handled or does not exist.\n state.s = 2;\n if (!keyProvided || cmp(key, state.n.to) <= 0)\n return { value: state.n, done: false };\n case 2:\n // We've emitted our node and should continue with the right part or let parent take over from it's state 1\n if (state.n.r) {\n state.s = 3; // So when child is done, we know we're done.\n state = { up: state, n: state.n.r, s: 0 };\n continue; // Will fall in to case 0 with fast forward to left leaf of this subtree.\n }\n // intentionally fall into case 3:\n case 3:\n state = state.up;\n }\n }\n return { done: true };\n },\n } as Generator;\n}\n\nfunction rebalance(target: IntervalTreeNode) {\n const diff = (target.r?.d || 0) - (target.l?.d || 0);\n const r = diff > 1 ? \"r\" : diff < -1 ? \"l\" : \"\";\n if (r) {\n\n // Rotate (https://en.wikipedia.org/wiki/Tree_rotation)\n //\n // \n // [OLDROOT]\n // [OLDROOT.L] [NEWROOT]\n // [NEWROOT.L] [NEWROOT.R]\n //\n // Is going to become:\n //\n // \n // [NEWROOT]\n // [OLDROOT] [NEWROOT.R]\n // [OLDROOT.L] [NEWROOT.L] \n\n // * clone now has the props of OLDROOT\n // Plan:\n // * target must be given the props of NEWROOT\n // * target[l] must point to a new OLDROOT\n // * target[r] must point to NEWROOT.R\n // * OLDROOT[r] must point to NEWROOT.L\n const l = r === \"r\" ? \"l\" : \"r\"; // Support both left/right rotation\n const rootClone = { ...target };\n // We're gonna copy props from target's right node into target so that target will\n // have same range as old target[r] (instead of changing pointers, we copy values.\n // that way we do not need to adjust pointers in parents).\n const oldRootRight = target[r]; \n target.from = oldRootRight.from;\n target.to = oldRootRight.to;\n target[r] = oldRootRight[r];\n rootClone[r] = oldRootRight[l];\n target[l] = rootClone;\n rootClone.d = computeDepth(rootClone);\n }\n target.d = computeDepth(target);\n}\n\nfunction computeDepth({ r, l }: Pick) {\n return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;\n}\n","import { cloneSimpleObjectTree, deepClone, keys, objectIsEmpty } from \"../functions/utils\";\nimport { mergeRanges, RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\n\nexport function extendObservabilitySet(\n target: ObservabilitySet,\n newSet: ObservabilitySet\n): ObservabilitySet {\n keys(newSet).forEach(part => {\n if (target[part]) mergeRanges(target[part], newSet[part]);\n else target[part] = cloneSimpleObjectTree(newSet[part]); // Somewhat faster\n });\n return target;\n}\n","import { rangesOverlap } from '../helpers/rangeset';\nimport { ObservabilitySet } from '../public/types/db-events';\n\nexport function obsSetsOverlap(os1: ObservabilitySet, os2: ObservabilitySet) {\n return os1.all || os2.all || Object.keys(os1).some(\n (key) => os2[key] && rangesOverlap(os2[key], os1[key])\n );\n}\n","import { type GlobalQueryCache } from \"../../public/types/cache\";\n\nexport const cache: GlobalQueryCache = {}\n","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport { extendObservabilitySet } from '../extend-observability-set';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { cache } from './cache';\n\nlet unsignaledParts: ObservabilitySet = {};\nlet isTaskEnqueued = false;\n\nexport function signalSubscribersLazily(part: ObservabilitySet, optimistic = false) {\n extendObservabilitySet(unsignaledParts, part);\n if (!isTaskEnqueued) {\n isTaskEnqueued = true;\n setTimeout(() => {\n isTaskEnqueued = false;\n const parts = unsignaledParts;\n unsignaledParts = {};\n signalSubscribersNow(parts, false);\n }, 0);\n }\n}\n\nexport function signalSubscribersNow(\n updatedParts: ObservabilitySet,\n deleteAffectedCacheEntries = false\n) {\n const queriesToSignal = new Set<() => void>();\n if (updatedParts.all) {\n // Signal all subscribers to requery.\n for (const tblCache of Object.values(cache)) {\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n } else {\n for (const key in updatedParts) {\n const parts = /^idb\\:\\/\\/(.*)\\/(.*)\\//.exec(key);\n if (parts) {\n const [, dbName, tableName] = parts;\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (tblCache)\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n }\n }\n // Now when affected cache entries are removed, signal collected subscribers to requery.\n queriesToSignal.forEach((requery) => requery());\n}\n\nfunction collectTableSubscribers(\n tblCache: TblQueryCache,\n updatedParts: ObservabilitySet,\n outQueriesToSignal: Set<() => void>,\n deleteAffectedCacheEntries: boolean\n) {\n const updatedEntryLists: [string, CacheEntry[]][] = [];\n for (const [indexName, entries] of Object.entries(tblCache.queries.query)) {\n const filteredEntries: CacheEntry[] = [];\n for (const entry of entries) {\n if (obsSetsOverlap(updatedParts, entry.obsSet)) {\n // This query is affected by the mutation. Remove it from cache\n // and signal all subscribers to requery.\n entry.subscribers.forEach((requery) => outQueriesToSignal.add(requery));\n } else if (deleteAffectedCacheEntries) {\n filteredEntries.push(entry);\n }\n }\n // Collect cache entries to be updated\n if (deleteAffectedCacheEntries)\n updatedEntryLists.push([indexName, filteredEntries]);\n }\n if (deleteAffectedCacheEntries) {\n for (const [indexName, filteredEntries] of updatedEntryLists) {\n tblCache.queries.query[indexName] = filteredEntries;\n }\n }\n}\n","import { Dexie } from './dexie';\nimport * as Debug from '../../helpers/debug';\nimport { rejection } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { eventRejectHandler, preventDefault } from '../../functions/event-wrappers';\nimport Promise, { wrap } from '../../helpers/promise';\nimport { connections } from '../../globals/constants';\nimport { runUpgraders, readGlobalSchema, adjustToExistingIndexNames, verifyInstalledSchema, patchCurrentVersion } from '../version/schema-helpers';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { _onDatabaseCreated } from '../../helpers/database-enumerator';\nimport { vip } from './vip';\nimport { promisableChain, nop } from '../../functions/chaining-functions';\nimport { generateMiddlewareStacks } from './generate-middleware-stacks';\nimport { slice } from '../../functions/utils';\nimport safari14Workaround from 'safari-14-idb-fix';\nimport { type ObservabilitySet } from '../../public/types/db-events';\nimport { RangeSet } from '../../helpers/rangeset';\nimport { DEXIE_STORAGE_MUTATED_EVENT_NAME, globalEvents } from '../../globals/global-events';\nimport { signalSubscribersNow } from '../../live-query/cache/signalSubscribers';\n\nexport function dexieOpen (db: Dexie) {\n const state = db._state;\n const {indexedDB} = db._deps;\n if (state.isBeingOpened || db.idbdb)\n return state.dbReadyPromise.then(() => state.dbOpenError ?\n rejection (state.dbOpenError) :\n db);\n state.isBeingOpened = true;\n state.dbOpenError = null;\n state.openComplete = false;\n const openCanceller = state.openCanceller;\n let nativeVerToOpen = Math.round(db.verno * 10);\n let schemaPatchMode = false;\n\n function throwIfCancelled() {\n // If state.openCanceller object reference is replaced, it means db.close() has been called,\n // meaning this open flow should be cancelled.\n if (state.openCanceller !== openCanceller) throw new exceptions.DatabaseClosed('db.open() was cancelled');\n }\n \n // Function pointers to call when the core opening process completes.\n let resolveDbReady = state.dbReadyResolve,\n // upgradeTransaction to abort on failure.\n upgradeTransaction: (IDBTransaction | null) = null,\n wasCreated = false;\n\n const tryOpenDB = () => new Promise((resolve, reject) => {\n throwIfCancelled();\n // If no API, throw!\n if (!indexedDB) throw new exceptions.MissingAPI();\n const dbName = db.name;\n \n const req = state.autoSchema || !nativeVerToOpen ?\n indexedDB.open(dbName) :\n indexedDB.open(dbName, nativeVerToOpen);\n if (!req) throw new exceptions.MissingAPI(); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134\n req.onerror = eventRejectHandler(reject);\n req.onblocked = wrap(db._fireOnBlocked);\n req.onupgradeneeded = wrap (e => {\n upgradeTransaction = req.transaction;\n if (state.autoSchema && !db._options.allowEmptyDB) { // Unless an addon has specified db._allowEmptyDB, lets make the call fail.\n // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases.\n // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we\n // do not create a new database by accident here.\n req.onerror = preventDefault; // Prohibit onabort error from firing before we're done!\n upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.)\n // Close database and delete it.\n req.result.close();\n const delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here!\n delreq.onsuccess = delreq.onerror = wrap(() => {\n reject (new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`));\n });\n } else {\n upgradeTransaction.onerror = eventRejectHandler(reject);\n const oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix.\n wasCreated = oldVer < 1;\n db.idbdb = req.result;\n if (schemaPatchMode) {\n patchCurrentVersion(db, upgradeTransaction);\n }\n runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n }\n }, reject);\n \n req.onsuccess = wrap (() => {\n // Core opening procedure complete. Now let's just record some stuff.\n upgradeTransaction = null;\n const idbdb = db.idbdb = req.result;\n\n const objectStoreNames = slice(idbdb.objectStoreNames);\n if (objectStoreNames.length > 0) try {\n const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n if (state.autoSchema) readGlobalSchema(db, idbdb, tmpTrans);\n else {\n adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) {\n console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this.`);\n idbdb.close();\n nativeVerToOpen = idbdb.version + 1;\n schemaPatchMode = true;\n return resolve (tryOpenDB()); // Try again with new version (nativeVerToOpen\n }\n }\n generateMiddlewareStacks(db, tmpTrans);\n } catch (e) {\n // Safari 8 may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120.\n // BUGBUG: It will bail out anyway as of Dexie 3.\n // Should we support Safari 8 anymore? Believe all\n // Dexie users use the shim for that platform anyway?!\n // If removing Safari 8 support, go ahead and remove the safariMultiStoreFix() function\n // as well as absurd upgrade version quirk for Safari.\n }\n \n connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari.\n \n idbdb.onversionchange = wrap(ev => {\n state.vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari)\n db.on(\"versionchange\").fire(ev);\n });\n \n idbdb.onclose = wrap(ev => {\n db.on(\"close\").fire(ev);\n });\n\n if (wasCreated) _onDatabaseCreated(db._deps, dbName);\n\n resolve();\n\n }, reject);\n }).catch(err => {\n switch (err?.name) {\n case \"UnknownError\":\n if (state.PR1398_maxLoop > 0) {\n // Bug in Chrome after clearing site data\n // https://github.com/dexie/Dexie.js/issues/543#issuecomment-1795736695\n state.PR1398_maxLoop--;\n console.warn('Dexie: Workaround for Chrome UnknownError on open()');\n return tryOpenDB();\n }\n break;\n case \"VersionError\":\n if (nativeVerToOpen > 0) {\n nativeVerToOpen = 0;\n return tryOpenDB();\n }\n break;\n }\n return Promise.reject(err);\n });\n \n // safari14Workaround = Workaround by jakearchibald for new nasty bug in safari 14.\n return Promise.race([\n openCanceller,\n (typeof navigator === 'undefined' ? Promise.resolve() : safari14Workaround()).then(tryOpenDB)\n ]).then(() => {\n // Before finally resolving the dbReadyPromise and this promise,\n // call and await all on('ready') subscribers:\n // Dexie.vip() makes subscribers able to use the database while being opened.\n // This is a must since these subscribers take part of the opening procedure.\n throwIfCancelled();\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>db.on.ready.fire(db.vip))).then(function fireRemainders() {\n if (state.onReadyBeingFired.length > 0) {\n // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed.\n let remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>remainders(db.vip))).then(fireRemainders)\n }\n });\n }).finally(()=>{\n if (state.openCanceller === openCanceller) {\n // Only modify state if not cancelled in the mean time.\n state.onReadyBeingFired = null;\n state.isBeingOpened = false;\n }\n }).catch(err => {\n state.dbOpenError = err; // Record the error. It will be used to reject further promises of db operations.\n try {\n // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit.\n upgradeTransaction && upgradeTransaction.abort();\n } catch { }\n if (openCanceller === state.openCanceller) {\n // Still in the same open flow - The error reason was not due to external call to db.close().\n // Make sure to call db.close() to finalize resources.\n db._close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh.\n }\n return rejection (err);\n }).finally(()=>{\n state.openComplete = true;\n resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters.\n }).then(()=>{\n if (wasCreated) {\n // Propagate full range on primary keys and indexes on all tables now that the DB is ready and opened,\n // and all upgraders and on('ready') subscribers have run.\n const everything: ObservabilitySet = {};\n db.tables.forEach(table => {\n table.schema.indexes.forEach(idx => {\n if (idx.name) everything[`idb://${db.name}/${table.name}/${idx.name}`] = new RangeSet(-Infinity, [[[]]]);\n });\n everything[`idb://${db.name}/${table.name}/`] = everything[`idb://${db.name}/${table.name}/:dels`] = new RangeSet(-Infinity, [[[]]]);\n });\n // Database was created. If another tab had it open when it was deleted and reopened, that tab must be updated now.\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything);\n // Wipe the cache and trigger optimistic queries:\n signalSubscribersNow(everything, true);\n }\n // Resolve the db.open() with the db instance.\n return db;\n });\n}\n","import { isArray } from '../functions/utils';\n\nexport function awaitIterator (iterator: Iterator) {\n var callNext = result => iterator.next(result),\n doThrow = error => iterator.throw(error),\n onSuccess = step(callNext),\n onError = step(doThrow);\n\n function step(getNext: (any)=>any) {\n return (val?) => {\n var next = getNext(val),\n value = next.value;\n\n return next.done ? value :\n (!value || typeof value.then !== 'function' ?\n isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :\n value.then(onSuccess, onError));\n };\n }\n\n return step(callNext)();\n}\n","import { TransactionMode } from '../../public/types/transaction-mode';\nimport { errnames, exceptions } from '../../errors';\nimport { flatten, isAsyncFunction } from '../../functions/utils';\nimport { Dexie } from './dexie';\nimport { Transaction } from '../transaction';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise, {\n PSD,\n NativePromise,\n decrementExpectedAwaits,\n rejection,\n incrementExpectedAwaits\n} from '../../helpers/promise';\n\nexport function extractTransactionArgs(mode: TransactionMode, _tableArgs_, scopeFunc) {\n // Let table arguments be all arguments between mode and last argument.\n var i = arguments.length;\n if (i < 2) throw new exceptions.InvalidArgument(\"Too few arguments\");\n // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments)\n // and clone arguments except the first one into local var 'args'.\n var args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments.\n scopeFunc = args.pop();\n var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays.\n return [mode, tables, scopeFunc];\n}\n\nexport function enterTransactionScope(\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n parentTransaction: Transaction | undefined,\n scopeFunc: ()=>PromiseLike | any\n) {\n return Promise.resolve().then(() => {\n // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction().\n const transless = PSD.transless || PSD;\n // Our transaction.\n //return new Promise((resolve, reject) => {\n const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n trans.explicit = true;\n // Let the transaction instance be part of a Promise-specific data (PSD) value.\n const zoneProps = {\n trans: trans,\n transless: transless\n };\n\n if (parentTransaction) {\n // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing)\n trans.idbtrans = parentTransaction.idbtrans;\n } else {\n try {\n trans.create(); // Create the native transaction so that complete() or error() will trigger even if no operation is made upon it.\n // @ts-ignore Mark the idbtrans object with \"_explicit\". DBCore middleware won't have access to Dexie trans but will need to have this info.\n trans.idbtrans._explicit = true;\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(() => enterTransactionScope(\n db,\n mode,\n storeNames,\n null,\n scopeFunc\n ));\n }\n return rejection(ex);\n }\n }\n\n // Support for native async await.\n const scopeFuncIsAsync = isAsyncFunction(scopeFunc);\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n\n let returnValue;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = scopeFunc.call(trans, trans);\n if (returnValue) {\n if (scopeFuncIsAsync) {\n // scopeFunc is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n } else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {\n // scopeFunc returned an iterator with throw-support. Handle yield as await.\n returnValue = awaitIterator(returnValue);\n }\n }\n }, zoneProps);\n return (returnValue && typeof returnValue.then === 'function' ?\n // Promise returned. User uses promise-style transactions.\n Promise.resolve(returnValue).then(x => trans.active ?\n x // Transaction still active. Continue.\n : rejection(new exceptions.PrematureCommit(\n \"Transaction committed too early. See http://bit.ly/2kdckMn\")))\n // No promise returned. Wait for all outstanding promises before continuing. \n : promiseFollowed.then(() => returnValue)\n ).then(x => {\n // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion:\n if (parentTransaction) trans._resolve();\n // wait for trans._completion\n // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves)\n return trans._completion.then(() => x);\n }).catch(e => {\n trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc!\n return rejection(e);\n });\n });\n}\n","import {\n DBCore,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryRequest,\n DBCoreRangeType,\n DBCoreOpenCursorRequest,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreTable,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { getKeyExtractor } from './get-key-extractor';\nimport { getKeyPathAlias } from './dbcore-indexeddb';\nimport { Middleware } from '../public/types/middleware';\n\ninterface VirtualIndex extends DBCoreIndex {\n /** True if this index is virtual, i.e. represents a compound index internally,\n * but makes it act as as having a subset of its keyPaths.\n */\n isVirtual: boolean;\n\n /** Number of keypaths that this index comprises. Can be 0..N.\n * Note: This is the length of the *virtual index*, not the real index.\n */\n keyLength: number;\n\n /** Number of popped keypaths from the real index.\n */\n keyTail: number;\n\n /** LowLevelIndex represents the actual IndexedDB index behind it */\n lowLevelIndex: DBCoreIndex;\n}\n\n// Move into some util:\nexport function pad (a: any | any[], value: any, count: number) {\n const result = isArray(a) ? a.slice() : [a];\n for (let i=0; i 0;\n const virtualIndex = {\n ...lowLevelIndex,\n name: isVirtual\n ? `${keyPathAlias}(virtual-from:${lowLevelIndex.name})`\n : lowLevelIndex.name,\n lowLevelIndex,\n isVirtual,\n keyTail,\n keyLength,\n extractKey: getKeyExtractor(keyPath),\n unique: !isVirtual && lowLevelIndex.unique\n };\n indexList.push(virtualIndex);\n if (!virtualIndex.isPrimaryKey) {\n allVirtualIndexes.push(virtualIndex);\n }\n if (keyLength > 1) {\n const virtualKeyPath = keyLength === 2 ?\n keyPath[0] : // This is a compound [a, b]. Add a virtual normal index a.\n keyPath.slice(0, keyLength - 1); // This is compound [a,b,c]. Add virtual compound [a,b].\n addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n }\n indexList.sort((a,b) => a.keyTail - b.keyTail); // Shortest keyTail is the best one (represents real index)\n return virtualIndex;\n }\n \n const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n indexLookup[\":id\"] = [primaryKey];\n for (const index of schema.indexes) {\n addVirtualIndexes(index.keyPath, 0, index);\n }\n \n function findBestIndex(keyPath: null | string | string[]): VirtualIndex {\n const result = indexLookup[getKeyPathAlias(keyPath)];\n return result && result[0];\n }\n \n function translateRange (range: DBCoreKeyRange, keyTail: number): DBCoreKeyRange {\n return {\n type: range.type === DBCoreRangeType.Equal ?\n DBCoreRangeType.Range :\n range.type,\n lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),\n lowerOpen: true, // doesn't matter true or false\n upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),\n upperOpen: true // doesn't matter true or false\n };\n }\n \n function translateRequest (req: DBCoreQueryRequest): DBCoreQueryRequest;\n function translateRequest (req: DBCoreOpenCursorRequest): DBCoreOpenCursorRequest;\n function translateRequest (req: DBCoreCountRequest): DBCoreCountRequest {\n const index = req.query.index as VirtualIndex;\n return index.isVirtual ? {\n ...req,\n query: {\n index: index.lowLevelIndex,\n range: translateRange(req.query.range, index.keyTail)\n }\n } : req;\n }\n \n const result: DBCoreTable = {\n ...table,\n schema: {\n ...schema,\n primaryKey,\n indexes: allVirtualIndexes,\n getIndexByKeyPath: findBestIndex\n },\n\n count(req) {\n return table.count(translateRequest(req));\n }, \n \n query(req) {\n return table.query(translateRequest(req));\n },\n \n openCursor(req) {\n const {keyTail, isVirtual, keyLength} = (req.query.index as VirtualIndex);\n if (!isVirtual) return table.openCursor(req);\n \n function createVirtualCursor(cursor: DBCoreCursor) : DBCoreCursor {\n function _continue (key?: any) {\n key != null ?\n cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :\n req.unique ?\n cursor.continue(\n cursor.key.slice(0, keyLength)\n .concat(req.reverse\n ? down.MIN_KEY\n : down.MAX_KEY, keyTail)\n ) :\n cursor.continue()\n }\n const virtualCursor = Object.create(cursor, {\n continue: {value: _continue},\n continuePrimaryKey: {\n value(key: any, primaryKey: any) {\n cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n }\n },\n primaryKey: {\n get() {\n return cursor.primaryKey;\n }\n },\n key: {\n get() {\n const key = cursor.key as any[]; // A virtual cursor always operates on compound key\n return keyLength === 1 ?\n key[0] : // Cursor.key should not be an array.\n key.slice(0, keyLength); // Cursor.key should be first part of array.\n }\n },\n value: {\n get() {\n return cursor.value;\n }\n }\n });\n return virtualCursor;\n }\n \n return table.openCursor(translateRequest(req))\n .then(cursor => cursor && createVirtualCursor(cursor));\n }\n };\n return result;\n }\n }\n}\n\nexport const virtualIndexMiddleware : Middleware = {\n stack: \"dbcore\",\n name: \"VirtualIndexMiddleware\",\n level: 1,\n create: createVirtualIndexMiddleware\n};\n\n","import { keys, hasOwn, toStringTag } from './utils';\n\nexport function getObjectDiff(a: any, b: any, rv?: any, prfx?: string) {\n // Compares objects a and b and produces a diff object.\n rv = rv || {};\n prfx = prfx || '';\n keys(a).forEach((prop) => {\n if (!hasOwn(b, prop)) {\n // Property removed\n rv[prfx + prop] = undefined;\n } else {\n var ap = a[prop],\n bp = b[prop];\n if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {\n const apTypeName = toStringTag(ap);\n const bpTypeName = toStringTag(bp);\n\n if (apTypeName !== bpTypeName) {\n rv[prfx + prop] = b[prop]; // Property changed to other type\n } else if (apTypeName === 'Object') {\n // Pojo objects (not Date, ArrayBuffer, Array etc). Go deep.\n getObjectDiff(ap, bp, rv, prfx + prop + '.');\n } else if (ap !== bp) {\n // Values differ.\n // Could have checked if Date, arrays or binary types have same\n // content here but I think that would be a suboptimation.\n // Prefer simplicity.\n rv[prfx + prop] = b[prop];\n }\n } else if (ap !== bp) rv[prfx + prop] = b[prop]; // Primitive value changed\n }\n });\n keys(b).forEach((prop) => {\n if (!hasOwn(a, prop)) {\n rv[prfx + prop] = b[prop]; // Property added\n }\n });\n return rv;\n}\n","import {\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreIndex,\n DBCoreTable,\n} from \"../public/types/dbcore\";\n\nexport function getEffectiveKeys (\n primaryKey: DBCoreIndex,\n req: (Pick & {keys?: any[]}) | Pick)\n{\n //const {outbound} = primaryKey;\n if (req.type === 'delete') return req.keys;\n return req.keys || req.values.map(primaryKey.extractKey)\n}\n","import {\n DBCore,\n DBCoreTable,\n DBCoreMutateResponse,\n DBCoreDeleteRangeRequest,\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreTransaction,\n DBCoreKeyRange\n} from \"../public/types/dbcore\";\nimport { nop } from '../functions/chaining-functions';\nimport { hasOwn, setByKeyPath } from '../functions/utils';\nimport { getObjectDiff } from \"../functions/get-object-diff\";\nimport { PSD } from '../helpers/promise';\n//import { LockableTableMiddleware } from '../dbcore/lockable-table-middleware';\nimport { getEffectiveKeys } from '../dbcore/get-effective-keys';\nimport { Middleware } from '../public/types/middleware';\nimport { Transaction } from '../classes/transaction';\n\nexport const hooksMiddleware: Middleware = {\n stack: \"dbcore\",\n name: \"HooksMiddleware\",\n level: 2,\n create: (downCore: DBCore) => ({\n ...downCore,\n table(tableName: string) {\n const downTable = downCore.table(tableName);\n const {primaryKey} = downTable.schema;\n \n const tableMiddleware: DBCoreTable = {\n ...downTable,\n mutate(req):Promise {\n const dxTrans = PSD.trans as Transaction;\n // Hooks can be transaction-bound. Need to grab them from transaction.table and not\n // db.table!\n const {deleting, creating, updating} = dxTrans.table(tableName).hook;\n switch (req.type) {\n case 'add':\n if (creating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'put':\n if (creating.fire === nop && updating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'delete':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'deleteRange':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>deleteRange(req), true);\n }\n // Any of the breaks above happened (no hooks) - do the default:\n return downTable.mutate(req);\n\n\n function addPutOrDelete(req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest): Promise {\n const dxTrans = PSD.trans;\n const keys = req.keys || getEffectiveKeys(primaryKey, req);\n if (!keys) throw new Error(\"Keys missing\");\n // Clone Request and set keys arg\n req = req.type === 'add' || req.type === 'put' ?\n {...req, keys} :\n {...req};\n if (req.type !== 'delete') req.values = [...req.values];\n if (req.keys) req.keys = [...req.keys];\n \n return getExistingValues(downTable, req, keys).then (existingValues => {\n const contexts = keys.map((key, i) => {\n const existingValue = existingValues[i];\n const ctx = { onerror: null, onsuccess: null };\n if (req.type === 'delete') {\n // delete operation\n deleting.fire.call(ctx, key, existingValue, dxTrans);\n } else if (req.type === 'add' || existingValue === undefined) {\n // The add() or put() resulted in a create\n const generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);\n if (key == null && generatedPrimaryKey != null) {\n key = generatedPrimaryKey;\n req.keys[i] = key;\n if (!primaryKey.outbound) {\n setByKeyPath(req.values[i], primaryKey.keyPath, key);\n }\n }\n } else {\n // The put() operation resulted in an update\n const objectDiff = getObjectDiff(existingValue, req.values[i]);\n const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n if (additionalChanges) {\n const requestedValue = req.values[i];\n Object.keys(additionalChanges).forEach(keyPath => {\n if (hasOwn(requestedValue, keyPath)) {\n // keyPath is already present as a literal property of the object\n requestedValue[keyPath] = additionalChanges[keyPath];\n } else {\n // keyPath represents a new or existing path into the object\n setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]);\n }\n });\n }\n }\n return ctx;\n });\n return downTable.mutate(req).then(({failures, results, numFailures, lastResult}) => {\n for (let i=0; i {\n contexts.forEach(ctx => ctx.onerror && ctx.onerror(error));\n return Promise.reject(error);\n });\n });\n }\n \n function deleteRange(req: DBCoreDeleteRangeRequest): Promise {\n return deleteNextChunk(req.trans, req.range, 10000);\n }\n \n function deleteNextChunk(trans: DBCoreTransaction, range: DBCoreKeyRange, limit: number) {\n // Query what keys in the DB within the given range\n return downTable.query({trans, values: false, query: {index: primaryKey, range}, limit})\n .then(({result}) => {\n // Given a set of keys, bulk delete those using the same procedure as in addPutOrDelete().\n // This will make sure that deleting hook is called.\n return addPutOrDelete({type: 'delete', keys: result, trans}).then(res => {\n if (res.numFailures > 0) return Promise.reject(res.failures[0]);\n if (result.length < limit) {\n return {failures: [], numFailures: 0, lastResult: undefined} as DBCoreMutateResponse;\n } else {\n return deleteNextChunk(trans, {...range, lower: result[result.length - 1], lowerOpen: true}, limit);\n }\n });\n })\n }\n }\n };\n //const {lock, lockableMiddleware} = LockableTableMiddleware(tableMiddleware);\n\n return tableMiddleware;\n },\n }) as DBCore\n};\n\nfunction getExistingValues(\n table: DBCoreTable,\n req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest,\n effectiveKeys: any[]\n) {\n return req.type === \"add\"\n ? Promise.resolve([])\n : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: \"immutable\" });\n}\n","import { deepClone } from \"../functions/utils\";\nimport { DBCore } from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport Promise from \"../helpers/promise\";\nimport { cmp } from '../functions/cmp';\n\nexport function getFromTransactionCache(\n keys: readonly any[],\n cache: { keys: any[]; values: any[] } | undefined | null,\n clone?: boolean\n) {\n try {\n if (!cache) return null;\n if (cache.keys.length < keys.length) return null;\n const result: any[] = [];\n // Compare if the exact same order of keys was retrieved in same transaction:\n // Allow some cached keys to be omitted from provided set of keys\n // Use case: 1. getMany(keys) 2. update a subset of those 3. call put with the updated ones ==> middlewares should be able to find old values\n for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) {\n if (cmp(cache.keys[i], keys[j]) !== 0) continue;\n result.push(clone ? deepClone(cache.values[i]) : cache.values[i]);\n ++j;\n }\n // If got all keys caller was looking for, return result.\n return result.length === keys.length ? result : null;\n } catch {\n return null;\n }\n}\n\nexport const cacheExistingValuesMiddleware: Middleware = {\n stack: \"dbcore\",\n level: -1,\n create: (core) => {\n return {\n table: (tableName) => {\n const table = core.table(tableName);\n return {\n ...table,\n getMany: (req) => {\n if (!req.cache) {\n return table.getMany(req);\n }\n const cachedResult = getFromTransactionCache(\n req.keys,\n req.trans[\"_cache\"],\n req.cache === \"clone\"\n );\n if (cachedResult) {\n return Promise.resolve(cachedResult);\n }\n return table.getMany(req).then((res) => {\n req.trans[\"_cache\"] = {\n keys: req.keys,\n values: req.cache === \"clone\" ? deepClone(res) : res,\n };\n return res;\n });\n },\n mutate: (req) => {\n // Invalidate cache on any mutate except \"add\" which can't change existing values:\n if (req.type !== \"add\") req.trans[\"_cache\"] = null;\n return table.mutate(req);\n },\n };\n },\n };\n },\n};\n","import { DBCore, DBCoreTable } from '../../public/types/dbcore';\nimport { LiveQueryContext } from '../live-query';\n\nexport function isCachableContext(ctx: LiveQueryContext, table: DBCoreTable) {\n return (\n ctx.trans.mode === 'readonly' &&\n !!ctx.subscr &&\n !ctx.trans.explicit &&\n ctx.trans.db._options.cache !== 'disabled' &&\n !table.schema.primaryKey.outbound\n );\n}\n\n","import { DBCoreCountRequest, DBCoreGetManyRequest, DBCoreGetRequest, DBCoreOpenCursorRequest, DBCoreQueryRequest } from '../../public/types/dbcore';\n\n\nexport function isCachableRequest(type: string, req: Partial) {\n switch (type) {\n case 'query':\n return req.values && !req.unique;\n case 'get':\n return false;\n case 'getMany':\n return false;\n case 'count':\n return false;\n case 'openCursor':\n return false;\n }\n}\n","import { LiveQueryContext } from \".\";\nimport { getFromTransactionCache } from \"../dbcore/cache-existing-values-middleware\";\nimport { getEffectiveKeys } from \"../dbcore/get-effective-keys\";\nimport { exceptions } from \"../errors\";\nimport { cmp } from \"../functions/cmp\";\nimport { isArray, keys } from \"../functions/utils\";\nimport { PSD } from \"../helpers/promise\";\nimport { RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport {\n DBCore,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreGetManyRequest,\n DBCoreGetRequest,\n DBCoreIndex,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreQueryResponse,\n DBCoreTable,\n DBCoreTableSchema,\n DBCoreTransaction,\n} from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport { isCachableContext } from \"./cache/is-cachable-context\";\nimport { isCachableRequest } from \"./cache/is-cachable-request\";\nimport { extendObservabilitySet } from \"./extend-observability-set\";\n\nexport const observabilityMiddleware: Middleware = {\n stack: \"dbcore\",\n level: 0,\n name: \"Observability\",\n create: (core) => {\n const dbName = core.schema.name;\n const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);\n\n return {\n ...core,\n transaction: (stores, mode, options) => {\n if (PSD.subscr && mode !== 'readonly') {\n throw new exceptions.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${(PSD as LiveQueryContext).querier}`);\n }\n return core.transaction(stores, mode, options);\n },\n table: (tableName) => {\n const table = core.table(tableName);\n const { schema } = table;\n const { primaryKey, indexes } = schema;\n const { extractKey, outbound } = primaryKey;\n const indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(\n (index) => index.compound && (index.keyPath as string[]).includes(primaryKey.keyPath as string)\n );\n const tableClone: DBCoreTable = {\n ...table,\n mutate: (req) => {\n const trans = req.trans as DBCoreTransaction & {\n mutatedParts?: ObservabilitySet;\n };\n const mutatedParts = req.mutatedParts || (req.mutatedParts = {});\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (mutatedParts[part] ||\n (mutatedParts[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n\n const { type } = req;\n let [keys, newObjs] =\n req.type === \"deleteRange\"\n ? [req.range] // keys will be an DBCoreKeyRange object - transformed later on to a [from,to]-style range.\n : req.type === \"delete\"\n ? [req.keys] // keys known already here. newObjs will be undefined.\n : req.values.length < 50\n ? [getEffectiveKeys(primaryKey, req).filter(id => id), req.values] // keys except autoIncremented - they will be added later on.\n : []; // keys and newObjs will both be undefined - changeSpec will become true (changed for entire table)\n\n const oldCache = req.trans[\"_cache\"];\n\n // Add the mutated table and optionally keys to the mutatedTables set on the transaction.\n // Used by subscribers to txcommit event and for Collection.prototype.subscribe().\n if (isArray(keys)) {\n // keys is an array - delete, add or put of less than 50 rows.\n // Individual keys (add put or delete)\n pkRangeSet.addKeys(keys);\n // Only get oldObjs if they have been cached recently\n // (This applies to Collection.modify() only, but also if updating/deleting hooks have subscribers)\n const oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null;\n\n // Supply detailed values per index for both old and new objects:\n if (!oldObjs) {\n // add, delete or put and we don't know old values.\n // Indicate this in the \":dels\" part, for the sake of count() and primaryKeys() queries only!\n delsRangeSet.addKeys(keys);\n }\n if (oldObjs || newObjs) {\n // No matter if knowning oldObjs or not, track the indices if it's a put, add or delete.\n trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);\n }\n } else if (keys) {\n // keys is a DBCoreKeyRange object. Transform it to [from,to]-style range.\n // As we can't know deleted index ranges, mark index-based subscriptions must trigger.\n const range = { from: keys.lower, to: keys.upper };\n delsRangeSet.add(range);\n // deleteRange. keys is a DBCoreKeyRange objects. Transform it to [from,to]-style range.\n pkRangeSet.add(range);\n } else {\n // Too many requests to record the details without slowing down write performance.\n // Let's just record a generic large range on primary key, the virtual :dels index and\n // all secondary indices:\n pkRangeSet.add(FULL_RANGE);\n delsRangeSet.add(FULL_RANGE);\n schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE));\n }\n\n return table.mutate(req).then((res) => {\n // Merge the mutated parts from the request into the transaction's mutatedParts\n // now when the request went fine.\n if (keys && (req.type === 'add' || req.type === 'put')) {\n // Less than 50 requests (keys truthy) (otherwise we've added full range anyway)\n // autoincrement means we might not have got all keys until now\n pkRangeSet.addKeys(res.results);\n if (indexesWithAutoIncPK) {\n // Dexie Issue 1946:\n // If an auto-incremented primary key is part of a compound index,\n // we need to compute the resulting value of that index after inserting\n // the rows.\n indexesWithAutoIncPK.forEach(idx => {\n // Extract values of this compound index where primary key is not yet set:\n const idxVals = req.values.map(v => idx.extractKey(v));\n // Find the position of the primary key in the index:\n const pkPos = (idx.keyPath as string[]).findIndex(prop => prop === primaryKey.keyPath);\n // Update idxVals with the resulting primary keys to complete the index value:\n res.results!.forEach(pk => idxVals[pkPos] = pk);\n // Add the updated index to the rangeset:\n getRangeSet(idx.name).addKeys(idxVals);\n });\n }\n }\n trans.mutatedParts = extendObservabilitySet (\n trans.mutatedParts || {},\n mutatedParts\n );\n return res;\n });\n },\n };\n\n const getRange: (req: any) => [DBCoreIndex, RangeSet] = ({\n query: { index, range },\n }:\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest) => [\n index,\n new RangeSet(range.lower ?? core.MIN_KEY, range.upper ?? core.MAX_KEY),\n ];\n\n const readSubscribers: {[method in\n Exclude]: \n (req: any) => [DBCoreIndex, RangeSet]\n } = {\n get: (req) => [primaryKey, new RangeSet(req.key)],\n getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)],\n count: getRange,\n query: getRange,\n openCursor: getRange,\n }\n\n keys(readSubscribers).forEach((method: 'get' | 'getMany' | 'count' | 'query' | 'openCursor') => {\n tableClone[method] = function (\n req:\n | DBCoreGetRequest\n | DBCoreGetManyRequest\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest\n ) {\n const { subscr } = PSD as LiveQueryContext;\n const isLiveQuery = !!subscr;\n let cachable = isCachableContext(PSD as LiveQueryContext, table) && isCachableRequest(method, req);\n const obsSet = cachable\n ? req.obsSet = {} // Implicit read transaction - track changes for this query only for the request's duration\n : subscr; // Explicit read transaction - track changes across entire live query\n\n if (isLiveQuery) {\n // Current zone want's to track all queries so they can be subscribed to.\n // (The query is executed within a \"liveQuery\" zone)\n // Check whether the query applies to a certain set of ranges:\n // Track what we should be observing:\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (obsSet[part] ||\n (obsSet[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const [queriedIndex, queriedRanges] = readSubscribers[method](req);\n // A generic rule here: queried ranges should always be subscribed to.\n if (method === 'query' && queriedIndex.isPrimaryKey && !(req as DBCoreQueryRequest).values) {\n // A pure primay-key based Collection where only .primaryKeys() is requested. Don't wakeup on other changes than added or deleted primary keys within queried range.\n delsRangeSet.add(queriedRanges);\n } else {\n getRangeSet(queriedIndex.name || \"\").add(queriedRanges);\n }\n if (!queriedIndex.isPrimaryKey) {\n // Only count(), query() and openCursor() operates on secondary indices.\n // Since put(), delete() and deleteRange() mutations may happen without knowing oldObjs,\n // the mutate() method will be missing what secondary indices that are being deleted from\n // the subscribed range. We are working around this issue by recording all the resulting\n // primary keys from the queries. This only works for those kinds of queries where we can\n // derive the primary key from the result.\n // In this block we are accomplishing this using various strategies depending on the properties\n // of the query result.\n\n if (method === \"count\") {\n // We've got a problem! Delete and put mutations happen without known the oldObjs.\n // Those mutation could change the count.\n // Solution: Dedicated \":dels\" url represends a subscription to all mutations without oldObjs\n // (specially triggered in the mutators put(), delete() and deleteRange() when they don't know oldObject)\n delsRangeSet.add(FULL_RANGE);\n } else {\n // openCursor() or query()\n\n // Prepare a keysPromise in case the we're doing an IDBIndex.getAll() on a store with outbound keys.\n const keysPromise =\n method === \"query\" &&\n outbound &&\n (req as DBCoreQueryRequest).values &&\n table.query({\n ...(req as DBCoreQueryRequest),\n values: false,\n });\n\n return table[method].apply(this, arguments).then((res) => {\n if (method === \"query\") {\n if (outbound && (req as DBCoreQueryRequest).values) {\n // If keys are outbound, we can't use extractKey to map what keys to observe.\n // We've queried an index (like 'dateTime') on an outbound table\n // and retrieve a list of objects\n // from who we cannot know their primary keys.\n // \"Luckily\" though, we've prepared the keysPromise to assist us in exact this condition.\n return keysPromise.then(\n ({ result: resultingKeys }: DBCoreQueryResponse) => {\n pkRangeSet.addKeys(resultingKeys);\n return res;\n }\n );\n }\n // query() inbound values, keys or outbound keys. Secondary indexes only since\n // for primary keys we would only add results within the already registered range.\n const pKeys = (req as DBCoreQueryRequest).values\n ? (res as DBCoreQueryResponse).result.map(extractKey)\n : (res as DBCoreQueryResponse).result;\n if ((req as DBCoreQueryRequest).values) {\n // Subscribe to any mutation made on the returned keys,\n // so that we detect both deletions and updated properties.\n pkRangeSet.addKeys(pKeys);\n } else {\n // Subscribe only to mutations on the returned keys\n // in case the mutator was unable to know oldObjs.\n // If it has oldObj, the mutator won't put anything in \":dels\" because\n // it can more fine-grained put the exact removed and added index value in the correct\n // index range that we subscribe to in the queried range sets.\n // We don't load values so a change on a property outside our index will not\n // require us to re-execute the query.\n delsRangeSet.addKeys(pKeys);\n }\n } else if (method === \"openCursor\") {\n // Caller requests a cursor.\n // For the same reason as when method===\"query\", we only need to observe\n // those keys whose values are possibly used or rendered - which could\n // only happen on keys where they get the cursor's key, primaryKey or value.\n const cursor: DBCoreCursor | null = res;\n const wantValues = (req as DBCoreOpenCursorRequest).values;\n return (\n cursor &&\n Object.create(cursor, {\n key: {\n get() {\n delsRangeSet.addKey(cursor.primaryKey);\n return cursor.key;\n },\n },\n primaryKey: {\n get() {\n const pkey = cursor.primaryKey;\n delsRangeSet.addKey(pkey);\n return pkey;\n },\n },\n value: {\n get() {\n wantValues && pkRangeSet.addKey(cursor.primaryKey);\n return cursor.value;\n },\n },\n })\n );\n }\n return res;\n });\n }\n }\n }\n return table[method].apply(this, arguments);\n };\n });\n return tableClone;\n },\n };\n },\n};\n\nfunction trackAffectedIndexes(\n getRangeSet: (index: string) => RangeSet,\n schema: DBCoreTableSchema,\n oldObjs: readonly any[] | undefined,\n newObjs: readonly any[] | undefined\n) {\n function addAffectedIndex(ix: DBCoreIndex) {\n const rangeSet = getRangeSet(ix.name || \"\");\n function extractKey(obj: any) {\n return obj != null ? ix.extractKey(obj) : null;\n }\n const addKeyOrKeys = (key: any) => ix.multiEntry && isArray(key)\n // multiEntry and the old property was an array - add each array entry to the rangeSet:\n ? key.forEach(key => rangeSet.addKey(key))\n // Not multiEntry or the old property was not an array - add each array entry to the rangeSet:\n : rangeSet.addKey(key);\n\n (oldObjs || newObjs).forEach((_, i) => {\n const oldKey = oldObjs && extractKey(oldObjs[i]);\n const newKey = newObjs && extractKey(newObjs[i]);\n if (cmp(oldKey, newKey) !== 0) {\n // The index has changed. Add both old and new value of the index.\n if (oldKey != null) addKeyOrKeys(oldKey); // If oldKey is invalid key, addKey() will be a noop.\n if (newKey != null) addKeyOrKeys(newKey); // If newKey is invalid key, addKey() will be a noop.\n }\n });\n }\n schema.indexes.forEach(addAffectedIndex);\n}\n","import { delArrayItem, isArray } from '../../functions/utils';\nimport { TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreMutateRequest,\n DBCoreMutateResponse,\n} from '../../public/types/dbcore';\n\nexport function adjustOptimisticFromFailures(\n tblCache: TblQueryCache,\n req: DBCoreMutateRequest,\n res: DBCoreMutateResponse\n): DBCoreMutateRequest {\n if (res.numFailures === 0) return req;\n if (req.type === 'deleteRange') {\n // numFailures > 0 means the deleteRange operation failed in its whole.\n return null;\n }\n\n const numBulkOps = req.keys\n ? req.keys.length\n : 'values' in req && req.values\n ? req.values.length\n : 1;\n if (res.numFailures === numBulkOps) {\n // Same number of failures as the number of ops. This means that all ops failed.\n return null;\n }\n\n const clone: DBCoreMutateRequest = { ...req };\n\n if (isArray(clone.keys)) {\n clone.keys = clone.keys.filter((_, i) => !(i in res.failures));\n }\n if ('values' in clone && isArray(clone.values)) {\n clone.values = clone.values.filter((_, i) => !(i in res.failures));\n }\n return clone;\n}\n","import { cmp } from '../../functions/cmp';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function isAboveLower(key: IndexableType, range: DBCoreKeyRange) {\n return range.lower === undefined\n ? true // lower is less than anything because it is undefined\n : range.lowerOpen\n ? cmp(key, range.lower) > 0 // lowerOpen: Exclude lower bound\n : cmp(key, range.lower) >= 0; // !lowerOpen: Include lower bound\n}\n\nexport function isBelowUpper(key: IndexableType, range: DBCoreKeyRange) {\n return range.upper === undefined\n ? true // upper is greater than anything because it is undefined\n : range.upperOpen\n ? cmp(key, range.upper) < 0 // upperOpen: Exclude upper bound\n : cmp(key, range.upper) <= 0; // !upperOpen: Include upper bound\n}\n\nexport function isWithinRange(key: IndexableType, range: DBCoreKeyRange) {\n return isAboveLower(key, range) && isBelowUpper(key, range);\n}\n","import { cmp } from '../../functions/cmp';\nimport { deepClone, isArray } from '../../functions/utils';\nimport { RangeSet, rangesOverlap } from '../../helpers/rangeset';\nimport { CacheEntry } from '../../public/types/cache';\nimport {\n DBCoreIndex,\n DBCoreMutateRequest,\n DBCoreQueryRequest,\n DBCoreTable,\n} from '../../public/types/dbcore';\nimport { isWithinRange } from './is-within-range';\n\nexport function applyOptimisticOps(\n result: any[],\n req: DBCoreQueryRequest,\n ops: DBCoreMutateRequest[] | undefined,\n table: DBCoreTable,\n cacheEntry: CacheEntry,\n immutable: boolean\n): any[] {\n if (!ops || ops.length === 0) return result;\n const index = req.query.index;\n const { multiEntry } = index;\n const queryRange = req.query.range;\n const primaryKey = table.schema.primaryKey;\n const extractPrimKey = primaryKey.extractKey!;\n const extractIndex = index.extractKey!;\n const extractLowLevelIndex = (index.lowLevelIndex || index).extractKey!;\n\n let finalResult = ops.reduce((result, op) => {\n let modifedResult = result;\n const includedValues =\n op.type === 'add' || op.type === 'put'\n ? op.values.filter((v) => {\n const key = extractIndex(v);\n return multiEntry && isArray(key) // multiEntry index work like plain index unless key is array\n ? key.some((k) => isWithinRange(k, queryRange)) // multiEntry and array key\n : isWithinRange(key, queryRange); // multiEntry but not array key\n }).map(v => {\n v = deepClone(v);// v might come from user so we can't just freeze it.\n if (immutable) Object.freeze(v);\n return v;\n })\n : [];\n switch (op.type) {\n case 'add':\n modifedResult = result.concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'put':\n const keySet = new RangeSet().addKeys(\n op.values.map((v) => extractPrimKey(v))\n );\n modifedResult = result\n .filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keySet);\n })\n .concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'delete':\n const keysToDelete = new RangeSet().addKeys(op.keys);\n modifedResult = result.filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keysToDelete);\n });\n\n break;\n case 'deleteRange':\n const range = op.range;\n modifedResult = result.filter((item) => !isWithinRange(extractPrimKey(item), range));\n break;\n }\n return modifedResult;\n }, result);\n\n // If no changes were made, we can return the original result.\n if (finalResult === result) return result;\n\n // Sort the result on sortIndex:\n finalResult.sort((a, b) =>\n cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) ||\n cmp(extractPrimKey(a), extractPrimKey(b))\n );\n\n // If we have a limit we need to respect it:\n if (req.limit && req.limit < Infinity) {\n if (finalResult.length > req.limit) {\n finalResult.length = req.limit; // Cut of any extras after sorting correctly.\n } else if (result.length === req.limit && finalResult.length < req.limit) {\n // We're missing some items because of the limit. We need to add them back.\n // The easiest way is to mark the cache entry as dirty, which will cause\n // it to be requeried after the write-transaction successfully completes.\n cacheEntry.dirty = true;\n }\n }\n return immutable ? Object.freeze(finalResult) as any[] : finalResult;\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function areRangesEqual(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n cmp(r1.lower, r2.lower) === 0 &&\n cmp(r1.upper, r2.upper) === 0 &&\n !!r1.lowerOpen === !!r2.lowerOpen &&\n !!r1.upperOpen === !!r2.upperOpen\n );\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function compareLowers(lower1: any, lower2: any, lowerOpen1: boolean, lowerOpen2: boolean) {\n if (lower1 === undefined) return lower2 !== undefined ? -1 : 0;\n if (lower2 === undefined) return 1; // since lower1 !== undefined\n const c = cmp(lower1, lower2);\n if (c === 0) {\n if (lowerOpen1 && lowerOpen2) return 0;\n if (lowerOpen1) return 1\n if (lowerOpen2) return -1;\n }\n return c;\n}\n\nexport function compareUppers(upper1: any, upper2: any, upperOpen1: boolean, upperOpen2: boolean) {\n if (upper1 === undefined) return upper2 !== undefined ? 1 : 0;\n if (upper2 === undefined) return -1; // since upper1 !== undefined\n const c = cmp(upper1, upper2);\n if (c === 0) {\n if (upperOpen1 && upperOpen2) return 0;\n if (upperOpen1) return -1\n if (upperOpen2) return 1;\n }\n return c;\n}\n\nexport function isSuperRange(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 &&\n compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0\n );\n}","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreCountRequest,\n DBCoreQueryRequest,\n} from '../../public/types/dbcore';\nimport { areRangesEqual } from './are-ranges-equal';\nimport { cache } from './cache';\nimport { isSuperRange } from './is-super-range';\n\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query',\n req: DBCoreQueryRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'count',\n req: DBCoreCountRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query' | 'count',\n req: Partial & Partial\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]] {\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return [];\n const queries = tblCache.queries[type];\n if (!queries) return [null, false, tblCache, null];\n const indexName = req.query ? req.query.index.name : null;\n const entries = queries[indexName || ''];\n if (!entries) return [null, false, tblCache, null];\n\n switch (type) {\n case 'query':\n const equalEntry = entries.find(\n (entry) =>\n (entry.req as DBCoreQueryRequest).limit === req.limit &&\n (entry.req as DBCoreQueryRequest).values === req.values &&\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n if (equalEntry)\n return [\n equalEntry,\n true, // exact match\n tblCache,\n entries,\n ];\n const superEntry = entries.find((entry) => {\n const limit = 'limit' in entry.req ? entry.req.limit : Infinity;\n return (\n limit >= req.limit &&\n (req.values ? (entry.req as DBCoreQueryRequest).values : true) &&\n isSuperRange(entry.req.query.range, req.query.range)\n );\n });\n return [superEntry, false, tblCache, entries];\n case 'count':\n const countQuery = entries.find((entry) =>\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n return [countQuery, !!countQuery, tblCache, entries];\n }\n}\n","import { delArrayItem } from \"../../functions/utils\";\nimport { CacheEntry } from \"../../public/types/cache\";\n\nexport function subscribeToCacheEntry(cacheEntry: CacheEntry, container: CacheEntry[], requery: ()=>void, signal: AbortSignal) {\n cacheEntry.subscribers.add(requery);\n signal.addEventListener(\"abort\", () => {\n cacheEntry.subscribers.delete(requery);\n if (cacheEntry.subscribers.size === 0) {\n enqueForDeletion(cacheEntry, container);\n }\n });\n}\n\n\nfunction enqueForDeletion(cacheEntry: CacheEntry, container: CacheEntry[]) {\n setTimeout(() => {\n if (cacheEntry.subscribers.size === 0) { // Still empty (no new subscribers readded after grace time)\n delArrayItem(container, cacheEntry);\n }\n }, 3000);\n}\n","import { LiveQueryContext } from '..';\nimport type { Transaction } from '../../classes/transaction';\nimport { getEffectiveKeys } from '../../dbcore/get-effective-keys';\nimport { deepClone, delArrayItem, setByKeyPath } from '../../functions/utils';\nimport DexiePromise, { PSD } from '../../helpers/promise';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport {\n DBCore, DBCoreMutateRequest, DBCoreMutateResponse, DBCoreQueryRequest,\n DBCoreQueryResponse\n} from '../../public/types/dbcore';\nimport { Middleware } from '../../public/types/middleware';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { adjustOptimisticFromFailures } from './adjust-optimistic-request-from-failures';\nimport { applyOptimisticOps } from './apply-optimistic-ops';\nimport { cache } from './cache';\nimport { findCompatibleQuery } from './find-compatible-query';\nimport { isCachableContext } from './is-cachable-context';\nimport { isCachableRequest } from './is-cachable-request';\nimport { signalSubscribersLazily } from './signalSubscribers';\nimport { subscribeToCacheEntry } from './subscribe-cachentry';\n\nexport const cacheMiddleware: Middleware = {\n stack: 'dbcore',\n level: 0,\n name: 'Cache',\n create: (core) => {\n const dbName = core.schema.name;\n const coreMW: DBCore = {\n ...core,\n transaction: (stores, mode, options) => {\n const idbtrans = core.transaction(\n stores,\n mode,\n options\n ) as IDBTransaction & {\n mutatedParts?: ObservabilitySet;\n _explicit?: boolean;\n };\n // Maintain TblQueryCache.ops array when transactions commit or abort\n if (mode === 'readwrite') {\n const ac = new AbortController();\n const { signal } = ac;\n const endTransaction = (wasCommitted: boolean) => () => {\n ac.abort();\n if (mode === 'readwrite') {\n // Collect which subscribers to notify:\n const affectedSubscribers = new Set<()=>void>();\n\n // Go through all tables in transaction and check if they have any optimistic updates\n for (const storeName of stores) {\n const tblCache = cache[`idb://${dbName}/${storeName}`];\n if (tblCache) {\n const table = core.table(storeName);\n // Pick optimistic ops that are part of this transaction\n const ops = tblCache.optimisticOps.filter(\n (op) => op.trans === idbtrans\n );\n // Transaction was marked as _explicit in enterTransactionScope(), transaction-helpers.ts.\n if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) {\n // Invalidate all queries that overlap with the mutated parts and signal their subscribers\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) {\n delArrayItem(entries, entry); // Remove the entry from the cache so it can be refreshed\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n } else if (ops.length > 0) {\n // Remove them from the optimisticOps array\n tblCache.optimisticOps = tblCache.optimisticOps.filter(\n (op) => op.trans !== idbtrans\n );\n // Commit or abort the optimistic updates\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (\n entry.res != null && // if entry.promise but not entry.res, we're fine. Query will resume now and get the result.\n idbtrans.mutatedParts/* &&\n obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)*/\n ) {\n if (wasCommitted && !entry.dirty) {\n const freezeResults = Object.isFrozen(entry.res);\n const modRes = applyOptimisticOps(\n entry.res as any[],\n entry.req,\n ops,\n table,\n entry,\n freezeResults\n );\n if (entry.dirty) {\n // Found out at this point that the entry is dirty - not to rely on!\n delArrayItem(entries, entry);\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n } else if (modRes !== entry.res) {\n entry.res = modRes;\n // Update promise\n entry.promise = DexiePromise.resolve({result: modRes} satisfies DBCoreQueryResponse);\n \n // No need to notify subscribers. They already have this value.\n // We have just updated the value of the cache without having to\n // requery the database - because we know the result for this\n // query based on computing the operations and applying them\n // to the previous result.\n }\n } else {\n if (entry.dirty) {\n // If the entry is dirty we need to get rid of it so that\n // a new entry will be created when the query is run again.\n delArrayItem(entries, entry);\n }\n // If we're not committing, we need to notify subscribers that the\n // optimistic updates are no longer valid.\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n }\n }\n }\n }\n affectedSubscribers.forEach((requery) => requery());\n }\n };\n idbtrans.addEventListener('abort', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('error', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('complete', endTransaction(true), {\n signal,\n });\n }\n return idbtrans;\n },\n table(tableName: string) {\n const downTable = core.table(tableName);\n const primKey = downTable.schema.primaryKey;\n const tableMW = {\n ...downTable,\n mutate(req: DBCoreMutateRequest): Promise {\n const trans = PSD.trans as Transaction;\n if (\n primKey.outbound || // Non-inbound tables are harded to apply optimistic updates on because we can't know primary key of results\n trans.db._options.cache === 'disabled' || // User has opted-out from caching\n trans.explicit // It's an explicit write transaction being made. Don't affect cache until transaction commits.\n ) {\n // Just forward the request to the core.\n return downTable.mutate(req);\n }\n // Find the TblQueryCache for this table:\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return downTable.mutate(req);\n\n const promise = downTable.mutate(req);\n if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(key => key == null))) {\n // There are some autoIncremented keys not set yet. Need to wait for completion before we can reliably enqueue the operation.\n // (or there are too many objects so we lazy out to avoid performance bottleneck for large bulk inserts)\n promise.then((res) => { // We need to extract result keys and generate cloned values with the keys set (so that applyOptimisticOps can work)\n // But we have a problem! The req.mutatedParts is still not complete so we have to actively add the keys to the unsignaledParts set manually.\n const reqWithResolvedKeys = {\n ...req,\n values: req.values.map((value, i) => {\n const valueWithKey = primKey.keyPath?.includes('.')\n ? deepClone(value)\n : {\n ...value,\n };\n setByKeyPath(valueWithKey, primKey.keyPath, res.results![i]);\n return valueWithKey;\n })\n };\n const adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res);\n tblCache.optimisticOps.push(adjustedReq);\n // Signal subscribers after the observability middleware has complemented req.mutatedParts with the new keys.\n // We must queue the task so that we get the req.mutatedParts updated by observability middleware first.\n // If we refactor the dependency between observability middleware and this middleware we might not need to queue the task.\n queueMicrotask(()=>req.mutatedParts && signalSubscribersLazily(req.mutatedParts)); // Reason for double laziness: in user awaits put and then does another put, signal once.\n });\n } else {\n // Enque the operation immediately\n tblCache.optimisticOps.push(req);\n // Signal subscribers that there are mutated parts\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts);\n promise.then((res) => {\n if (res.numFailures > 0) {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n const adjustedReq = adjustOptimisticFromFailures(tblCache, req, res);\n if (adjustedReq) {\n tblCache.optimisticOps.push(adjustedReq);\n }\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n }\n });\n promise.catch(()=> {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n });\n }\n return promise;\n },\n query(req: DBCoreQueryRequest): Promise {\n if (!isCachableContext(PSD, downTable) || !isCachableRequest(\"query\", req)) return downTable.query(req);\n const freezeResults =\n (PSD as LiveQueryContext).trans?.db._options.cache === 'immutable';\n const { requery, signal } = PSD as LiveQueryContext;\n let [cacheEntry, exactMatch, tblCache, container] =\n findCompatibleQuery(dbName, tableName, 'query', req);\n if (cacheEntry && exactMatch) {\n cacheEntry.obsSet = req.obsSet!; // So that optimistic result is monitored.\n // How? - because observability-middleware will track result where optimistic\n // mutations are applied and record it in the cacheEntry.\n // TODO: CHANGE THIS! The difference is resultKeys only.\n // Wanted behavior:\n // * cacheEntry obsSet should represent the obsSet without optimistic updates (so it can be checked when merging ops in tx commit)\n // * cacheEntry optimisticObsSet should represent the obsSet with current optimistic updates. It should be updated when adding an op\n // by adding the primary keys of the put/add/delete operation to the set.\n // * observability-middleware should stop recording req.obsSet when a cache entry exact match is found because it won't be used anyway.\n // I'm thinking of merging observability-middleware with cache-middleware into one single middleware because the dependencies are too\n // tight between them.\n } else {\n // --> TODO here: If not exact match, check if we have a superset to extract\n // the data from.\n\n // No cached result found. We need to query the database and cache the result.\n const promise = downTable.query(req).then((res) => {\n // Freeze or clone results\n const result = res.result;\n if (cacheEntry) cacheEntry.res = result;\n if (freezeResults) {\n // For performance reasons don't deep freeze.\n // Only freeze the top-level array and its items.\n // This is good enough to teach users that the result must be treated as immutable\n // without enforcing it recursively on the entire result (which is not even possible\n // for things like Date objects and typed arrays)\n for (let i = 0, l = result.length; i < l; ++i) {\n Object.freeze(result[i]);\n }\n Object.freeze(result);\n } else {\n // If not frozen, we need to clone the result to avoid user mutating the cache\n // When we do this, user's must feel conformable with the fact that the result\n // can be mutated deeply - user is not expected to have any respect for immutability.\n res.result = deepClone(result);\n }\n return res;\n }).catch(error => {\n // In case the query operation failed, we need to remove it from the cache\n // so that subsequent calls does not get the same error but re-evaluate\n // the query.\n if (container && cacheEntry) delArrayItem(container, cacheEntry);\n return Promise.reject(error);\n });\n cacheEntry = {\n obsSet: req.obsSet!,\n promise,\n subscribers: new Set(),\n type: 'query',\n req,\n dirty: false,\n };\n if (container) {\n container.push(cacheEntry);\n } else {\n container = [cacheEntry];\n if (!tblCache) {\n tblCache = cache[`idb://${dbName}/${tableName}`] = {\n queries: {\n query: {},\n count: {},\n },\n objs: new Map(),\n optimisticOps: [],\n unsignaledParts: {}\n };\n }\n tblCache.queries.query[req.query.index.name || ''] = container;\n }\n }\n subscribeToCacheEntry(cacheEntry, container!, requery, signal);\n return cacheEntry.promise.then((res: DBCoreQueryResponse) => {\n return {\n result: applyOptimisticOps(\n res.result,\n req,\n tblCache?.optimisticOps,\n downTable,\n cacheEntry!,\n freezeResults\n ) as any[], // readonly any[]\n };\n });\n },\n };\n return tableMW;\n },\n };\n return coreMW;\n },\n};\n\n\n","import { type Dexie } from \"../classes/dexie\";\nimport { type Table } from \"../classes/table\";\nimport { type Transaction } from \"../classes/transaction\";\n\nexport function vipify(\n target: T,\n vipDb: Dexie\n): T {\n return new Proxy(target, {\n get (target, prop, receiver) {\n // The \"db\" prop of the table or transaction is the only one we need to\n // override. The rest of the props can be accessed from the original\n // object.\n if (prop === 'db') return vipDb;\n return Reflect.get(target, prop, receiver);\n }\n });\n}\n","// Import types from the public API\nimport { Dexie as IDexie } from \"../../public/types/dexie\";\nimport { DexieOptions, DexieConstructor } from \"../../public/types/dexie-constructor\";\nimport { DbEvents } from \"../../public/types/db-events\";\n//import { PromiseExtended, PromiseExtendedConstructor } from '../../public/types/promise-extended';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from \"../../public/types/table-schema\";\nimport { DbSchema } from '../../public/types/db-schema';\n\n// Internal imports\nimport { Table, TableConstructor, createTableConstructor } from \"../table\";\nimport { Collection, CollectionConstructor, createCollectionConstructor } from '../collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { WhereClauseConstructor, createWhereClauseConstructor } from '../where-clause/where-clause-constructor';\nimport { Transaction } from '../transaction';\nimport { TransactionConstructor, createTransactionConstructor } from '../transaction/transaction-constructor';\nimport { Version } from \"../version/version\";\nimport { VersionConstructor, createVersionConstructor } from '../version/version-constructor';\n\n// Other imports...\nimport { DexieEventSet } from '../../public/types/dexie-event-set';\nimport { DexieExceptionClasses } from '../../public/types/errors';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\nimport Promise, { PSD, globalPSD } from '../../helpers/promise';\nimport { extend, override, keys, hasOwn } from '../../functions/utils';\nimport Events from '../../helpers/Events';\nimport { maxString, connections, READONLY, READWRITE } from '../../globals/constants';\nimport { getMaxKey } from '../../functions/quirks';\nimport { exceptions } from '../../errors';\nimport { lowerVersionFirst } from '../version/schema-helpers';\nimport { dexieOpen } from './dexie-open';\nimport { wrap } from '../../helpers/promise';\nimport { _onDatabaseDeleted } from '../../helpers/database-enumerator';\nimport { eventRejectHandler } from '../../functions/event-wrappers';\nimport { extractTransactionArgs, enterTransactionScope } from './transaction-helpers';\nimport { TransactionMode } from '../../public/types/transaction-mode';\nimport { rejection } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { DBCore } from '../../public/types/dbcore';\nimport { Middleware, DexieStacks } from '../../public/types/middleware';\nimport { virtualIndexMiddleware } from '../../dbcore/virtual-index-middleware';\nimport { hooksMiddleware } from '../../hooks/hooks-middleware';\nimport { IndexableType } from '../../public';\nimport { observabilityMiddleware } from '../../live-query/observability-middleware';\nimport { cacheExistingValuesMiddleware } from '../../dbcore/cache-existing-values-middleware';\nimport { cacheMiddleware } from \"../../live-query/cache/cache-middleware\";\nimport { vipify } from \"../../helpers/vipify\";\n\nexport interface DbReadyState {\n dbOpenError: any;\n isBeingOpened: boolean;\n onReadyBeingFired: undefined | Function[];\n openComplete: boolean;\n dbReadyResolve: () => void;\n dbReadyPromise: Promise;\n cancelOpen: (reason?: Error) => void;\n openCanceller: Promise & { _stackHolder?: Error };\n autoSchema: boolean;\n vcFired?: boolean;\n PR1398_maxLoop?: number;\n autoOpen?: boolean;\n}\n\nexport class Dexie implements IDexie {\n _options: DexieOptions;\n _state: DbReadyState;\n _versions: Version[];\n _storeNames: string[];\n _deps: DexieDOMDependencies;\n _allTables: { [name: string]: Table; };\n _createTransaction: (this: Dexie, mode: IDBTransactionMode, storeNames: ArrayLike, dbschema: { [tableName: string]: TableSchema; }, parentTransaction?: Transaction) => Transaction;\n _dbSchema: { [tableName: string]: TableSchema; };\n _hasGetAll?: boolean;\n _maxKey: IndexableType;\n _fireOnBlocked: (ev: Event) => void;\n _middlewares: {[StackName in keyof DexieStacks]?: Middleware[]} = {};\n _vip?: boolean;\n _novip: Dexie;// db._novip is to escape to orig db from db.vip.\n core: DBCore;\n\n name: string;\n verno: number = 0;\n idbdb: IDBDatabase | null;\n vip: Dexie;\n on: DbEvents;\n\n Table: TableConstructor;\n WhereClause: WhereClauseConstructor;\n Collection: CollectionConstructor;\n Version: VersionConstructor;\n Transaction: TransactionConstructor;\n static disableBfCache?: boolean;\n\n constructor(name: string, options?: DexieOptions) {\n const deps = (Dexie as any as DexieConstructor).dependencies;\n this._options = options = {\n // Default Options\n addons: (Dexie as any as DexieConstructor).addons, // Pick statically registered addons by default\n autoOpen: true, // Don't require db.open() explicitely.\n // Default DOM dependency implementations from static prop.\n indexedDB: deps.indexedDB, // Backend IndexedDB api. Default to browser env.\n IDBKeyRange: deps.IDBKeyRange, // Backend IDBKeyRange api. Default to browser env.\n cache: 'cloned', // Default to cloned for backward compatibility. For best performance and least memory consumption use 'immutable'.\n ...options\n }; \n this._deps = {\n indexedDB: options.indexedDB as IDBFactory,\n IDBKeyRange: options.IDBKeyRange as typeof IDBKeyRange\n };\n const {\n addons,\n } = options;\n this._dbSchema = {};\n this._versions = [];\n this._storeNames = [];\n this._allTables = {};\n this.idbdb = null;\n this._novip = this;\n const state: DbReadyState = {\n dbOpenError: null,\n isBeingOpened: false,\n onReadyBeingFired: null,\n openComplete: false,\n dbReadyResolve: nop,\n dbReadyPromise: null as Promise,\n cancelOpen: nop,\n openCanceller: null as Promise,\n autoSchema: true,\n PR1398_maxLoop: 3,\n autoOpen: options.autoOpen,\n };\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n this._state = state;\n this.name = name;\n this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", \"close\", { ready: [promisableChain, nop] }) as DbEvents;\n this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => {\n return (subscriber, bSticky) => {\n (Dexie as any as DexieConstructor).vip(() => {\n const state = this._state;\n if (state.openComplete) {\n // Database already open. Call subscriber asap.\n if (!state.dbOpenError) Promise.resolve().then(subscriber);\n // bSticky: Also subscribe to future open sucesses (after close / reopen) \n if (bSticky) subscribe(subscriber);\n } else if (state.onReadyBeingFired) {\n // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected\n state.onReadyBeingFired.push(subscriber);\n if (bSticky) subscribe(subscriber);\n } else {\n // Database not yet open. Subscribe to it.\n subscribe(subscriber);\n // If bSticky is falsy, make sure to unsubscribe subscriber when fired once.\n const db = this;\n if (!bSticky) subscribe(function unsubscribe() {\n db.on.ready.unsubscribe(subscriber);\n db.on.ready.unsubscribe(unsubscribe);\n });\n }\n });\n }\n });\n\n // Create derived classes bound to this instance of Dexie:\n this.Collection = createCollectionConstructor(this);\n this.Table = createTableConstructor(this);\n this.Transaction = createTransactionConstructor(this);\n this.Version = createVersionConstructor(this);\n this.WhereClause = createWhereClauseConstructor(this);\n\n // Default subscribers to \"versionchange\" and \"blocked\".\n // Can be overridden by custom handlers. If custom handlers return false, these default\n // behaviours will be prevented.\n this.on(\"versionchange\", ev => {\n // Default behavior for versionchange event is to close database connection.\n // Caller can override this behavior by doing db.on(\"versionchange\", function(){ return false; });\n // Let's not block the other window from making it's delete() or open() call.\n // NOTE! This event is never fired in IE,Edge or Safari.\n if (ev.newVersion > 0)\n console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`);\n else\n console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`);\n this.close({disableAutoOpen: false});\n // In many web applications, it would be recommended to force window.reload()\n // when this event occurs. To do that, subscribe to the versionchange event\n // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion)\n // The reason for this is that your current web app obviously has old schema code that needs\n // to be updated. Another window got a newer version of the app and needs to upgrade DB but\n // your window is blocking it unless we close it here.\n });\n this.on(\"blocked\", ev => {\n if (!ev.newVersion || ev.newVersion < ev.oldVersion)\n console.warn(`Dexie.delete('${this.name}') was blocked`);\n else\n console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`);\n });\n\n this._maxKey = getMaxKey(options.IDBKeyRange as typeof IDBKeyRange);\n\n this._createTransaction = (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n parentTransaction?: Transaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction);\n\n this._fireOnBlocked = ev => {\n this.on(\"blocked\").fire(ev);\n // Workaround (not fully*) for missing \"versionchange\" event in IE,Edge and Safari:\n connections\n .filter(c => c.name === this.name && c !== this && !c._state.vcFired)\n .map(c => c.on(\"versionchange\").fire(ev));\n }\n\n // Default middlewares:\n this.use(cacheExistingValuesMiddleware);\n this.use(cacheMiddleware);\n this.use(observabilityMiddleware);\n this.use(virtualIndexMiddleware);\n this.use(hooksMiddleware);\n\n const vipDB = new Proxy(this, {\n get: (_, prop, receiver) => {\n if (prop === '_vip') return true;\n if (prop === 'table') return (tableName: string) => vipify(this.table(tableName), vipDB);\n const rv = Reflect.get(_, prop, receiver);\n if (rv instanceof Table) return vipify(rv, vipDB);\n if (prop === 'tables') return (rv as Table[]).map(t => vipify(t, vipDB));\n if (prop === '_createTransaction') return function() {\n const tx: Transaction = (rv as typeof this._createTransaction).apply(this, arguments);\n return vipify(tx, vipDB);\n }\n return rv;\n }\n });\n this.vip = vipDB;\n\n // Call each addon:\n addons.forEach(addon => addon(this));\n }\n\n version(versionNumber: number): Version {\n if (isNaN(versionNumber) || versionNumber < 0.1) throw new exceptions.Type(`Given version is not a positive number`);\n versionNumber = Math.round(versionNumber * 10) / 10;\n if (this.idbdb || this._state.isBeingOpened)\n throw new exceptions.Schema(\"Cannot add version when database is open\");\n this.verno = Math.max(this.verno, versionNumber);\n const versions = this._versions;\n var versionInstance = versions.filter(\n v => v._cfg.version === versionNumber)[0];\n if (versionInstance) return versionInstance;\n versionInstance = new this.Version(versionNumber);\n versions.push(versionInstance);\n versions.sort(lowerVersionFirst);\n versionInstance.stores({}); // Derive earlier schemas by default.\n // Disable autoschema mode, as at least one version is specified.\n this._state.autoSchema = false;\n return versionInstance;\n }\n\n _whenReady(fn: () => Promise): Promise {\n return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new Promise((resolve, reject) => {\n if (this._state.openComplete) {\n // idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return reject(new exceptions.DatabaseClosed(this._state.dbOpenError));\n }\n if (!this._state.isBeingOpened) {\n if (!this._state.autoOpen) {\n reject(new exceptions.DatabaseClosed());\n return;\n }\n this.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n this._state.dbReadyPromise.then(resolve, reject);\n }).then(fn);\n }\n\n use({stack, create, level, name}: Middleware): this {\n if (name) this.unuse({stack, name}); // Be able to replace existing middleware.\n const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n middlewares.push({stack, create, level: level == null ? 10 : level, name});\n middlewares.sort((a, b) => a.level - b.level);\n // Todo update db.core and db.tables...core ? Or should be expect this to have effect\n // only after next open()?\n return this;\n }\n\n unuse({stack, create}: Middleware<{stack: keyof DexieStacks}>): this;\n unuse({stack, name}: {stack: keyof DexieStacks, name: string}): this;\n unuse({stack, name, create}: {stack: keyof DexieStacks, name?: string, create?: Function}) {\n if (stack && this._middlewares[stack]) {\n this._middlewares[stack] = this._middlewares[stack].filter(mw =>\n create ? mw.create !== create : // Given middleware has a create method. Match that exactly.\n name ? mw.name !== name : // Given middleware spec \n false);\n }\n return this;\n }\n\n open() {\n return usePSD(\n globalPSD, // Enforce global scope here since db.open() can be part of a live query or transaction scope\n () => dexieOpen(this)\n );\n }\n\n _close(): void {\n const state = this._state;\n const idx = connections.indexOf(this);\n if (idx >= 0) connections.splice(idx, 1);\n if (this.idbdb) {\n try { this.idbdb.close(); } catch (e) { }\n this.idbdb = null;\n } \n // Reset dbReadyPromise promise:\n if (!state.isBeingOpened) {\n // Only if not being opened, reset these promises.\n // Otherwise, keep them so existing promise consumers will resolve when db\n // db is reopened later on, in case closing for purpose reopening, using {disableAutoOpen: false}.\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n }\n }\n\n close({disableAutoOpen} = {disableAutoOpen: true}): void {\n const state = this._state;\n if (disableAutoOpen) {\n if (state.isBeingOpened) {\n // cancel before the call to this._close() because this._close() will recreate dbReadyPromise and openCanceller.\n state.cancelOpen(new exceptions.DatabaseClosed());\n }\n this._close();\n state.autoOpen = false;\n state.dbOpenError = new exceptions.DatabaseClosed();\n } else {\n this._close();\n state.autoOpen = this._options.autoOpen ||\n state.isBeingOpened; // If an open call is ongoing, that same promise will resolve when db is reopend.\n state.openComplete = false;\n state.dbOpenError = null;\n }\n }\n\n delete(closeOptions = {disableAutoOpen: true}): Promise {\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n const hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; \n const state = this._state;\n return new Promise((resolve, reject) => {\n const doDelete = () => {\n this.close(closeOptions);\n var req = this._deps.indexedDB.deleteDatabase(this.name);\n req.onsuccess = wrap(() => {\n _onDatabaseDeleted(this._deps, this.name);\n resolve();\n });\n req.onerror = eventRejectHandler(reject);\n req.onblocked = this._fireOnBlocked;\n }\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n if (hasInvalidArguments) throw new exceptions.InvalidArgument(\"Invalid closeOptions argument to db.delete()\");\n if (state.isBeingOpened) {\n state.dbReadyPromise.then(doDelete);\n } else {\n doDelete();\n }\n });\n }\n\n backendDB() {\n return this.idbdb;\n }\n\n isOpen() {\n return this.idbdb !== null;\n }\n\n hasBeenClosed() {\n const dbOpenError = this._state.dbOpenError;\n return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n }\n\n hasFailed() {\n return this._state.dbOpenError !== null;\n }\n\n dynamicallyOpened() {\n return this._state.autoSchema;\n }\n\n get tables () {\n return keys(this._allTables).map(name => this._allTables[name]);\n }\n\n transaction(): Promise {\n const args = extractTransactionArgs.apply(this, arguments);\n return this._transaction.apply(this, args);\n }\n\n _transaction(mode: TransactionMode, tables: Array, scopeFunc: Function) {\n let parentTransaction = PSD.trans as Transaction | undefined;\n // Check if parent transactions is bound to this db instance, and if caller wants to reuse it\n if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) parentTransaction = null;\n const onlyIfCompatible = mode.indexOf('?') !== -1;\n mode = mode.replace('!', '').replace('?', '') as TransactionMode; // Ok. Will change arguments[0] as well but we wont touch arguments henceforth.\n let idbMode: IDBTransactionMode,\n storeNames;\n\n try {\n //\n // Get storeNames from arguments. Either through given table instances, or through given table names.\n //\n storeNames = tables.map(table => {\n var storeName = table instanceof this.Table ? table.name : table;\n if (typeof storeName !== 'string') throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n return storeName;\n });\n\n //\n // Resolve mode. Allow shortcuts \"r\" and \"rw\".\n //\n if (mode == \"r\" || mode === READONLY)\n idbMode = READONLY;\n else if (mode == \"rw\" || mode == READWRITE)\n idbMode = READWRITE;\n else\n throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n\n if (parentTransaction) {\n // Basic checks\n if (parentTransaction.mode === READONLY && idbMode === READWRITE) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n }\n if (parentTransaction) {\n storeNames.forEach(storeName => {\n if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Table \" + storeName +\n \" not included in parent transaction.\");\n }\n });\n }\n if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n // '?' mode should not keep using an inactive transaction.\n parentTransaction = null;\n }\n }\n } catch (e) {\n return parentTransaction ?\n parentTransaction._promise(null, (_, reject) => {reject(e);}) :\n rejection (e);\n }\n // If this is a sub-transaction, lock the parent and then launch the sub-transaction.\n const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);\n return (parentTransaction ?\n parentTransaction._promise(idbMode, enterTransaction, \"lock\") :\n PSD.trans ?\n // no parent transaction despite PSD.trans exists. Make sure also\n // that the zone we create is not a sub-zone of current, because\n // Promise.follow() should not wait for it if so.\n usePSD(PSD.transless, ()=>this._whenReady(enterTransaction)) :\n this._whenReady (enterTransaction));\n }\n\n table(tableName: string): Table;\n table(tableName: string): ITable;\n table(tableName: string): Table {\n if (!hasOwn(this._allTables, tableName)) {\n throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); }\n return this._allTables[tableName];\n }\n}\n","import {\n Observable as IObservable,\n Observer,\n Subscription,\n} from \"../../public/types/observable\";\n\nconst symbolObservable: typeof Symbol.observable =\n typeof Symbol !== \"undefined\" && \"observable\" in Symbol\n ? Symbol.observable\n : \"@@observable\" as any;\n\nexport class Observable implements IObservable {\n private _subscribe: (observer: Observer) => Subscription;\n hasValue?: ()=>boolean;\n getValue?: ()=>T;\n\n constructor(subscribe: (observer: Observer) => Subscription) {\n this._subscribe = subscribe;\n }\n\n subscribe(\n onNext?: ((value: T) => void) | null,\n onError?: ((error: any) => void) | null,\n onComplete?: (() => void) | null\n ): Subscription;\n subscribe(observer?: Observer | null): Subscription;\n subscribe(x?: any, error?: any, complete?: any): Subscription {\n return this._subscribe(\n !x || typeof x === \"function\" ? { next: x, error, complete } : x\n );\n }\n\n [symbolObservable]() {\n return this;\n }\n}\n","import { _global } from '../../globals/global';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\n\nexport let domDeps: DexieDOMDependencies\n\ntry {\n domDeps = {\n // Required:\n indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n };\n} catch (e) {\n domDeps = { indexedDB: null, IDBKeyRange: null };\n}\n","import { _global, isAsyncFunction, keys, objectIsEmpty } from '../functions/utils';\nimport {\n globalEvents,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport {\n beginMicroTickScope,\n decrementExpectedAwaits,\n endMicroTickScope,\n execInGlobalContext,\n incrementExpectedAwaits,\n NativePromise,\n newScope,\n PSD,\n usePSD,\n} from '../helpers/promise';\nimport { ObservabilitySet } from '../public/types/db-events';\nimport {\n Observable as IObservable,\n Subscription,\n} from '../public/types/observable';\nimport { Observable } from '../classes/observable/observable';\nimport { extendObservabilitySet } from './extend-observability-set';\nimport { rangesOverlap } from '../helpers/rangeset';\nimport { domDeps } from '../classes/dexie/dexie-dom-dependencies';\nimport { Transaction } from '../classes/transaction';\nimport { obsSetsOverlap } from './obs-sets-overlap';\n\nexport interface LiveQueryContext {\n subscr: ObservabilitySet;\n signal: AbortSignal;\n requery: () => void;\n trans: null | Transaction;\n querier: Function; // For debugging purposes and Error messages\n}\n\nexport function liveQuery(querier: () => T | Promise): IObservable {\n let hasValue = false;\n let currentValue: T;\n const observable = new Observable((observer) => {\n const scopeFuncIsAsync = isAsyncFunction(querier);\n function execute(ctx: LiveQueryContext) {\n const wasRootExec = beginMicroTickScope(); // Performance: Avoid starting a new microtick scope within the async context.\n try {\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n let rv = newScope(querier, ctx);\n if (scopeFuncIsAsync) {\n // Make sure to set rv = rv.finally in order to wait to after decrementExpectedAwaits() has been called.\n // This fixes zone leaking issue that the liveQuery zone can leak to observer's next microtask.\n rv = (rv as Promise).finally(decrementExpectedAwaits);\n }\n return rv;\n } finally {\n wasRootExec && endMicroTickScope(); // Given that we created the microtick scope, we must also end it.\n }\n }\n\n let closed = false;\n let abortController: AbortController;\n\n let accumMuts: ObservabilitySet = {};\n let currentObs: ObservabilitySet = {};\n\n const subscription: Subscription = {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n if (closed) return;\n closed = true;\n if (abortController) abortController.abort();\n if (startedListening) globalEvents.storagemutated.unsubscribe(mutationListener);\n },\n };\n\n observer.start && observer.start(subscription); // https://github.com/tc39/proposal-observable\n\n let startedListening = false;\n\n const doQuery = () => execInGlobalContext(_doQuery);\n\n function shouldNotify() {\n return obsSetsOverlap(currentObs, accumMuts);\n }\n\n const mutationListener = (parts: ObservabilitySet) => {\n extendObservabilitySet(accumMuts, parts);\n if (shouldNotify()) {\n doQuery();\n }\n };\n\n const _doQuery = () => {\n if (\n closed || // closed - don't run!\n !domDeps.indexedDB) // SSR in sveltekit, nextjs etc\n {\n return;\n }\n accumMuts = {};\n const subscr: ObservabilitySet = {};\n // Abort signal fill three purposes:\n // 1. Abort the query if the observable is unsubscribed.\n // 2. Abort the query if a new query is made before the previous one has completed.\n // 3. For cached queries to know if they should remain in memory or could be enqued for being freed up.\n // (they will remain in memory for a short time and if noone needs them again, they will eventually be freed up)\n if (abortController) abortController.abort(); // Cancel previous query. Last query will be cancelled on unsubscribe().\n abortController = new AbortController();\n \n const ctx: LiveQueryContext = {\n subscr,\n signal: abortController.signal,\n requery: doQuery,\n querier,\n trans: null // Make the scope transactionless (don't reuse transaction from outer scope of the caller of subscribe())\n }\n const ret = execute(ctx);\n Promise.resolve(ret).then(\n (result) => {\n hasValue = true;\n currentValue = result;\n if (closed || ctx.signal.aborted) {\n // closed - no subscriber anymore.\n // signal.aborted - new query was made before this one completed and\n // the querier might have catched AbortError and return successful result.\n // If so, we should not rely in that result because we know we have aborted\n // this run, which means there's another run going on that will handle accumMuts\n // and we must not base currentObs on the half-baked subscr.\n return;\n }\n accumMuts = {};\n // Update what we are subscribing for based on this last run:\n currentObs = subscr;\n if (!objectIsEmpty(currentObs) && !startedListening) {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);\n startedListening = true;\n }\n execInGlobalContext(()=>!closed && observer.next && observer.next(result));\n },\n (err) => {\n hasValue = false;\n if (!['DatabaseClosedError', 'AbortError'].includes(err?.name)) {\n if (!closed) execInGlobalContext(()=>{\n if (closed) return;\n observer.error && observer.error(err);\n });\n }\n }\n );\n };\n\n // Use setTimeot here to guarantee execution in a private macro task before and\n // after. The helper executeInGlobalContext(_doQuery) is not enough here because\n // caller of `subscribe()` could be anything, such as a frontend framework that will\n // continue in the same tick after subscribe() is called and call other\n // eftects, that could involve dexie operations such as writing to the DB.\n // If that happens, the private zone echoes from a live query tast started here\n // could still be ongoing when the other operations start and make them inherit\n // the async context from a live query.\n setTimeout(doQuery, 0);\n return subscription;\n });\n observable.hasValue = () => hasValue;\n observable.getValue = () => currentValue;\n return observable;\n}\n","import { Dexie as _Dexie } from './dexie';\nimport { _global } from '../../globals/global';\nimport { props, derive, extend, override, getByKeyPath, setByKeyPath, delByKeyPath, shallowClone, deepClone, asap } from '../../functions/utils';\nimport { getObjectDiff } from \"../../functions/get-object-diff\";\nimport { fullNameExceptions } from '../../errors';\nimport { DexieConstructor } from '../../public/types/dexie-constructor';\nimport { getDatabaseNames } from '../../helpers/database-enumerator';\nimport { PSD } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { newScope } from '../../helpers/promise';\nimport { rejection } from '../../helpers/promise';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { dexieStackFrameFilter, minKey, connections, DEXIE_VERSION } from '../../globals/constants';\nimport Events from '../../helpers/Events';\nimport { exceptions } from '../../errors';\nimport { errnames } from '../../errors';\nimport { getMaxKey } from '../../functions/quirks';\nimport { vip } from './vip';\nimport { globalEvents } from '../../globals/global-events';\nimport { liveQuery } from '../../live-query/live-query';\nimport { extendObservabilitySet } from '../../live-query/extend-observability-set';\nimport { domDeps } from './dexie-dom-dependencies';\nimport { cmp } from '../../functions/cmp';\nimport { cache } from '../../live-query/cache/cache';\n\n/* (Dexie) is an instance of DexieConstructor, as defined in public/types/dexie-constructor.d.ts\n* (new Dexie()) is an instance of Dexie, as defined in public/types/dexie.d.ts\n* \n* Why we're doing this?\n\n* Because we've choosen to define the public Dexie API using a DexieConstructor interface\n* rather than declaring a class. On that interface, all static props are defined.\n* In practice, class Dexie's constructor implements DexieConstructor and all member props\n* are defined in interface Dexie. We could say, it's a typescript limitation of not being\n* able to define a static interface that forces us to do the cast below.\n*/\nconst Dexie = _Dexie as any as DexieConstructor;\n\n//\n// Set all static methods and properties onto Dexie:\n// \nprops(Dexie, {\n\n // Dexie.BulkError = class BulkError {...};\n // Dexie.XXXError = class XXXError {...};\n ...fullNameExceptions,\n\n //\n // Static delete() method.\n //\n delete(databaseName: string) {\n const db = new Dexie(databaseName, {addons: []});\n return db.delete();\n },\n\n //\n // Static exists() method.\n //\n exists(name: string) {\n return new Dexie(name, { addons: [] }).open().then(db => {\n db.close();\n return true;\n }).catch('NoSuchDatabaseError', () => false);\n },\n\n //\n // Static method for retrieving a list of all existing databases at current host.\n //\n getDatabaseNames(cb) {\n try {\n return getDatabaseNames(Dexie.dependencies).then(cb);\n } catch {\n return rejection(new exceptions.MissingAPI());\n }\n },\n\n /** @deprecated */\n defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return Class;\n },\n\n ignoreTransaction(scopeFunc) {\n // In case caller is within a transaction but needs to create a separate transaction.\n // Example of usage:\n //\n // Let's say we have a logger function in our app. Other application-logic should be unaware of the\n // logger function and not need to include the 'logentries' table in all transaction it performs.\n // The logging should always be done in a separate transaction and not be dependant on the current\n // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction.\n //\n // Dexie.ignoreTransaction(function() {\n // db.logentries.add(newLogEntry);\n // });\n //\n // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction\n // in current Promise-scope.\n //\n // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an\n // API for this because\n // 1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout().\n // 2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate().\n // 3) setImmediate() is not supported in the ES standard.\n // 4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough.\n return PSD.trans ?\n usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional.\n scopeFunc(); // No need to change scope because there is no ongoing transaction.\n },\n\n vip,\n\n async: function (generatorFn: Function) {\n return function () {\n try {\n var rv = awaitIterator(generatorFn.apply(this, arguments));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n };\n },\n\n spawn: function (generatorFn, args, thiz) {\n try {\n var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n },\n\n // Dexie.currentTransaction property\n currentTransaction: {\n get: () => PSD.trans || null\n },\n\n waitFor: function (promiseOrFunction, optionalTimeout) {\n // If a function is provided, invoke it and pass the returning value to Transaction.waitFor()\n const promise = Promise.resolve(\n typeof promiseOrFunction === 'function' ?\n Dexie.ignoreTransaction(promiseOrFunction) :\n promiseOrFunction)\n .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required. \n\n // Run given promise on current transaction. If no current transaction, just return a Dexie promise based\n // on given value.\n return PSD.trans ?\n PSD.trans.waitFor(promise) :\n promise;\n },\n\n // Export our Promise implementation since it can be handy as a standalone Promise implementation\n Promise: Promise,\n\n // Dexie.debug proptery:\n // Dexie.debug = false\n // Dexie.debug = true\n // Dexie.debug = \"dexie\" - don't hide dexie's stack frames.\n debug: {\n get: () => Debug.debug,\n set: value => {\n Debug.setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter);\n }\n },\n\n // Export our derive/extend/override methodology\n derive: derive, // Deprecate?\n extend: extend, // Deprecate?\n props: props,\n override: override, // Deprecate?\n // Export our Events() function - can be handy as a toolkit\n Events: Events,\n on: globalEvents,\n liveQuery,\n extendObservabilitySet,\n // Utilities\n getByKeyPath: getByKeyPath,\n setByKeyPath: setByKeyPath,\n delByKeyPath: delByKeyPath,\n shallowClone: shallowClone,\n deepClone: deepClone,\n getObjectDiff: getObjectDiff,\n cmp,\n asap: asap,\n //maxKey: new Dexie('',{addons:[]})._maxKey,\n minKey: minKey,\n // Addon registry\n addons: [],\n // Global DB connection list\n connections: connections,\n\n //MultiModifyError: exceptions.Modify, // Obsolete!\n errnames: errnames,\n\n // Export other static classes\n //IndexSpec: IndexSpec, Obsolete!\n //TableSchema: TableSchema, Obsolete!\n\n //\n // Dependencies\n //\n // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included.\n //\n // In node.js, however, these properties must be set \"manually\" before instansiating a new Dexie().\n // For node.js, you need to require indexeddb-js or similar and then set these deps.\n //\n dependencies: domDeps,\n cache,\n\n // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc.\n semVer: DEXIE_VERSION,\n version: DEXIE_VERSION.split('.')\n .map(n => parseInt(n))\n .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))),\n\n // https://github.com/dfahlander/Dexie.js/issues/186\n // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return\n // x.default. Workaround: Set Dexie.default = Dexie.\n // default: Dexie, // Commented because solved in index-umd.ts instead.\n // Make it possible to import {Dexie} (non-default import)\n // Reason 1: May switch to that in future.\n // Reason 2: We declare it both default and named exported in d.ts to make it possible\n // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely\n // exporting the symbol, not just default exporting)\n // Dexie: Dexie // Commented because solved in index-umd.ts instead.\n});\n\nDexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange);\n","import { globalEvents, DEXIE_STORAGE_MUTATED_EVENT_NAME, STORAGE_MUTATED_DOM_EVENT_NAME } from '../globals/global-events';\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport { signalSubscribersNow } from './cache/signalSubscribers';\n\nif (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => {\n if (!propagatingLocally) {\n let event: CustomEvent;\n event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, {\n detail: updatedParts\n });\n propagatingLocally = true;\n dispatchEvent(event);\n propagatingLocally = false;\n }\n });\n addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({detail}: CustomEvent) => {\n if (!propagatingLocally) {\n propagateLocally(detail);\n }\n });\n}\n\n/** Called from listeners to BroadcastChannel and DOM event to\n * propagate the event locally into dexie's storagemutated event\n * and invalidate cached queries.\n * \n * This function is only called when the event is not originating\n * from this same Dexie module - either from another redundant dexie import\n * or from a foreign tab or worker. That's why we need to invalidate\n * the cache when this happens.\n */\nexport function propagateLocally(updateParts: ObservabilitySet) {\n let wasMe = propagatingLocally;\n try {\n propagatingLocally = true;\n // Fire the \"storagemutated\" event.\n globalEvents.storagemutated.fire(updateParts);\n // Invalidate cached queries and signal subscribers to requery.\n signalSubscribersNow(updateParts, true);\n } finally {\n propagatingLocally = wasMe;\n }\n}\n\nexport let propagatingLocally = false;\n","import {\n globalEvents,\n STORAGE_MUTATED_DOM_EVENT_NAME,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport { propagateLocally, propagatingLocally } from './propagate-locally';\n\nexport let bc: BroadcastChannel;\n\nexport let createBC = ()=>{};\n\nif (typeof BroadcastChannel !== 'undefined') {\n createBC = () => {\n bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME);\n bc.onmessage = ev => ev.data && propagateLocally(ev.data);\n }\n createBC();\n\n /**\n * The Node.js BroadcastChannel will prevent the node process from exiting\n * if the BroadcastChannel is not closed.\n * Therefore we have to call unref() which allows the process to finish\n * properly even when the BroadcastChannel is never closed.\n * @link https://nodejs.org/api/worker_threads.html#broadcastchannelunref\n * @link https://github.com/dexie/Dexie.js/pull/1576\n */\n if (typeof (bc as any).unref === 'function') {\n (bc as any).unref();\n }\n \n //\n // Propagate local changes to remote tabs, windows and workers via BroadcastChannel\n //\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n if (!propagatingLocally) {\n bc.postMessage(changedParts);\n }\n });\n}\n","import { Dexie } from \"./classes/dexie\";\nimport { connections } from \"./globals/constants\";\nimport { debug } from \"./helpers/debug\";\nimport { RangeSet } from \"./helpers/rangeset\";\nimport { bc, createBC } from \"./live-query/enable-broadcast\";\nimport { propagateLocally } from \"./live-query/propagate-locally\";\n\n\nif (typeof addEventListener !== 'undefined') {\n addEventListener('pagehide', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pagehide');\n bc?.close();\n for (const db of connections) {\n db.close({disableAutoOpen: false});\n }\n }\n });\n addEventListener('pageshow', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pageshow');\n createBC();\n propagateLocally({all: new RangeSet(-Infinity, [[]])}); // Trigger all queries to requery\n }\n });\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function add(value: number | BigInt | Array) {\n return new PropModification({add: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function remove(value: number | BigInt | Array) {\n return new PropModification({remove: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function replacePrefix(a: string, b:string) {\n return new PropModification({replacePrefix: [a, b]});\n}\n","import { Dexie } from './classes/dexie';\nimport { DexieConstructor } from './public/types/dexie-constructor';\nimport { DexiePromise } from './helpers/promise';\nimport { mapError } from './errors';\nimport * as Debug from './helpers/debug';\nimport { dexieStackFrameFilter } from './globals/constants';\n\n// Generate all static properties such as Dexie.maxKey etc\n// (implement interface DexieConstructor):\nimport './classes/dexie/dexie-static-props';\nimport './live-query/enable-broadcast';\nimport './support-bfcache';\nimport { liveQuery } from './live-query/live-query';\nimport { Entity } from './classes/entity/Entity';\nimport { cmp } from './functions/cmp';\nimport { PropModification, PropModSymbol } from './helpers/prop-modification';\nimport { replacePrefix, add, remove } from './functions/propmods';\n\n\n// Set rejectionMapper of DexiePromise so that it generally tries to map\n// DOMErrors and DOMExceptions to a DexieError instance with same name but with\n// async stack support and with a prototypal inheritance from DexieError and Error.\n// of Map DOMErrors and DOMExceptions to corresponding Dexie errors.\nDexiePromise.rejectionMapper = mapError;\n\n// Let the async stack filter focus on app code and filter away frames from dexie.min.js:\nDebug.setDebug(Debug.debug, dexieStackFrameFilter);\n\nexport { RangeSet, mergeRanges, rangesOverlap } from \"./helpers/rangeset\";\nexport { Dexie, liveQuery }; // Comply with public/index.d.ts.\nexport { Entity };\nexport { cmp };\nexport { PropModSymbol, PropModification, replacePrefix, add, remove };\nexport default Dexie;\n","// Issue #1127. Need another index.ts for the UMD module with only a default export\n// like it was before.\n// In practice though, the UMD export will also export the named export in \n// https://github.com/dfahlander/Dexie.js/blob/c9187ae60c0d7a424f85bab3af179fbbc9901c8e/src/classes/dexie/dexie-static-props.ts#L223-L228\nimport Dexie from \"./index\";\nimport * as namedExports from \"./index\";\nimport { __assign } from 'tslib';\n__assign(Dexie, namedExports, {default: Dexie});\nexport default Dexie;\n"],"names":["asap","_a","Promise","Dexie","safari14Workaround","_Dexie","Debug.debug","Debug.setDebug"],"mappings":"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"} \ No newline at end of file diff --git a/src/assets/dexie/dist/dexie.min.js b/src/assets/dexie/dist/dexie.min.js new file mode 100644 index 000000000..88e76d734 --- /dev/null +++ b/src/assets/dexie/dist/dexie.min.js @@ -0,0 +1,2 @@ +(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Dexie=t()})(this,function(){"use strict";var s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};var w=function(){return(w=Object.assign||function(e){for(var t,n=1,r=arguments.length;n.",Ze="String expected.",et=[],tt="__dbnames",nt="readonly",rt="readwrite";function it(e,t){return e?t?function(){return e.apply(this,arguments)&&t.apply(this,arguments)}:e:t}var ot={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function at(t){return"string"!=typeof t||/\./.test(t)?function(e){return e}:function(e){return void 0===e[t]&&t in e&&delete(e=S(e))[t],e}}function ut(){throw Y.Type()}function st(e,t){try{var n=ct(e),r=ct(t);if(n!==r)return"Array"===n?1:"Array"===r?-1:"binary"===n?1:"binary"===r?-1:"string"===n?1:"string"===r?-1:"Date"===n?1:"Date"!==r?NaN:-1;switch(n){case"number":case"Date":case"string":return ts+c&&f(s+g)})})}var h=yt(r)&&r.limit===1/0&&("function"!=typeof w||w===Et)&&{index:r.index,range:r.range};return f(0).then(function(){if(0=c})).length?(e.forEach(function(u){t.push(function(){var t=h,e=u._cfg.dbschema;fn(s,t,f),fn(s,e,f),h=s._dbSchema=e;var n=an(t,e);n.add.forEach(function(e){un(f,e[0],e[1].primKey,e[1].indexes)}),n.change.forEach(function(e){if(e.recreate)throw new Y.Upgrade("Not yet support for changing primary key");var t=f.objectStore(e.name);e.add.forEach(function(e){return cn(t,e)}),e.change.forEach(function(e){t.deleteIndex(e.name),cn(t,e)}),e.del.forEach(function(e){return t.deleteIndex(e)})});var r=u._cfg.contentUpgrade;if(r&&u._cfg.version>c){Zt(s,f),l._memoizedTables={};var i=g(e);n.del.forEach(function(e){i[e]=t[e]}),tn(s,[s.Transaction.prototype]),en(s,[s.Transaction.prototype],_(i),i),l.schema=i;var o,a=B(r);a&&Le();n=_e.follow(function(){var e;(o=r(l))&&a&&(e=Ue.bind(null,null),o.then(e,e))});return o&&"function"==typeof o.then?_e.resolve(o):n.then(function(){return o})}}),t.push(function(e){var t,n,r=u._cfg.dbschema;t=r,n=e,[].slice.call(n.db.objectStoreNames).forEach(function(e){return null==t[e]&&n.db.deleteObjectStore(e)}),tn(s,[s.Transaction.prototype]),en(s,[s.Transaction.prototype],s._storeNames,s._dbSchema),l.schema=s._dbSchema}),t.push(function(e){s.idbdb.objectStoreNames.contains("$meta")&&(Math.ceil(s.idbdb.version/10)===u._cfg.version?(s.idbdb.deleteObjectStore("$meta"),delete s._dbSchema.$meta,s._storeNames=s._storeNames.filter(function(e){return"$meta"!==e})):e.objectStore("$meta").put(u._cfg.version,"version"))})}),function e(){return t.length?_e.resolve(t.shift()(l.idbtrans)).then(e):_e.resolve()}().then(function(){sn(h,f)})):_e.resolve();var s,c,l,f,t,h}).catch(u)):(_(o).forEach(function(e){un(i,e,o[e].primKey,o[e].indexes)}),Zt(n,i),void _e.follow(function(){return n.on.populate.fire(a)}).catch(u));var e,t})}function on(e,r){sn(e._dbSchema,r),r.db.version%10!=0||r.objectStoreNames.contains("$meta")||r.db.createObjectStore("$meta").add(Math.ceil(r.db.version/10-1),"version");var t=ln(0,e.idbdb,r);fn(e,e._dbSchema,r);for(var n=0,i=an(t,e._dbSchema).change;nMath.pow(2,62)?0:e.oldVersion,m=e<1,f.idbdb=l.result,p&&on(f,v),rn(f,e/10,v,n))},n),l.onsuccess=Te(function(){v=null;var e,t,n,r,i,o=f.idbdb=l.result,a=b(o.objectStoreNames);if(0u.limit?t.length=u.limit:e.length===u.limit&&t.length=r.limit&&(!r.values||e.req.values)&&Xn(e.req.query.range,r.query.range)}),!1,i,o];case"count":a=o.find(function(e){return Gn(e.req.query.range,r.query.range)});return[a,!!a,i,o]}}(O,c,"query",t),a=o[0],e=o[1],u=o[2],s=o[3];return a&&e?a.obsSet=t.obsSet:(e=l.query(t).then(function(e){var t=e.result;if(a&&(a.res=t),i){for(var n=0,r=t.length;n= 0) + a.splice(i, 1); + return i >= 0; +} +var NO_CHAR_ARRAY = {}; +function getArrayOf(arrayLike) { + var i, a, x, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') + return [arrayLike]; + if ((it = getIteratorOf(arrayLike))) { + a = []; + while ((x = it.next()), !x.done) + a.push(x.value); + return a; + } + if (arrayLike == null) + return [arrayLike]; + i = arrayLike.length; + if (typeof i === 'number') { + a = new Array(i); + while (i--) + a[i] = arrayLike[i]; + return a; + } + return [arrayLike]; + } + i = arguments.length; + a = new Array(i); + while (i--) + a[i] = arguments[i]; + return a; +} +var isAsyncFunction = typeof Symbol !== 'undefined' + ? function (fn) { return fn[Symbol.toStringTag] === 'AsyncFunction'; } + : function () { return false; }; + +var dexieErrorNames = [ + 'Modify', + 'Bulk', + 'OpenFailed', + 'VersionChange', + 'Schema', + 'Upgrade', + 'InvalidTable', + 'MissingAPI', + 'NoSuchDatabase', + 'InvalidArgument', + 'SubTransaction', + 'Unsupported', + 'Internal', + 'DatabaseClosed', + 'PrematureCommit', + 'ForeignAwait' +]; +var idbDomErrorNames = [ + 'Unknown', + 'Constraint', + 'Data', + 'TransactionInactive', + 'ReadOnly', + 'Version', + 'NotFound', + 'InvalidState', + 'InvalidAccess', + 'Abort', + 'Timeout', + 'QuotaExceeded', + 'Syntax', + 'DataClone' +]; +var errorList = dexieErrorNames.concat(idbDomErrorNames); +var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed", + MissingAPI: "IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb" +}; +function DexieError(name, msg) { + this.name = name; + this.message = msg; +} +derive(DexieError).from(Error).extend({ + toString: function () { return this.name + ": " + this.message; } +}); +function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + Object.keys(failures) + .map(function (key) { return failures[key].toString(); }) + .filter(function (v, i, s) { return s.indexOf(v) === i; }) + .join('\n'); +} +function ModifyError(msg, failures, successCount, failedKeys) { + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; + this.message = getMultiErrorMessage(msg, failures); +} +derive(ModifyError).from(DexieError); +function BulkError(msg, failures) { + this.name = "BulkError"; + this.failures = Object.keys(failures).map(function (pos) { return failures[pos]; }); + this.failuresByPos = failures; + this.message = getMultiErrorMessage(msg, this.failures); +} +derive(BulkError).from(DexieError); +var errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + "Error", obj); }, {}); +var BaseException = DexieError; +var exceptions = errorList.reduce(function (obj, name) { + var fullName = name + "Error"; + function DexieError(msgOrInner, inner) { + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } + else if (typeof msgOrInner === 'string') { + this.message = "".concat(msgOrInner).concat(!inner ? '' : '\n ' + inner); + this.inner = inner || null; + } + else if (typeof msgOrInner === 'object') { + this.message = "".concat(msgOrInner.name, " ").concat(msgOrInner.message); + this.inner = msgOrInner; + } + } + derive(DexieError).from(BaseException); + obj[name] = DexieError; + return obj; +}, {}); +exceptions.Syntax = SyntaxError; +exceptions.Type = TypeError; +exceptions.Range = RangeError; +var exceptionMap = idbDomErrorNames.reduce(function (obj, name) { + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + setProp(rv, "stack", { get: function () { + return this.inner.stack; + } }); + } + return rv; +} +var fullNameExceptions = errorList.reduce(function (obj, name) { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +fullNameExceptions.ModifyError = ModifyError; +fullNameExceptions.DexieError = DexieError; +fullNameExceptions.BulkError = BulkError; + +function nop() { } +function mirror(val) { return val; } +function pureFunctionChain(f1, f2) { + if (f1 == null || f1 === mirror) + return f2; + return function (val) { + return f2(f1(val)); + }; +} +function callBoth(on1, on2) { + return function () { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; +} +function hookCreatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res !== undefined) + arguments[0] = res; + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== undefined ? res2 : res; + }; +} +function hookDeletingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = this.onerror = null; + f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; +} +function hookUpdatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function (modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === undefined ? + (res2 === undefined ? undefined : res2) : + (extend(res, res2)); + }; +} +function reverseStoppableEventChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + if (f2.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; +} +function promisableChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res && typeof res.then === 'function') { + var thiz = this, i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + return res.then(function () { + return f2.apply(thiz, args); + }); + } + return f2.apply(this, arguments); + }; +} + +var debug = typeof location !== 'undefined' && + /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); +function setDebug(value, filter) { + debug = value; +} + +var INTERNAL = {}; +var ZONE_ECHO_LIMIT = 100, _a$1 = typeof Promise === 'undefined' ? + [] : + (function () { + var globalP = Promise.resolve(); + if (typeof crypto === 'undefined' || !crypto.subtle) + return [globalP, getProto(globalP), globalP]; + var nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); + return [ + nativeP, + getProto(nativeP), + globalP + ]; + })(), resolvedNativePromise = _a$1[0], nativePromiseProto = _a$1[1], resolvedGlobalPromise = _a$1[2], nativePromiseThen = nativePromiseProto && nativePromiseProto.then; +var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; +var patchGlobalPromise = !!resolvedGlobalPromise; +function schedulePhysicalTick() { + queueMicrotask(physicalTick); +} +var asap = function (callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } +}; +var isOutsideMicroTick = true, +needsNewPhysicalTick = true, +unhandledErrors = [], +rejectingErrors = [], +rejectionMapper = mirror; +var globalPSD = { + id: 'global', + global: true, + ref: 0, + unhandleds: [], + onunhandled: nop, + pgp: false, + env: {}, + finalize: nop +}; +var PSD = globalPSD; +var microtickQueue = []; +var numScheduledCalls = 0; +var tickFinalizers = []; +function DexiePromise(fn) { + if (typeof this !== 'object') + throw new TypeError('Promises must be constructed via new'); + this._listeners = []; + this._lib = false; + var psd = (this._PSD = PSD); + if (typeof fn !== 'function') { + if (fn !== INTERNAL) + throw new TypeError('Not a function'); + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); + return; + } + this._state = null; + this._value = null; + ++psd.ref; + executePromiseTask(this, fn); +} +var thenProp = { + get: function () { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var _this = this; + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + var cleanup = possibleAwait && !decrementExpectedAwaits(); + var rv = new DexiePromise(function (resolve, reject) { + propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); + }); + if (this._consoleTask) + rv._consoleTask = this._consoleTask; + return rv; + } + then.prototype = INTERNAL; + return then; + }, + set: function (value) { + setProp(this, 'then', value && value.prototype === INTERNAL ? + thenProp : + { + get: function () { + return value; + }, + set: thenProp.set + }); + } +}; +props(DexiePromise.prototype, { + then: thenProp, + _then: function (onFulfilled, onRejected) { + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + catch: function (onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + var type = arguments[0], handler = arguments[1]; + return typeof type === 'function' ? this.then(null, function (err) { + return err instanceof type ? handler(err) : PromiseReject(err); + }) + : this.then(null, function (err) { + return err && err.name === type ? handler(err) : PromiseReject(err); + }); + }, + finally: function (onFinally) { + return this.then(function (value) { + return DexiePromise.resolve(onFinally()).then(function () { return value; }); + }, function (err) { + return DexiePromise.resolve(onFinally()).then(function () { return PromiseReject(err); }); + }); + }, + timeout: function (ms, msg) { + var _this = this; + return ms < Infinity ? + new DexiePromise(function (resolve, reject) { + var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms); + _this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } +}); +if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise'); +globalPSD.env = snapShot(); +function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; +} +props(DexiePromise, { + all: function () { + var values = getArrayOf.apply(null, arguments) + .map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (values.length === 0) + resolve([]); + var remaining = values.length; + values.forEach(function (a, i) { return DexiePromise.resolve(a).then(function (x) { + values[i] = x; + if (!--remaining) + resolve(values); + }, reject); }); + }); + }, + resolve: function (value) { + if (value instanceof DexiePromise) + return value; + if (value && typeof value.then === 'function') + return new DexiePromise(function (resolve, reject) { + value.then(resolve, reject); + }); + var rv = new DexiePromise(INTERNAL, true, value); + return rv; + }, + reject: PromiseReject, + race: function () { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + values.map(function (value) { return DexiePromise.resolve(value).then(resolve, reject); }); + }); + }, + PSD: { + get: function () { return PSD; }, + set: function (value) { return PSD = value; } + }, + totalEchoes: { get: function () { return totalEchoes; } }, + newPSD: newScope, + usePSD: usePSD, + scheduler: { + get: function () { return asap; }, + set: function (value) { asap = value; } + }, + rejectionMapper: { + get: function () { return rejectionMapper; }, + set: function (value) { rejectionMapper = value; } + }, + follow: function (fn, zoneProps) { + return new DexiePromise(function (resolve, reject) { + return newScope(function (resolve, reject) { + var psd = PSD; + psd.unhandleds = []; + psd.onunhandled = reject; + psd.finalize = callBoth(function () { + var _this = this; + run_at_end_of_this_or_next_physical_tick(function () { + _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]); + }); + }, psd.finalize); + fn(); + }, zoneProps, resolve, reject); + }); + } +}); +if (NativePromise) { + if (NativePromise.allSettled) + setProp(DexiePromise, "allSettled", function () { + var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve) { + if (possiblePromises.length === 0) + resolve([]); + var remaining = possiblePromises.length; + var results = new Array(remaining); + possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return results[i] = { status: "fulfilled", value: value }; }, function (reason) { return results[i] = { status: "rejected", reason: reason }; }) + .then(function () { return --remaining || resolve(results); }); }); + }); + }); + if (NativePromise.any && typeof AggregateError !== 'undefined') + setProp(DexiePromise, "any", function () { + var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (possiblePromises.length === 0) + reject(new AggregateError([])); + var remaining = possiblePromises.length; + var failures = new Array(remaining); + possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return resolve(value); }, function (failure) { + failures[i] = failure; + if (!--remaining) + reject(new AggregateError(failures)); + }); }); + }); + }); +} +function executePromiseTask(promise, fn) { + try { + fn(function (value) { + if (promise._state !== null) + return; + if (value === promise) + throw new TypeError('A promise cannot be resolved with itself.'); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === 'function') { + executePromiseTask(promise, function (resolve, reject) { + value instanceof DexiePromise ? + value._then(resolve, reject) : + value.then(resolve, reject); + }); + } + else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, handleRejection.bind(null, promise)); + } + catch (ex) { + handleRejection(promise, ex); + } +} +function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); +} +function propagateAllListeners(promise) { + var listeners = promise._listeners; + promise._listeners = []; + for (var i = 0, len = listeners.length; i < len; ++i) { + propagateToListener(promise, listeners[i]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); + if (numScheduledCalls === 0) { + ++numScheduledCalls; + asap(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } +} +function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap(callListener, [cb, promise, listener]); +} +function callListener(cb, promise, listener) { + try { + var ret, value = promise._value; + if (!promise._state && rejectingErrors.length) + rejectingErrors = []; + ret = debug && promise._consoleTask ? promise._consoleTask.run(function () { return cb(value); }) : cb(value); + if (!promise._state && rejectingErrors.indexOf(value) === -1) { + markErrorAsHandled(promise); + } + listener.resolve(ret); + } + catch (e) { + listener.reject(e); + } + finally { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } +} +function physicalTick() { + usePSD(globalPSD, function () { + beginMicroTickScope() && endMicroTickScope(); + }); +} +function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; +} +function endMicroTickScope() { + var callbacks, i, l; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l = callbacks.length; + for (i = 0; i < l; ++i) { + var item = callbacks[i]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; +} +function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach(function (p) { + p._PSD.onunhandled.call(null, p._value, p); + }); + var finalizers = tickFinalizers.slice(0); + var i = finalizers.length; + while (i) + finalizers[--i](); +} +function run_at_end_of_this_or_next_physical_tick(fn) { + function finalizer() { + fn(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); +} +function addPossiblyUnhandledError(promise) { + if (!unhandledErrors.some(function (p) { return p._value === promise._value; })) + unhandledErrors.push(promise); +} +function markErrorAsHandled(promise) { + var i = unhandledErrors.length; + while (i) + if (unhandledErrors[--i]._value === promise._value) { + unhandledErrors.splice(i, 1); + return; + } +} +function PromiseReject(reason) { + return new DexiePromise(INTERNAL, false, reason); +} +function wrap(fn, errorCatcher) { + var psd = PSD; + return function () { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn.apply(this, arguments); + } + catch (e) { + errorCatcher && errorCatcher(e); + } + finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; +} +var task = { awaits: 0, echoes: 0, id: 0 }; +var taskCounter = 0; +var zoneStack = []; +var zoneEchoes = 0; +var totalEchoes = 0; +var zone_id_counter = 0; +function newScope(fn, props, a1, a2) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: DexiePromise, + PromiseProp: { value: DexiePromise, configurable: true, writable: true }, + all: DexiePromise.all, + race: DexiePromise.race, + allSettled: DexiePromise.allSettled, + any: DexiePromise.any, + resolve: DexiePromise.resolve, + reject: DexiePromise.reject, + } : {}; + if (props) + extend(psd, props); + ++parent.ref; + psd.finalize = function () { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn, a1, a2); + if (psd.ref === 0) + psd.finalize(); + return rv; +} +function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; +} +function decrementExpectedAwaits() { + if (!task.awaits) + return false; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; + return true; +} +if (('' + nativePromiseThen).indexOf('[native code]') === -1) { + incrementExpectedAwaits = decrementExpectedAwaits = nop; +} +function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then(function (x) { + decrementExpectedAwaits(); + return x; + }, function (e) { + decrementExpectedAwaits(); + return rejection(e); + }); + } + return possiblePromise; +} +function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.awaits = task.id = 0; + } + zoneStack.push(PSD); + switchToZone(targetZone, true); +} +function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); +} +function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + var GlobalPromise = globalPSD.env.Promise; + var targetEnv = targetZone.env; + if (currentZone.global || targetZone.global) { + Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + if (targetEnv.allSettled) + GlobalPromise.allSettled = targetEnv.allSettled; + if (targetEnv.any) + GlobalPromise.any = targetEnv.any; + } + } +} +function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + allSettled: GlobalPromise.allSettled, + any: GlobalPromise.any, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + } : {}; +} +function usePSD(psd, fn, a1, a2, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn(a1, a2, a3); + } + finally { + switchToZone(outerScope, false); + } +} +function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) { + return typeof fn !== 'function' ? fn : function () { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn.apply(this, arguments); + } + finally { + switchToZone(outerZone, false); + if (cleanup) + queueMicrotask(decrementExpectedAwaits); + } + }; +} +function execInGlobalContext(cb) { + if (Promise === NativePromise && task.echoes === 0) { + if (zoneEchoes === 0) { + cb(); + } + else { + enqueueNativeMicroTask(cb); + } + } + else { + setTimeout(cb, 0); + } +} +var rejection = DexiePromise.reject; + +function tempTransaction(db, mode, storeNames, fn) { + if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) { + if (db._state.openComplete) { + return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError)); + } + if (!db._state.isBeingOpened) { + if (!db._state.autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); + } + return db._state.dbReadyPromise.then(function () { return tempTransaction(db, mode, storeNames, fn); }); + } + else { + var trans = db._createTransaction(mode, storeNames, db._dbSchema); + try { + trans.create(); + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(function () { return tempTransaction(db, mode, storeNames, fn); }); + } + return rejection(ex); + } + return trans._promise(mode, function (resolve, reject) { + return newScope(function () { + PSD.trans = trans; + return fn(resolve, reject, trans); + }); + }).then(function (result) { + if (mode === 'readwrite') + try { + trans.idbtrans.commit(); + } + catch (_a) { } + return mode === 'readonly' ? result : trans._completion.then(function () { return result; }); + }); + } +} + +var DEXIE_VERSION = '4.0.7'; +var maxString = String.fromCharCode(65535); +var minKey = -Infinity; +var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; +var STRING_EXPECTED = "String expected."; +var connections = []; +var DBNAMES_DB = '__dbnames'; +var READONLY = 'readonly'; +var READWRITE = 'readwrite'; + +function combine(filter1, filter2) { + return filter1 ? + filter2 ? + function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : + filter1 : + filter2; +} + +var AnyRange = { + type: 3 , + lower: -Infinity, + lowerOpen: false, + upper: [[]], + upperOpen: false +}; + +function workaroundForUndefinedPrimKey(keyPath) { + return typeof keyPath === "string" && !/\./.test(keyPath) + ? function (obj) { + if (obj[keyPath] === undefined && (keyPath in obj)) { + obj = deepClone(obj); + delete obj[keyPath]; + } + return obj; + } + : function (obj) { return obj; }; +} + +function Entity() { + throw exceptions.Type(); +} + +function cmp(a, b) { + try { + var ta = type(a); + var tb = type(b); + if (ta !== tb) { + if (ta === 'Array') + return 1; + if (tb === 'Array') + return -1; + if (ta === 'binary') + return 1; + if (tb === 'binary') + return -1; + if (ta === 'string') + return 1; + if (tb === 'string') + return -1; + if (ta === 'Date') + return 1; + if (tb !== 'Date') + return NaN; + return -1; + } + switch (ta) { + case 'number': + case 'Date': + case 'string': + return a > b ? 1 : a < b ? -1 : 0; + case 'binary': { + return compareUint8Arrays(getUint8Array(a), getUint8Array(b)); + } + case 'Array': + return compareArrays(a, b); + } + } + catch (_a) { } + return NaN; +} +function compareArrays(a, b) { + var al = a.length; + var bl = b.length; + var l = al < bl ? al : bl; + for (var i = 0; i < l; ++i) { + var res = cmp(a[i], b[i]); + if (res !== 0) + return res; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function compareUint8Arrays(a, b) { + var al = a.length; + var bl = b.length; + var l = al < bl ? al : bl; + for (var i = 0; i < l; ++i) { + if (a[i] !== b[i]) + return a[i] < b[i] ? -1 : 1; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function type(x) { + var t = typeof x; + if (t !== 'object') + return t; + if (ArrayBuffer.isView(x)) + return 'binary'; + var tsTag = toStringTag(x); + return tsTag === 'ArrayBuffer' ? 'binary' : tsTag; +} +function getUint8Array(a) { + if (a instanceof Uint8Array) + return a; + if (ArrayBuffer.isView(a)) + return new Uint8Array(a.buffer, a.byteOffset, a.byteLength); + return new Uint8Array(a); +} + +var Table = (function () { + function Table() { + } + Table.prototype._trans = function (mode, fn, writeLocked) { + var trans = this._tx || PSD.trans; + var tableName = this.name; + var task = debug && typeof console !== 'undefined' && console.createTask && console.createTask("Dexie: ".concat(mode === 'readonly' ? 'read' : 'write', " ").concat(this.name)); + function checkTableInTransaction(resolve, reject, trans) { + if (!trans.schema[tableName]) + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + return fn(trans.idbtrans, trans); + } + var wasRootExec = beginMicroTickScope(); + try { + var p = trans && trans.db._novip === this.db._novip ? + trans === PSD.trans ? + trans._promise(mode, checkTableInTransaction, writeLocked) : + newScope(function () { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) : + tempTransaction(this.db, mode, [this.name], checkTableInTransaction); + if (task) { + p._consoleTask = task; + p = p.catch(function (err) { + console.trace(err); + return rejection(err); + }); + } + return p; + } + finally { + if (wasRootExec) + endMicroTickScope(); + } + }; + Table.prototype.get = function (keyOrCrit, cb) { + var _this = this; + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + if (keyOrCrit == null) + return rejection(new exceptions.Type("Invalid argument to Table.get()")); + return this._trans('readonly', function (trans) { + return _this.core.get({ trans: trans, key: keyOrCrit }) + .then(function (res) { return _this.hook.reading.fire(res); }); + }).then(cb); + }; + Table.prototype.where = function (indexOrCrit) { + if (typeof indexOrCrit === 'string') + return new this.db.WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new this.db.WhereClause(this, "[".concat(indexOrCrit.join('+'), "]")); + var keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + return this + .where(keyPaths[0]) + .equals(indexOrCrit[keyPaths[0]]); + var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) { + if (ix.compound && + keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; })) { + for (var i = 0; i < keyPaths.length; ++i) { + if (keyPaths.indexOf(ix.keyPath[i]) === -1) + return false; + } + return true; + } + return false; + }).sort(function (a, b) { return a.keyPath.length - b.keyPath.length; })[0]; + if (compoundIndex && this.db._maxKey !== maxString) { + var keyPathsInValidOrder = compoundIndex.keyPath.slice(0, keyPaths.length); + return this + .where(keyPathsInValidOrder) + .equals(keyPathsInValidOrder.map(function (kp) { return indexOrCrit[kp]; })); + } + if (!compoundIndex && debug) + console.warn("The query ".concat(JSON.stringify(indexOrCrit), " on ").concat(this.name, " would benefit from a ") + + "compound index [".concat(keyPaths.join('+'), "]")); + var idxByName = this.schema.idxByName; + var idb = this.db._deps.indexedDB; + function equals(a, b) { + return idb.cmp(a, b) === 0; + } + var _a = keyPaths.reduce(function (_a, keyPath) { + var prevIndex = _a[0], prevFilterFn = _a[1]; + var index = idxByName[keyPath]; + var value = indexOrCrit[keyPath]; + return [ + prevIndex || index, + prevIndex || !index ? + combine(prevFilterFn, index && index.multi ? + function (x) { + var prop = getByKeyPath(x, keyPath); + return isArray(prop) && prop.some(function (item) { return equals(value, item); }); + } : function (x) { return equals(value, getByKeyPath(x, keyPath)); }) + : prevFilterFn + ]; + }, [null, null]), idx = _a[0], filterFunction = _a[1]; + return idx ? + this.where(idx.name).equals(indexOrCrit[idx.keyPath]) + .filter(filterFunction) : + compoundIndex ? + this.filter(filterFunction) : + this.where(keyPaths).equals(''); + }; + Table.prototype.filter = function (filterFunction) { + return this.toCollection().and(filterFunction); + }; + Table.prototype.count = function (thenShortcut) { + return this.toCollection().count(thenShortcut); + }; + Table.prototype.offset = function (offset) { + return this.toCollection().offset(offset); + }; + Table.prototype.limit = function (numRows) { + return this.toCollection().limit(numRows); + }; + Table.prototype.each = function (callback) { + return this.toCollection().each(callback); + }; + Table.prototype.toArray = function (thenShortcut) { + return this.toCollection().toArray(thenShortcut); + }; + Table.prototype.toCollection = function () { + return new this.db.Collection(new this.db.WhereClause(this)); + }; + Table.prototype.orderBy = function (index) { + return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? + "[".concat(index.join('+'), "]") : + index)); + }; + Table.prototype.reverse = function () { + return this.toCollection().reverse(); + }; + Table.prototype.mapToClass = function (constructor) { + var _a = this, db = _a.db, tableName = _a.name; + this.schema.mappedClass = constructor; + if (constructor.prototype instanceof Entity) { + constructor = (function (_super) { + __extends(class_1, _super); + function class_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(class_1.prototype, "db", { + get: function () { return db; }, + enumerable: false, + configurable: true + }); + class_1.prototype.table = function () { return tableName; }; + return class_1; + }(constructor)); + } + var inheritedProps = new Set(); + for (var proto = constructor.prototype; proto; proto = getProto(proto)) { + Object.getOwnPropertyNames(proto).forEach(function (propName) { return inheritedProps.add(propName); }); + } + var readHook = function (obj) { + if (!obj) + return obj; + var res = Object.create(constructor.prototype); + for (var m in obj) + if (!inheritedProps.has(m)) + try { + res[m] = obj[m]; + } + catch (_) { } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + }; + Table.prototype.defineClass = function () { + function Class(content) { + extend(this, content); + } + return this.mapToClass(Class); + }; + Table.prototype.add = function (obj, key) { + var _this = this; + var _a = this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + var objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', function (trans) { + return _this.core.mutate({ trans: trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] }); + }).then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }) + .then(function (lastResult) { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + }; + Table.prototype.update = function (keyOrObject, modifications) { + if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { + var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === undefined) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + return this.where(":id").equals(key).modify(modifications); + } + else { + return this.where(":id").equals(keyOrObject).modify(modifications); + } + }; + Table.prototype.put = function (obj, key) { + var _this = this; + var _a = this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + var objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }) + .then(function (lastResult) { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + }; + Table.prototype.delete = function (key) { + var _this = this; + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'delete', keys: [key] }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; }); + }; + Table.prototype.clear = function () { + var _this = this; + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'deleteRange', range: AnyRange }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; }); + }; + Table.prototype.bulkGet = function (keys) { + var _this = this; + return this._trans('readonly', function (trans) { + return _this.core.getMany({ + keys: keys, + trans: trans + }).then(function (result) { return result.map(function (res) { return _this.hook.reading.fire(res); }); }); + }); + }; + Table.prototype.bulkAdd = function (objects, keysOrOptions, options) { + var _this = this; + var keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + var wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', function (trans) { + var _a = _this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + var numObjects = objects.length; + var objectsToAdd = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return _this.core.mutate({ trans: trans, type: 'add', keys: keys, values: objectsToAdd, wantResults: wantResults }) + .then(function (_a) { + var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures; + var result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError("".concat(_this.name, ".bulkAdd(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); + }); + }); + }; + Table.prototype.bulkPut = function (objects, keysOrOptions, options) { + var _this = this; + var keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + var wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', function (trans) { + var _a = _this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + var numObjects = objects.length; + var objectsToPut = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return _this.core.mutate({ trans: trans, type: 'put', keys: keys, values: objectsToPut, wantResults: wantResults }) + .then(function (_a) { + var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures; + var result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError("".concat(_this.name, ".bulkPut(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); + }); + }); + }; + Table.prototype.bulkUpdate = function (keysAndChanges) { + var _this = this; + var coreTable = this.core; + var keys = keysAndChanges.map(function (entry) { return entry.key; }); + var changeSpecs = keysAndChanges.map(function (entry) { return entry.changes; }); + var offsetMap = []; + return this._trans('readwrite', function (trans) { + return coreTable.getMany({ trans: trans, keys: keys, cache: 'clone' }).then(function (objs) { + var resultKeys = []; + var resultObjs = []; + keysAndChanges.forEach(function (_a, idx) { + var key = _a.key, changes = _a.changes; + var obj = objs[idx]; + if (obj) { + for (var _i = 0, _b = Object.keys(changes); _i < _b.length; _i++) { + var keyPath = _b[_i]; + var value = changes[keyPath]; + if (keyPath === _this.schema.primKey.keyPath) { + if (cmp(value, key) !== 0) { + throw new exceptions.Constraint("Cannot update primary key in bulkUpdate()"); + } + } + else { + setByKeyPath(obj, keyPath, value); + } + } + offsetMap.push(idx); + resultKeys.push(key); + resultObjs.push(obj); + } + }); + var numEntries = resultKeys.length; + return coreTable + .mutate({ + trans: trans, + type: 'put', + keys: resultKeys, + values: resultObjs, + updates: { + keys: keys, + changeSpecs: changeSpecs + } + }) + .then(function (_a) { + var numFailures = _a.numFailures, failures = _a.failures; + if (numFailures === 0) + return numEntries; + for (var _i = 0, _b = Object.keys(failures); _i < _b.length; _i++) { + var offset = _b[_i]; + var mappedOffset = offsetMap[Number(offset)]; + if (mappedOffset != null) { + var failure = failures[offset]; + delete failures[offset]; + failures[mappedOffset] = failure; + } + } + throw new BulkError("".concat(_this.name, ".bulkUpdate(): ").concat(numFailures, " of ").concat(numEntries, " operations failed"), failures); + }); + }); + }); + }; + Table.prototype.bulkDelete = function (keys) { + var _this = this; + var numKeys = keys.length; + return this._trans('readwrite', function (trans) { + return _this.core.mutate({ trans: trans, type: 'delete', keys: keys }); + }).then(function (_a) { + var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures; + if (numFailures === 0) + return lastResult; + throw new BulkError("".concat(_this.name, ".bulkDelete(): ").concat(numFailures, " of ").concat(numKeys, " operations failed"), failures); + }); + }; + return Table; +}()); + +function Events(ctx) { + var evs = {}; + var rv = function (eventName, subscriber) { + if (subscriber) { + var i = arguments.length, args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } + else if (typeof (eventName) === 'string') { + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i = 1, l = arguments.length; i < l; ++i) { + add(arguments[i]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === 'object') + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function (cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function (cb) { + context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + keys(cfg).forEach(function (eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } + else if (args === 'asap') { + var context = add(eventName, mirror, function fire() { + var i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + context.subscribers.forEach(function (fn) { + asap$1(function fireEvent() { + fn.apply(null, args); + }); + }); + }); + } + else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } +} + +function makeClassConstructor(prototype, constructor) { + derive(constructor).from({ prototype: prototype }); + return constructor; +} + +function createTableConstructor(db) { + return makeClassConstructor(Table.prototype, function Table(name, tableSchema, trans) { + this.db = db; + this._tx = trans; + this.name = name; + this.schema = tableSchema; + this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + }); +} + +function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && + (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); +} +function addFilter(ctx, fn) { + ctx.filter = combine(ctx.filter, fn); +} +function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory; + ctx.justLimit = isLimitFilter && !curr; +} +function addMatchFilter(ctx, fn) { + ctx.isMatch = combine(ctx.isMatch, fn); +} +function getIndexOrStore(ctx, coreSchema) { + if (ctx.isPrimKey) + return coreSchema.primaryKey; + var index = coreSchema.getIndexByKeyPath(ctx.index); + if (!index) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); + return index; +} +function openCursor(ctx, coreTable, trans) { + var index = getIndexOrStore(ctx, coreTable.schema); + return coreTable.openCursor({ + trans: trans, + values: !ctx.keysOnly, + reverse: ctx.dir === 'prev', + unique: !!ctx.unique, + query: { + index: index, + range: ctx.range + } + }); +} +function iter(ctx, fn, coreTrans, coreTable) { + var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper); + } + else { + var set_1 = {}; + var union = function (item, cursor, advance) { + if (!filter || filter(cursor, advance, function (result) { return cursor.stop(result); }, function (err) { return cursor.fail(err); })) { + var primaryKey = cursor.primaryKey; + var key = '' + primaryKey; + if (key === '[object ArrayBuffer]') + key = '' + new Uint8Array(primaryKey); + if (!hasOwn(set_1, key)) { + set_1[key] = true; + fn(item, cursor, advance); + } + } + }; + return Promise.all([ + ctx.or._iterate(union, coreTrans), + iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) + ]); + } +} +function iterate(cursorPromise, filter, fn, valueMapper) { + var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn; + var wrappedFn = wrap(mappedFn); + return cursorPromise.then(function (cursor) { + if (cursor) { + return cursor.start(function () { + var c = function () { return cursor.continue(); }; + if (!filter || filter(cursor, function (advancer) { return c = advancer; }, function (val) { cursor.stop(val); c = nop; }, function (e) { cursor.fail(e); c = nop; })) + wrappedFn(cursor.value, cursor, function (advancer) { return c = advancer; }); + c(); + }); + } + }); +} + +var PropModSymbol = Symbol(); +var PropModification = (function () { + function PropModification(spec) { + Object.assign(this, spec); + } + PropModification.prototype.execute = function (value) { + var _a; + if (this.add !== undefined) { + var term = this.add; + if (isArray(term)) { + return __spreadArray(__spreadArray([], (isArray(value) ? value : []), true), term, true).sort(); + } + if (typeof term === 'number') + return (Number(value) || 0) + term; + if (typeof term === 'bigint') { + try { + return BigInt(value) + term; + } + catch (_b) { + return BigInt(0) + term; + } + } + throw new TypeError("Invalid term ".concat(term)); + } + if (this.remove !== undefined) { + var subtrahend_1 = this.remove; + if (isArray(subtrahend_1)) { + return isArray(value) ? value.filter(function (item) { return !subtrahend_1.includes(item); }).sort() : []; + } + if (typeof subtrahend_1 === 'number') + return Number(value) - subtrahend_1; + if (typeof subtrahend_1 === 'bigint') { + try { + return BigInt(value) - subtrahend_1; + } + catch (_c) { + return BigInt(0) - subtrahend_1; + } + } + throw new TypeError("Invalid subtrahend ".concat(subtrahend_1)); + } + var prefixToReplace = (_a = this.replacePrefix) === null || _a === void 0 ? void 0 : _a[0]; + if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) { + return this.replacePrefix[1] + value.substring(prefixToReplace.length); + } + return value; + }; + return PropModification; +}()); + +var Collection = (function () { + function Collection() { + } + Collection.prototype._read = function (fn, cb) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readonly', fn).then(cb); + }; + Collection.prototype._write = function (fn) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readwrite', fn, "locked"); + }; + Collection.prototype._addAlgorithm = function (fn) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn); + }; + Collection.prototype._iterate = function (fn, coreTrans) { + return iter(this._ctx, fn, coreTrans, this._ctx.table.core); + }; + Collection.prototype.clone = function (props) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props) + extend(ctx, props); + rv._ctx = ctx; + return rv; + }; + Collection.prototype.raw = function () { + this._ctx.valueMapper = null; + return this; + }; + Collection.prototype.each = function (fn) { + var ctx = this._ctx; + return this._read(function (trans) { return iter(ctx, fn, trans, ctx.table.core); }); + }; + Collection.prototype.count = function (cb) { + var _this = this; + return this._read(function (trans) { + var ctx = _this._ctx; + var coreTable = ctx.table.core; + if (isPlainKeyRange(ctx, true)) { + return coreTable.count({ + trans: trans, + query: { + index: getIndexOrStore(ctx, coreTable.schema), + range: ctx.range + } + }).then(function (count) { return Math.min(count, ctx.limit); }); + } + else { + var count = 0; + return iter(ctx, function () { ++count; return false; }, trans, coreTable) + .then(function () { return count; }); + } + }).then(cb); + }; + Collection.prototype.sortBy = function (keyPath, cb) { + var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i) { + if (i) + return getval(obj[parts[i]], i - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a, b) { + var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function (a) { + return a.sort(sorter); + }).then(cb); + }; + Collection.prototype.toArray = function (cb) { + var _this = this; + return this._read(function (trans) { + var ctx = _this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + var valueMapper_1 = ctx.valueMapper; + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans: trans, + limit: ctx.limit, + values: true, + query: { + index: index, + range: ctx.range + } + }).then(function (_a) { + var result = _a.result; + return valueMapper_1 ? result.map(valueMapper_1) : result; + }); + } + else { + var a_1 = []; + return iter(ctx, function (item) { return a_1.push(item); }, trans, ctx.table.core).then(function () { return a_1; }); + } + }, cb); + }; + Collection.prototype.offset = function (offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function (cursor, advance) { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(function () { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } + else { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function () { return (--offsetLeft < 0); }; + }); + } + return this; + }; + Collection.prototype.limit = function (numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); + addReplayFilter(this._ctx, function () { + var rowsLeft = numRows; + return function (cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); + return rowsLeft >= 0; + }; + }, true); + return this; + }; + Collection.prototype.until = function (filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function (cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } + else { + return true; + } + }); + return this; + }; + Collection.prototype.first = function (cb) { + return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); + }; + Collection.prototype.last = function (cb) { + return this.reverse().first(cb); + }; + Collection.prototype.filter = function (filterFunction) { + addFilter(this._ctx, function (cursor) { + return filterFunction(cursor.value); + }); + addMatchFilter(this._ctx, filterFunction); + return this; + }; + Collection.prototype.and = function (filter) { + return this.filter(filter); + }; + Collection.prototype.or = function (indexName) { + return new this.db.WhereClause(this._ctx.table, indexName, this); + }; + Collection.prototype.reverse = function () { + this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + }; + Collection.prototype.desc = function () { + return this.reverse(); + }; + Collection.prototype.eachKey = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.key, cursor); }); + }; + Collection.prototype.eachUniqueKey = function (cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + }; + Collection.prototype.eachPrimaryKey = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); + }; + Collection.prototype.keys = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.key); + }).then(function () { + return a; + }).then(cb); + }; + Collection.prototype.primaryKeys = function (cb) { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + return this._read(function (trans) { + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans: trans, + values: false, + limit: ctx.limit, + query: { + index: index, + range: ctx.range + } + }); + }).then(function (_a) { + var result = _a.result; + return result; + }).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.primaryKey); + }).then(function () { + return a; + }).then(cb); + }; + Collection.prototype.uniqueKeys = function (cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + }; + Collection.prototype.firstKey = function (cb) { + return this.limit(1).keys(function (a) { return a[0]; }).then(cb); + }; + Collection.prototype.lastKey = function (cb) { + return this.reverse().firstKey(cb); + }; + Collection.prototype.distinct = function () { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; + var set = {}; + addFilter(this._ctx, function (cursor) { + var strKey = cursor.primaryKey.toString(); + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + }; + Collection.prototype.modify = function (changes) { + var _this = this; + var ctx = this._ctx; + return this._write(function (trans) { + var modifyer; + if (typeof changes === 'function') { + modifyer = changes; + } + else { + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function (item) { + var anythingModified = false; + for (var i = 0; i < numKeys; ++i) { + var keyPath = keyPaths[i]; + var val = changes[keyPath]; + var origVal = getByKeyPath(item, keyPath); + if (val instanceof PropModification) { + setByKeyPath(item, keyPath, val.execute(origVal)); + anythingModified = true; + } + else if (origVal !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + } + return anythingModified; + }; + } + var coreTable = ctx.table.core; + var _a = coreTable.schema.primaryKey, outbound = _a.outbound, extractKey = _a.extractKey; + var limit = _this.db._options.modifyChunkSize || 200; + var totalFailures = []; + var successCount = 0; + var failedKeys = []; + var applyMutateResult = function (expectedCount, res) { + var failures = res.failures, numFailures = res.numFailures; + successCount += expectedCount - numFailures; + for (var _i = 0, _a = keys(failures); _i < _a.length; _i++) { + var pos = _a[_i]; + totalFailures.push(failures[pos]); + } + }; + return _this.clone().primaryKeys().then(function (keys) { + var criteria = isPlainKeyRange(ctx) && + ctx.limit === Infinity && + (typeof changes !== 'function' || changes === deleteCallback) && { + index: ctx.index, + range: ctx.range + }; + var nextChunk = function (offset) { + var count = Math.min(limit, keys.length - offset); + return coreTable.getMany({ + trans: trans, + keys: keys.slice(offset, offset + count), + cache: "immutable" + }).then(function (values) { + var addValues = []; + var putValues = []; + var putKeys = outbound ? [] : null; + var deleteKeys = []; + for (var i = 0; i < count; ++i) { + var origValue = values[i]; + var ctx_1 = { + value: deepClone(origValue), + primKey: keys[offset + i] + }; + if (modifyer.call(ctx_1, ctx_1.value, ctx_1) !== false) { + if (ctx_1.value == null) { + deleteKeys.push(keys[offset + i]); + } + else if (!outbound && cmp(extractKey(origValue), extractKey(ctx_1.value)) !== 0) { + deleteKeys.push(keys[offset + i]); + addValues.push(ctx_1.value); + } + else { + putValues.push(ctx_1.value); + if (outbound) + putKeys.push(keys[offset + i]); + } + } + } + return Promise.resolve(addValues.length > 0 && + coreTable.mutate({ trans: trans, type: 'add', values: addValues }) + .then(function (res) { + for (var pos in res.failures) { + deleteKeys.splice(parseInt(pos), 1); + } + applyMutateResult(addValues.length, res); + })).then(function () { return (putValues.length > 0 || (criteria && typeof changes === 'object')) && + coreTable.mutate({ + trans: trans, + type: 'put', + keys: putKeys, + values: putValues, + criteria: criteria, + changeSpec: typeof changes !== 'function' + && changes, + isAdditionalChunk: offset > 0 + }).then(function (res) { return applyMutateResult(putValues.length, res); }); }).then(function () { return (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) && + coreTable.mutate({ + trans: trans, + type: 'delete', + keys: deleteKeys, + criteria: criteria, + isAdditionalChunk: offset > 0 + }).then(function (res) { return applyMutateResult(deleteKeys.length, res); }); }).then(function () { + return keys.length > offset + count && nextChunk(offset + limit); + }); + }); + }; + return nextChunk(0).then(function () { + if (totalFailures.length > 0) + throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); + return keys.length; + }); + }); + }); + }; + Collection.prototype.delete = function () { + var ctx = this._ctx, range = ctx.range; + if (isPlainKeyRange(ctx) && + (ctx.isPrimKey || range.type === 3 )) + { + return this._write(function (trans) { + var primaryKey = ctx.table.core.schema.primaryKey; + var coreRange = range; + return ctx.table.core.count({ trans: trans, query: { index: primaryKey, range: coreRange } }).then(function (count) { + return ctx.table.core.mutate({ trans: trans, type: 'deleteRange', range: coreRange }) + .then(function (_a) { + var failures = _a.failures; _a.lastResult; _a.results; var numFailures = _a.numFailures; + if (numFailures) + throw new ModifyError("Could not delete some values", Object.keys(failures).map(function (pos) { return failures[pos]; }), count - numFailures); + return count - numFailures; + }); + }); + }); + } + return this.modify(deleteCallback); + }; + return Collection; +}()); +var deleteCallback = function (value, ctx) { return ctx.value = null; }; + +function createCollectionConstructor(db) { + return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) { + this.db = db; + var keyRange = AnyRange, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } + catch (ex) { + error = ex; + } + var whereCtx = whereClause._ctx; + var table = whereCtx.table; + var readingHook = table.hook.reading.fire; + this._ctx = { + table: table, + index: whereCtx.index, + isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error: error, + or: whereCtx.or, + valueMapper: readingHook !== mirror ? readingHook : null + }; + }); +} + +function simpleCompare(a, b) { + return a < b ? -1 : a === b ? 0 : 1; +} +function simpleCompareReverse(a, b) { + return a > b ? -1 : a === b ? 0 : 1; +} + +function fail(collectionOrWhereClause, err, T) { + var collection = collectionOrWhereClause instanceof WhereClause ? + new collectionOrWhereClause.Collection(collectionOrWhereClause) : + collectionOrWhereClause; + collection._ctx.error = T ? new T(err) : new TypeError(err); + return collection; +} +function emptyCollection(whereClause) { + return new whereClause.Collection(whereClause, function () { return rangeEqual(""); }).limit(0); +} +function upperFactory(dir) { + return dir === "next" ? + function (s) { return s.toUpperCase(); } : + function (s) { return s.toLowerCase(); }; +} +function lowerFactory(dir) { + return dir === "next" ? + function (s) { return s.toLowerCase(); } : + function (s) { return s.toUpperCase(); }; +} +function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i = 0; i < length; ++i) { + var lwrKeyChar = lowerKey[i]; + if (lwrKeyChar !== lowerNeedle[i]) { + if (cmp(key[i], upperNeedle[i]) < 0) + return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); + if (cmp(key[i], lowerNeedle[i]) < 0) + return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp(key[i], lwrKeyChar) < 0) + llp = i; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); +} +function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every(function (s) { return typeof s === 'string'; })) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = (dir === "next" ? simpleCompare : simpleCompareReverse); + var needleBounds = needles.map(function (needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function (a, b) { + return compare(a.lower, b.lower); + }); + upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); + lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); + direction = dir; + nextKeySuffix = (dir === "next" ? "" : suffix); + } + initDirection("next"); + var c = new whereClause.Collection(whereClause, function () { return createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); }); + c._ondirectionchange = function (direction) { + initDirection(direction); + }; + var firstPossibleNeedle = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + if (typeof key !== 'string') + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } + else { + var lowestPossibleCasing = null; + for (var i = firstPossibleNeedle; i < needlesLen; ++i) { + var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); + } + else { + advance(resolve); + } + return false; + } + }); + return c; +} +function createRange(lower, upper, lowerOpen, upperOpen) { + return { + type: 2 , + lower: lower, + upper: upper, + lowerOpen: lowerOpen, + upperOpen: upperOpen + }; +} +function rangeEqual(value) { + return { + type: 1 , + lower: value, + upper: value + }; +} + +var WhereClause = (function () { + function WhereClause() { + } + Object.defineProperty(WhereClause.prototype, "Collection", { + get: function () { + return this._ctx.table.db.Collection; + }, + enumerable: false, + configurable: true + }); + WhereClause.prototype.between = function (lower, upper, includeLower, includeUpper) { + includeLower = includeLower !== false; + includeUpper = includeUpper === true; + try { + if ((this._cmp(lower, upper) > 0) || + (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) + return emptyCollection(this); + return new this.Collection(this, function () { return createRange(lower, upper, !includeLower, !includeUpper); }); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + }; + WhereClause.prototype.equals = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return rangeEqual(value); }); + }; + WhereClause.prototype.above = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(value, undefined, true); }); + }; + WhereClause.prototype.aboveOrEqual = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(value, undefined, false); }); + }; + WhereClause.prototype.below = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(undefined, value, false, true); }); + }; + WhereClause.prototype.belowOrEqual = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(undefined, value); }); + }; + WhereClause.prototype.startsWith = function (str) { + if (typeof str !== 'string') + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + }; + WhereClause.prototype.startsWithIgnoreCase = function (str) { + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString); + }; + WhereClause.prototype.equalsIgnoreCase = function (str) { + return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], ""); + }; + WhereClause.prototype.anyOfIgnoreCase = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, ""); + }; + WhereClause.prototype.startsWithAnyOfIgnoreCase = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.some(function (n) { return x.indexOf(n) === 0; }); }, set, maxString); + }; + WhereClause.prototype.anyOf = function () { + var _this = this; + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + var compare = this._cmp; + try { + set.sort(compare); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + var c = new this.Collection(this, function () { return createRange(set[0], set[set.length - 1]); }); + c._ondirectionchange = function (direction) { + compare = (direction === "next" ? + _this._ascending : + _this._descending); + set.sort(compare); + }; + var i = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (compare(key, set[i]) > 0) { + ++i; + if (i === set.length) { + advance(resolve); + return false; + } + } + if (compare(key, set[i]) === 0) { + return true; + } + else { + advance(function () { cursor.continue(set[i]); }); + return false; + } + }); + return c; + }; + WhereClause.prototype.notEqual = function (value) { + return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false }); + }; + WhereClause.prototype.noneOf = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new this.Collection(this); + try { + set.sort(this._ascending); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var ranges = set.reduce(function (res, val) { return res ? + res.concat([[res[res.length - 1][1], val]]) : + [[minKey, val]]; }, null); + ranges.push([set[set.length - 1], this.db._maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + }; + WhereClause.prototype.inAnyRange = function (ranges, options) { + var _this = this; + var cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every(function (range) { + return range[0] !== undefined && + range[1] !== undefined && + ascending(range[0], range[1]) <= 0; + })) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + var includeLowers = !options || options.includeLowers !== false; + var includeUppers = options && options.includeUppers === true; + function addRange(ranges, newRange) { + var i = 0, l = ranges.length; + for (; i < l; ++i) { + var range = ranges[i]; + if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i === l) + ranges.push(newRange); + return ranges; + } + var sortDirection = ascending; + function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } + var set; + try { + set = ranges.reduce(addRange, []); + set.sort(rangeSorter); + } + catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var rangePos = 0; + var keyIsBeyondCurrentEntry = includeUppers ? + function (key) { return ascending(key, set[rangePos][1]) > 0; } : + function (key) { return ascending(key, set[rangePos][1]) >= 0; }; + var keyIsBeforeCurrentEntry = includeLowers ? + function (key) { return descending(key, set[rangePos][0]) > 0; } : + function (key) { return descending(key, set[rangePos][0]) >= 0; }; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + var checkKey = keyIsBeyondCurrentEntry; + var c = new this.Collection(this, function () { return createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); }); + c._ondirectionchange = function (direction) { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } + else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (checkKey(key)) { + ++rangePos; + if (rangePos === set.length) { + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + return true; + } + else if (_this._cmp(key, set[rangePos][1]) === 0 || _this._cmp(key, set[rangePos][0]) === 0) { + return false; + } + else { + advance(function () { + if (sortDirection === ascending) + cursor.continue(set[rangePos][0]); + else + cursor.continue(set[rangePos][1]); + }); + return false; + } + }); + return c; + }; + WhereClause.prototype.startsWithAnyOf = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every(function (s) { return typeof s === 'string'; })) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map(function (str) { return [str, str + maxString]; })); + }; + return WhereClause; +}()); + +function createWhereClauseConstructor(db) { + return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) { + this.db = db; + this._ctx = { + table: table, + index: index === ":id" ? null : index, + or: orCollection + }; + this._cmp = this._ascending = cmp; + this._descending = function (a, b) { return cmp(b, a); }; + this._max = function (a, b) { return cmp(a, b) > 0 ? a : b; }; + this._min = function (a, b) { return cmp(a, b) < 0 ? a : b; }; + this._IDBKeyRange = db._deps.IDBKeyRange; + if (!this._IDBKeyRange) + throw new exceptions.MissingAPI(); + }); +} + +function eventRejectHandler(reject) { + return wrap(function (event) { + preventDefault(event); + reject(event.target.error); + return false; + }); +} +function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); +} + +var DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated'; +var STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1'; +var globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME); + +var Transaction = (function () { + function Transaction() { + } + Transaction.prototype._lock = function () { + assert(!PSD.global); + ++this._reculock; + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + }; + Transaction.prototype._unlock = function () { + assert(!PSD.global); + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } + catch (e) { } + } + } + return this; + }; + Transaction.prototype._locked = function () { + return this._reculock && PSD.lockOwnerFor !== this; + }; + Transaction.prototype.create = function (idbtrans) { + var _this = this; + if (!this.mode) + return this; + var idbdb = this.db.idbdb; + var dbOpenError = this.db._state.dbOpenError; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || + (this.db.core + ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) + : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); + idbtrans.onerror = wrap(function (ev) { + preventDefault(ev); + _this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap(function (ev) { + preventDefault(ev); + _this.active && _this._reject(new exceptions.Abort(idbtrans.error)); + _this.active = false; + _this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(function () { + _this.active = false; + _this._resolve(); + if ('mutatedParts' in idbtrans) { + globalEvents.storagemutated.fire(idbtrans["mutatedParts"]); + } + }); + return this; + }; + Transaction.prototype._promise = function (mode, fn, bWriteLock) { + var _this = this; + if (mode === 'readwrite' && this.mode !== 'readwrite') + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new DexiePromise(function (resolve, reject) { + _this._blockedFuncs.push([function () { + _this._promise(mode, fn, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } + else if (bWriteLock) { + return newScope(function () { + var p = new DexiePromise(function (resolve, reject) { + _this._lock(); + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p.finally(function () { return _this._unlock(); }); + p._lib = true; + return p; + }); + } + else { + var p = new DexiePromise(function (resolve, reject) { + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p._lib = true; + return p; + } + }; + Transaction.prototype._root = function () { + return this.parent ? this.parent._root() : this; + }; + Transaction.prototype.waitFor = function (promiseLike) { + var root = this._root(); + var promise = DexiePromise.resolve(promiseLike); + if (root._waitingFor) { + root._waitingFor = root._waitingFor.then(function () { return promise; }); + } + else { + root._waitingFor = promise; + root._waitingQueue = []; + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; + while (root._waitingQueue.length) + (root._waitingQueue.shift())(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + }()); + } + var currentWaitPromise = root._waitingFor; + return new DexiePromise(function (resolve, reject) { + promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () { + if (root._waitingFor === currentWaitPromise) { + root._waitingFor = null; + } + }); + }); + }; + Transaction.prototype.abort = function () { + if (this.active) { + this.active = false; + if (this.idbtrans) + this.idbtrans.abort(); + this._reject(new exceptions.Abort()); + } + }; + Transaction.prototype.table = function (tableName) { + var memoizedTables = (this._memoizedTables || (this._memoizedTables = {})); + if (hasOwn(memoizedTables, tableName)) + return memoizedTables[tableName]; + var tableSchema = this.schema[tableName]; + if (!tableSchema) { + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + } + var transactionBoundTable = new this.db.Table(tableName, tableSchema, this); + transactionBoundTable.core = this.db.core.table(tableName); + memoizedTables[tableName] = transactionBoundTable; + return transactionBoundTable; + }; + return Transaction; +}()); + +function createTransactionConstructor(db) { + return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) { + var _this = this; + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.schema = dbschema; + this.chromeTransactionDurability = chromeTransactionDurability; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; + this._completion = new DexiePromise(function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + }); + this._completion.then(function () { + _this.active = false; + _this.on.complete.fire(); + }, function (e) { + var wasActive = _this.active; + _this.active = false; + _this.on.error.fire(e); + _this.parent ? + _this.parent._reject(e) : + wasActive && _this.idbtrans && _this.idbtrans.abort(); + return rejection(e); + }); + }); +} + +function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) { + return { + name: name, + keyPath: keyPath, + unique: unique, + multi: multi, + auto: auto, + compound: compound, + src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath) + }; +} +function nameFromKeyPath(keyPath) { + return typeof keyPath === 'string' ? + keyPath : + keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : ""; +} + +function createTableSchema(name, primKey, indexes) { + return { + name: name, + primKey: primKey, + indexes: indexes, + mappedClass: null, + idxByName: arrayToObject(indexes, function (index) { return [index.name, index]; }) + }; +} + +function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; +} +var getMaxKey = function (IdbKeyRange) { + try { + IdbKeyRange.only([[]]); + getMaxKey = function () { return [[]]; }; + return [[]]; + } + catch (e) { + getMaxKey = function () { return maxString; }; + return maxString; + } +}; + +function getKeyExtractor(keyPath) { + if (keyPath == null) { + return function () { return undefined; }; + } + else if (typeof keyPath === 'string') { + return getSinglePathKeyExtractor(keyPath); + } + else { + return function (obj) { return getByKeyPath(obj, keyPath); }; + } +} +function getSinglePathKeyExtractor(keyPath) { + var split = keyPath.split('.'); + if (split.length === 1) { + return function (obj) { return obj[keyPath]; }; + } + else { + return function (obj) { return getByKeyPath(obj, keyPath); }; + } +} + +function arrayify(arrayLike) { + return [].slice.call(arrayLike); +} +var _id_counter = 0; +function getKeyPathAlias(keyPath) { + return keyPath == null ? + ":id" : + typeof keyPath === 'string' ? + keyPath : + "[".concat(keyPath.join('+'), "]"); +} +function createDBCore(db, IdbKeyRange, tmpTrans) { + function extractSchema(db, trans) { + var tables = arrayify(db.objectStoreNames); + return { + schema: { + name: db.name, + tables: tables.map(function (table) { return trans.objectStore(table); }).map(function (store) { + var keyPath = store.keyPath, autoIncrement = store.autoIncrement; + var compound = isArray(keyPath); + var outbound = keyPath == null; + var indexByKeyPath = {}; + var result = { + name: store.name, + primaryKey: { + name: null, + isPrimaryKey: true, + outbound: outbound, + compound: compound, + keyPath: keyPath, + autoIncrement: autoIncrement, + unique: true, + extractKey: getKeyExtractor(keyPath) + }, + indexes: arrayify(store.indexNames).map(function (indexName) { return store.index(indexName); }) + .map(function (index) { + var name = index.name, unique = index.unique, multiEntry = index.multiEntry, keyPath = index.keyPath; + var compound = isArray(keyPath); + var result = { + name: name, + compound: compound, + keyPath: keyPath, + unique: unique, + multiEntry: multiEntry, + extractKey: getKeyExtractor(keyPath) + }; + indexByKeyPath[getKeyPathAlias(keyPath)] = result; + return result; + }), + getIndexByKeyPath: function (keyPath) { return indexByKeyPath[getKeyPathAlias(keyPath)]; } + }; + indexByKeyPath[":id"] = result.primaryKey; + if (keyPath != null) { + indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; + } + return result; + }) + }, + hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) && + !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) + }; + } + function makeIDBKeyRange(range) { + if (range.type === 3 ) + return null; + if (range.type === 4 ) + throw new Error("Cannot convert never type to IDBKeyRange"); + var lower = range.lower, upper = range.upper, lowerOpen = range.lowerOpen, upperOpen = range.upperOpen; + var idbRange = lower === undefined ? + upper === undefined ? + null : + IdbKeyRange.upperBound(upper, !!upperOpen) : + upper === undefined ? + IdbKeyRange.lowerBound(lower, !!lowerOpen) : + IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); + return idbRange; + } + function createDbCoreTable(tableSchema) { + var tableName = tableSchema.name; + function mutate(_a) { + var trans = _a.trans, type = _a.type, keys = _a.keys, values = _a.values, range = _a.range; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var outbound = store.keyPath == null; + var isAddOrPut = type === "put" || type === "add"; + if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange') + throw new Error("Invalid operation type: " + type); + var length = (keys || values || { length: 1 }).length; + if (keys && values && keys.length !== values.length) { + throw new Error("Given keys array must have same length as given values array."); + } + if (length === 0) + return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined }); + var req; + var reqs = []; + var failures = []; + var numFailures = 0; + var errorHandler = function (event) { + ++numFailures; + preventDefault(event); + }; + if (type === 'deleteRange') { + if (range.type === 4 ) + return resolve({ numFailures: numFailures, failures: failures, results: [], lastResult: undefined }); + if (range.type === 3 ) + reqs.push(req = store.clear()); + else + reqs.push(req = store.delete(makeIDBKeyRange(range))); + } + else { + var _a = isAddOrPut ? + outbound ? + [values, keys] : + [values, null] : + [keys, null], args1 = _a[0], args2 = _a[1]; + if (isAddOrPut) { + for (var i = 0; i < length; ++i) { + reqs.push(req = (args2 && args2[i] !== undefined ? + store[type](args1[i], args2[i]) : + store[type](args1[i]))); + req.onerror = errorHandler; + } + } + else { + for (var i = 0; i < length; ++i) { + reqs.push(req = store[type](args1[i])); + req.onerror = errorHandler; + } + } + } + var done = function (event) { + var lastResult = event.target.result; + reqs.forEach(function (req, i) { return req.error != null && (failures[i] = req.error); }); + resolve({ + numFailures: numFailures, + failures: failures, + results: type === "delete" ? keys : reqs.map(function (req) { return req.result; }), + lastResult: lastResult + }); + }; + req.onerror = function (event) { + errorHandler(event); + done(event); + }; + req.onsuccess = done; + }); + } + function openCursor(_a) { + var trans = _a.trans, values = _a.values, query = _a.query, reverse = _a.reverse, unique = _a.unique; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var index = query.index, range = query.range; + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? + store : + store.index(index.name); + var direction = reverse ? + unique ? + "prevunique" : + "prev" : + unique ? + "nextunique" : + "next"; + var req = values || !('openKeyCursor' in source) ? + source.openCursor(makeIDBKeyRange(range), direction) : + source.openKeyCursor(makeIDBKeyRange(range), direction); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(function (ev) { + var cursor = req.result; + if (!cursor) { + resolve(null); + return; + } + cursor.___id = ++_id_counter; + cursor.done = false; + var _cursorContinue = cursor.continue.bind(cursor); + var _cursorContinuePrimaryKey = cursor.continuePrimaryKey; + if (_cursorContinuePrimaryKey) + _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); + var _cursorAdvance = cursor.advance.bind(cursor); + var doThrowCursorIsNotStarted = function () { throw new Error("Cursor not started"); }; + var doThrowCursorIsStopped = function () { throw new Error("Cursor not stopped"); }; + cursor.trans = trans; + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; + cursor.fail = wrap(reject); + cursor.next = function () { + var _this = this; + var gotOne = 1; + return this.start(function () { return gotOne-- ? _this.continue() : _this.stop(); }).then(function () { return _this; }); + }; + cursor.start = function (callback) { + var iterationPromise = new Promise(function (resolveIteration, rejectIteration) { + resolveIteration = wrap(resolveIteration); + req.onerror = eventRejectHandler(rejectIteration); + cursor.fail = rejectIteration; + cursor.stop = function (value) { + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; + resolveIteration(value); + }; + }); + var guardedCallback = function () { + if (req.result) { + try { + callback(); + } + catch (err) { + cursor.fail(err); + } + } + else { + cursor.done = true; + cursor.start = function () { throw new Error("Cursor behind last entry"); }; + cursor.stop(); + } + }; + req.onsuccess = wrap(function (ev) { + req.onsuccess = guardedCallback; + guardedCallback(); + }); + cursor.continue = _cursorContinue; + cursor.continuePrimaryKey = _cursorContinuePrimaryKey; + cursor.advance = _cursorAdvance; + guardedCallback(); + return iterationPromise; + }; + resolve(cursor); + }, reject); + }); + } + function query(hasGetAll) { + return function (request) { + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var trans = request.trans, values = request.values, limit = request.limit, query = request.query; + var nonInfinitLimit = limit === Infinity ? undefined : limit; + var index = query.index, range = query.range; + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? store : store.index(index.name); + var idbKeyRange = makeIDBKeyRange(range); + if (limit === 0) + return resolve({ result: [] }); + if (hasGetAll) { + var req = values ? + source.getAll(idbKeyRange, nonInfinitLimit) : + source.getAllKeys(idbKeyRange, nonInfinitLimit); + req.onsuccess = function (event) { return resolve({ result: event.target.result }); }; + req.onerror = eventRejectHandler(reject); + } + else { + var count_1 = 0; + var req_1 = values || !('openKeyCursor' in source) ? + source.openCursor(idbKeyRange) : + source.openKeyCursor(idbKeyRange); + var result_1 = []; + req_1.onsuccess = function (event) { + var cursor = req_1.result; + if (!cursor) + return resolve({ result: result_1 }); + result_1.push(values ? cursor.value : cursor.primaryKey); + if (++count_1 === limit) + return resolve({ result: result_1 }); + cursor.continue(); + }; + req_1.onerror = eventRejectHandler(reject); + } + }); + }; + } + return { + name: tableName, + schema: tableSchema, + mutate: mutate, + getMany: function (_a) { + var trans = _a.trans, keys = _a.keys; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var length = keys.length; + var result = new Array(length); + var keyCount = 0; + var callbackCount = 0; + var req; + var successHandler = function (event) { + var req = event.target; + if ((result[req._pos] = req.result) != null) + ; + if (++callbackCount === keyCount) + resolve(result); + }; + var errorHandler = eventRejectHandler(reject); + for (var i = 0; i < length; ++i) { + var key = keys[i]; + if (key != null) { + req = store.get(keys[i]); + req._pos = i; + req.onsuccess = successHandler; + req.onerror = errorHandler; + ++keyCount; + } + } + if (keyCount === 0) + resolve(result); + }); + }, + get: function (_a) { + var trans = _a.trans, key = _a.key; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var req = store.get(key); + req.onsuccess = function (event) { return resolve(event.target.result); }; + req.onerror = eventRejectHandler(reject); + }); + }, + query: query(hasGetAll), + openCursor: openCursor, + count: function (_a) { + var query = _a.query, trans = _a.trans; + var index = query.index, range = query.range; + return new Promise(function (resolve, reject) { + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? store : store.index(index.name); + var idbKeyRange = makeIDBKeyRange(range); + var req = idbKeyRange ? source.count(idbKeyRange) : source.count(); + req.onsuccess = wrap(function (ev) { return resolve(ev.target.result); }); + req.onerror = eventRejectHandler(reject); + }); + } + }; + } + var _a = extractSchema(db, tmpTrans), schema = _a.schema, hasGetAll = _a.hasGetAll; + var tables = schema.tables.map(function (tableSchema) { return createDbCoreTable(tableSchema); }); + var tableMap = {}; + tables.forEach(function (table) { return tableMap[table.name] = table; }); + return { + stack: "dbcore", + transaction: db.transaction.bind(db), + table: function (name) { + var result = tableMap[name]; + if (!result) + throw new Error("Table '".concat(name, "' not found")); + return tableMap[name]; + }, + MIN_KEY: -Infinity, + MAX_KEY: getMaxKey(IdbKeyRange), + schema: schema + }; +} + +function createMiddlewareStack(stackImpl, middlewares) { + return middlewares.reduce(function (down, _a) { + var create = _a.create; + return (__assign(__assign({}, down), create(down))); + }, stackImpl); +} +function createMiddlewareStacks(middlewares, idbdb, _a, tmpTrans) { + var IDBKeyRange = _a.IDBKeyRange; _a.indexedDB; + var dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); + return { + dbcore: dbcore + }; +} +function generateMiddlewareStacks(db, tmpTrans) { + var idbdb = tmpTrans.db; + var stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans); + db.core = stacks.dbcore; + db.tables.forEach(function (table) { + var tableName = table.name; + if (db.core.schema.tables.some(function (tbl) { return tbl.name === tableName; })) { + table.core = db.core.table(tableName); + if (db[tableName] instanceof db.Table) { + db[tableName].core = table.core; + } + } + }); +} + +function setApiOnPlace(db, objs, tableNames, dbschema) { + tableNames.forEach(function (tableName) { + var schema = dbschema[tableName]; + objs.forEach(function (obj) { + var propDesc = getPropertyDescriptor(obj, tableName); + if (!propDesc || ("value" in propDesc && propDesc.value === undefined)) { + if (obj === db.Transaction.prototype || obj instanceof db.Transaction) { + setProp(obj, tableName, { + get: function () { return this.table(tableName); }, + set: function (value) { + defineProperty(this, tableName, { value: value, writable: true, configurable: true, enumerable: true }); + } + }); + } + else { + obj[tableName] = new db.Table(tableName, schema); + } + } + }); + }); +} +function removeTablesApi(db, objs) { + objs.forEach(function (obj) { + for (var key in obj) { + if (obj[key] instanceof db.Table) + delete obj[key]; + } + }); +} +function lowerVersionFirst(a, b) { + return a._cfg.version - b._cfg.version; +} +function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) { + var globalSchema = db._dbSchema; + if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) { + globalSchema.$meta = createTableSchema("$meta", parseIndexSyntax("")[0], []); + db._storeNames.push('$meta'); + } + var trans = db._createTransaction('readwrite', db._storeNames, globalSchema); + trans.create(idbUpgradeTrans); + trans._completion.catch(reject); + var rejectTransaction = trans._reject.bind(trans); + var transless = PSD.transless || PSD; + newScope(function () { + PSD.trans = trans; + PSD.transless = transless; + if (oldVersion === 0) { + keys(globalSchema).forEach(function (tableName) { + createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + generateMiddlewareStacks(db, idbUpgradeTrans); + DexiePromise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction); + } + else { + generateMiddlewareStacks(db, idbUpgradeTrans); + return getExistingVersion(db, trans, oldVersion) + .then(function (oldVersion) { return updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans); }) + .catch(rejectTransaction); + } + }); +} +function patchCurrentVersion(db, idbUpgradeTrans) { + createMissingTables(db._dbSchema, idbUpgradeTrans); + if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) { + idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version'); + } + var globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans); + var diff = getSchemaDiff(globalSchema, db._dbSchema); + var _loop_1 = function (tableChange) { + if (tableChange.change.length || tableChange.recreate) { + console.warn("Unable to patch indexes of table ".concat(tableChange.name, " because it has changes on the type of index or primary key.")); + return { value: void 0 }; + } + var store = idbUpgradeTrans.objectStore(tableChange.name); + tableChange.add.forEach(function (idx) { + if (debug) + console.debug("Dexie upgrade patch: Creating missing index ".concat(tableChange.name, ".").concat(idx.src)); + addIndex(store, idx); + }); + }; + for (var _i = 0, _a = diff.change; _i < _a.length; _i++) { + var tableChange = _a[_i]; + var state_1 = _loop_1(tableChange); + if (typeof state_1 === "object") + return state_1.value; + } +} +function getExistingVersion(db, trans, oldVersion) { + if (trans.storeNames.includes('$meta')) { + return trans.table('$meta').get('version').then(function (metaVersion) { + return metaVersion != null ? metaVersion : oldVersion; + }); + } + else { + return DexiePromise.resolve(oldVersion); + } +} +function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) { + var queue = []; + var versions = db._versions; + var globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + var versToRun = versions.filter(function (v) { return v._cfg.version >= oldVersion; }); + if (versToRun.length === 0) { + return DexiePromise.resolve(); + } + versToRun.forEach(function (version) { + queue.push(function () { + var oldSchema = globalSchema; + var newSchema = version._cfg.dbschema; + adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans); + adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans); + globalSchema = db._dbSchema = newSchema; + var diff = getSchemaDiff(oldSchema, newSchema); + diff.add.forEach(function (tuple) { + createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + diff.change.forEach(function (change) { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } + else { + var store_1 = idbUpgradeTrans.objectStore(change.name); + change.add.forEach(function (idx) { return addIndex(store_1, idx); }); + change.change.forEach(function (idx) { + store_1.deleteIndex(idx.name); + addIndex(store_1, idx); + }); + change.del.forEach(function (idxName) { return store_1.deleteIndex(idxName); }); + } + }); + var contentUpgrade = version._cfg.contentUpgrade; + if (contentUpgrade && version._cfg.version > oldVersion) { + generateMiddlewareStacks(db, idbUpgradeTrans); + trans._memoizedTables = {}; + var upgradeSchema_1 = shallowClone(newSchema); + diff.del.forEach(function (table) { + upgradeSchema_1[table] = oldSchema[table]; + }); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema_1), upgradeSchema_1); + trans.schema = upgradeSchema_1; + var contentUpgradeIsAsync_1 = isAsyncFunction(contentUpgrade); + if (contentUpgradeIsAsync_1) { + incrementExpectedAwaits(); + } + var returnValue_1; + var promiseFollowed = DexiePromise.follow(function () { + returnValue_1 = contentUpgrade(trans); + if (returnValue_1) { + if (contentUpgradeIsAsync_1) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue_1.then(decrementor, decrementor); + } + } + }); + return (returnValue_1 && typeof returnValue_1.then === 'function' ? + DexiePromise.resolve(returnValue_1) : promiseFollowed.then(function () { return returnValue_1; })); + } + }); + queue.push(function (idbtrans) { + var newSchema = version._cfg.dbschema; + deleteRemovedTables(newSchema, idbtrans); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema); + trans.schema = db._dbSchema; + }); + queue.push(function (idbtrans) { + if (db.idbdb.objectStoreNames.contains('$meta')) { + if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) { + db.idbdb.deleteObjectStore('$meta'); + delete db._dbSchema.$meta; + db._storeNames = db._storeNames.filter(function (name) { return name !== '$meta'; }); + } + else { + idbtrans.objectStore('$meta').put(version._cfg.version, 'version'); + } + } + }); + }); + function runQueue() { + return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : + DexiePromise.resolve(); + } + return runQueue().then(function () { + createMissingTables(globalSchema, idbUpgradeTrans); + }); +} +function getSchemaDiff(oldSchema, newSchema) { + var diff = { + del: [], + add: [], + change: [] + }; + var table; + for (table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + var oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } + else { + var change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if (( + '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) || + (oldDef.primKey.auto !== newDef.primKey.auto)) { + change.recreate = true; + diff.change.push(change); + } + else { + var oldIndexes = oldDef.idxByName; + var newIndexes = newDef.idxByName; + var idxName = void 0; + for (idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; +} +function createTable(idbtrans, tableName, primKey, indexes) { + var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? + { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : + { autoIncrement: primKey.auto }); + indexes.forEach(function (idx) { return addIndex(store, idx); }); + return store; +} +function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach(function (tableName) { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + if (debug) + console.debug('Dexie: Creating missing table', tableName); + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); +} +function deleteRemovedTables(newSchema, idbtrans) { + [].slice.call(idbtrans.db.objectStoreNames).forEach(function (storeName) { + return newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName); + }); +} +function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); +} +function buildGlobalSchema(db, idbdb, tmpTrans) { + var globalSchema = {}; + var dbStoreNames = slice(idbdb.objectStoreNames, 0); + dbStoreNames.forEach(function (storeName) { + var store = tmpTrans.objectStore(storeName); + var keyPath = store.keyPath; + var primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", true, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); + var indexes = []; + for (var j = 0; j < store.indexNames.length; ++j) { + var idbindex = store.index(store.indexNames[j]); + keyPath = idbindex.keyPath; + var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); + indexes.push(index); + } + globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); + }); + return globalSchema; +} +function readGlobalSchema(db, idbdb, tmpTrans) { + db.verno = idbdb.version / 10; + var globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans); + db._storeNames = slice(idbdb.objectStoreNames, 0); + setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema); +} +function verifyInstalledSchema(db, tmpTrans) { + var installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans); + var diff = getSchemaDiff(installedSchema, db._dbSchema); + return !(diff.add.length || diff.change.some(function (ch) { return ch.add.length || ch.change.length; })); +} +function adjustToExistingIndexNames(db, schema, idbtrans) { + var storeNames = idbtrans.db.objectStoreNames; + for (var i = 0; i < storeNames.length; ++i) { + var storeName = storeNames[i]; + var store = idbtrans.objectStore(storeName); + db._hasGetAll = 'getAll' in store; + for (var j = 0; j < store.indexNames.length; ++j) { + var indexName = store.indexNames[j]; + var keyPath = store.index(indexName).keyPath; + var dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; + if (schema[storeName]) { + var indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) { + indexSpec.name = indexName; + delete schema[storeName].idxByName[dexieName]; + schema[storeName].idxByName[indexName] = indexSpec; + } + } + } + } + if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + db._hasGetAll = false; + } +} +function parseIndexSyntax(primKeyAndIndexes) { + return primKeyAndIndexes.split(',').map(function (index, indexNum) { + index = index.trim(); + var name = index.replace(/([&*]|\+\+)/g, ""); + var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; + return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0); + }); +} + +var Version = (function () { + function Version() { + } + Version.prototype._parseStoresSpec = function (stores, outSchema) { + keys(stores).forEach(function (tableName) { + if (stores[tableName] !== null) { + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + primKey.unique = true; + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + indexes.forEach(function (idx) { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + }); + outSchema[tableName] = createTableSchema(tableName, primKey, indexes); + } + }); + }; + Version.prototype.stores = function (stores) { + var db = this.db; + this._cfg.storesSource = this._cfg.storesSource ? + extend(this._cfg.storesSource, stores) : + stores; + var versions = db._versions; + var storesSpec = {}; + var dbschema = {}; + versions.forEach(function (version) { + extend(storesSpec, version._cfg.storesSource); + dbschema = (version._cfg.dbschema = {}); + version._parseStoresSpec(storesSpec, dbschema); + }); + db._dbSchema = dbschema; + removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]); + setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + db._storeNames = keys(dbschema); + return this; + }; + Version.prototype.upgrade = function (upgradeFunction) { + this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); + return this; + }; + return Version; +}()); + +function createVersionConstructor(db) { + return makeClassConstructor(Version.prototype, function Version(versionNumber) { + this.db = db; + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + }); +} + +function getDbNamesTable(indexedDB, IDBKeyRange) { + var dbNamesDB = indexedDB["_dbNamesDB"]; + if (!dbNamesDB) { + dbNamesDB = indexedDB["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { + addons: [], + indexedDB: indexedDB, + IDBKeyRange: IDBKeyRange, + }); + dbNamesDB.version(1).stores({ dbnames: "name" }); + } + return dbNamesDB.table("dbnames"); +} +function hasDatabasesNative(indexedDB) { + return indexedDB && typeof indexedDB.databases === "function"; +} +function getDatabaseNames(_a) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + return hasDatabasesNative(indexedDB) + ? Promise.resolve(indexedDB.databases()).then(function (infos) { + return infos + .map(function (info) { return info.name; }) + .filter(function (name) { return name !== DBNAMES_DB; }); + }) + : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys(); +} +function _onDatabaseCreated(_a, name) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).put({ name: name }).catch(nop); +} +function _onDatabaseDeleted(_a, name) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop); +} + +function vip(fn) { + return newScope(function () { + PSD.letThrough = true; + return fn(); + }); +} + +function idbReady() { + var isSafari = !navigator.userAgentData && + /Safari\//.test(navigator.userAgent) && + !/Chrom(e|ium)\//.test(navigator.userAgent); + if (!isSafari || !indexedDB.databases) + return Promise.resolve(); + var intervalId; + return new Promise(function (resolve) { + var tryIdb = function () { return indexedDB.databases().finally(resolve); }; + intervalId = setInterval(tryIdb, 100); + tryIdb(); + }).finally(function () { return clearInterval(intervalId); }); +} + +var _a; +function isEmptyRange(node) { + return !("from" in node); +} +var RangeSet = function (fromOrTree, to) { + if (this) { + extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 }); + } + else { + var rv = new RangeSet(); + if (fromOrTree && ("d" in fromOrTree)) { + extend(rv, fromOrTree); + } + return rv; + } +}; +props(RangeSet.prototype, (_a = { + add: function (rangeSet) { + mergeRanges(this, rangeSet); + return this; + }, + addKey: function (key) { + addRange(this, key, key); + return this; + }, + addKeys: function (keys) { + var _this = this; + keys.forEach(function (key) { return addRange(_this, key, key); }); + return this; + } + }, + _a[iteratorSymbol] = function () { + return getRangeSetIterator(this); + }, + _a)); +function addRange(target, from, to) { + var diff = cmp(from, to); + if (isNaN(diff)) + return; + if (diff > 0) + throw RangeError(); + if (isEmptyRange(target)) + return extend(target, { from: from, to: to, d: 1 }); + var left = target.l; + var right = target.r; + if (cmp(to, target.from) < 0) { + left + ? addRange(left, from, to) + : (target.l = { from: from, to: to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.to) > 0) { + right + ? addRange(right, from, to) + : (target.r = { from: from, to: to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.from) < 0) { + target.from = from; + target.l = null; + target.d = right ? right.d + 1 : 1; + } + if (cmp(to, target.to) > 0) { + target.to = to; + target.r = null; + target.d = target.l ? target.l.d + 1 : 1; + } + var rightWasCutOff = !target.r; + if (left && !target.l) { + mergeRanges(target, left); + } + if (right && rightWasCutOff) { + mergeRanges(target, right); + } +} +function mergeRanges(target, newSet) { + function _addRangeSet(target, _a) { + var from = _a.from, to = _a.to, l = _a.l, r = _a.r; + addRange(target, from, to); + if (l) + _addRangeSet(target, l); + if (r) + _addRangeSet(target, r); + } + if (!isEmptyRange(newSet)) + _addRangeSet(target, newSet); +} +function rangesOverlap(rangeSet1, rangeSet2) { + var i1 = getRangeSetIterator(rangeSet2); + var nextResult1 = i1.next(); + if (nextResult1.done) + return false; + var a = nextResult1.value; + var i2 = getRangeSetIterator(rangeSet1); + var nextResult2 = i2.next(a.from); + var b = nextResult2.value; + while (!nextResult1.done && !nextResult2.done) { + if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0) + return true; + cmp(a.from, b.from) < 0 + ? (a = (nextResult1 = i1.next(b.from)).value) + : (b = (nextResult2 = i2.next(a.from)).value); + } + return false; +} +function getRangeSetIterator(node) { + var state = isEmptyRange(node) ? null : { s: 0, n: node }; + return { + next: function (key) { + var keyProvided = arguments.length > 0; + while (state) { + switch (state.s) { + case 0: + state.s = 1; + if (keyProvided) { + while (state.n.l && cmp(key, state.n.from) < 0) + state = { up: state, n: state.n.l, s: 1 }; + } + else { + while (state.n.l) + state = { up: state, n: state.n.l, s: 1 }; + } + case 1: + state.s = 2; + if (!keyProvided || cmp(key, state.n.to) <= 0) + return { value: state.n, done: false }; + case 2: + if (state.n.r) { + state.s = 3; + state = { up: state, n: state.n.r, s: 0 }; + continue; + } + case 3: + state = state.up; + } + } + return { done: true }; + }, + }; +} +function rebalance(target) { + var _a, _b; + var diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0); + var r = diff > 1 ? "r" : diff < -1 ? "l" : ""; + if (r) { + var l = r === "r" ? "l" : "r"; + var rootClone = __assign({}, target); + var oldRootRight = target[r]; + target.from = oldRootRight.from; + target.to = oldRootRight.to; + target[r] = oldRootRight[r]; + rootClone[r] = oldRootRight[l]; + target[l] = rootClone; + rootClone.d = computeDepth(rootClone); + } + target.d = computeDepth(target); +} +function computeDepth(_a) { + var r = _a.r, l = _a.l; + return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1; +} + +function extendObservabilitySet(target, newSet) { + keys(newSet).forEach(function (part) { + if (target[part]) + mergeRanges(target[part], newSet[part]); + else + target[part] = cloneSimpleObjectTree(newSet[part]); + }); + return target; +} + +function obsSetsOverlap(os1, os2) { + return os1.all || os2.all || Object.keys(os1).some(function (key) { return os2[key] && rangesOverlap(os2[key], os1[key]); }); +} + +var cache = {}; + +var unsignaledParts = {}; +var isTaskEnqueued = false; +function signalSubscribersLazily(part, optimistic) { + extendObservabilitySet(unsignaledParts, part); + if (!isTaskEnqueued) { + isTaskEnqueued = true; + setTimeout(function () { + isTaskEnqueued = false; + var parts = unsignaledParts; + unsignaledParts = {}; + signalSubscribersNow(parts, false); + }, 0); + } +} +function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries) { + if (deleteAffectedCacheEntries === void 0) { deleteAffectedCacheEntries = false; } + var queriesToSignal = new Set(); + if (updatedParts.all) { + for (var _i = 0, _a = Object.values(cache); _i < _a.length; _i++) { + var tblCache = _a[_i]; + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + else { + for (var key in updatedParts) { + var parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key); + if (parts) { + var dbName = parts[1], tableName = parts[2]; + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (tblCache) + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + } + queriesToSignal.forEach(function (requery) { return requery(); }); +} +function collectTableSubscribers(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) { + var updatedEntryLists = []; + for (var _i = 0, _a = Object.entries(tblCache.queries.query); _i < _a.length; _i++) { + var _b = _a[_i], indexName = _b[0], entries = _b[1]; + var filteredEntries = []; + for (var _c = 0, entries_1 = entries; _c < entries_1.length; _c++) { + var entry = entries_1[_c]; + if (obsSetsOverlap(updatedParts, entry.obsSet)) { + entry.subscribers.forEach(function (requery) { return outQueriesToSignal.add(requery); }); + } + else if (deleteAffectedCacheEntries) { + filteredEntries.push(entry); + } + } + if (deleteAffectedCacheEntries) + updatedEntryLists.push([indexName, filteredEntries]); + } + if (deleteAffectedCacheEntries) { + for (var _d = 0, updatedEntryLists_1 = updatedEntryLists; _d < updatedEntryLists_1.length; _d++) { + var _e = updatedEntryLists_1[_d], indexName = _e[0], filteredEntries = _e[1]; + tblCache.queries.query[indexName] = filteredEntries; + } + } +} + +function dexieOpen(db) { + var state = db._state; + var indexedDB = db._deps.indexedDB; + if (state.isBeingOpened || db.idbdb) + return state.dbReadyPromise.then(function () { return state.dbOpenError ? + rejection(state.dbOpenError) : + db; }); + state.isBeingOpened = true; + state.dbOpenError = null; + state.openComplete = false; + var openCanceller = state.openCanceller; + var nativeVerToOpen = Math.round(db.verno * 10); + var schemaPatchMode = false; + function throwIfCancelled() { + if (state.openCanceller !== openCanceller) + throw new exceptions.DatabaseClosed('db.open() was cancelled'); + } + var resolveDbReady = state.dbReadyResolve, + upgradeTransaction = null, wasCreated = false; + var tryOpenDB = function () { return new DexiePromise(function (resolve, reject) { + throwIfCancelled(); + if (!indexedDB) + throw new exceptions.MissingAPI(); + var dbName = db.name; + var req = state.autoSchema || !nativeVerToOpen ? + indexedDB.open(dbName) : + indexedDB.open(dbName, nativeVerToOpen); + if (!req) + throw new exceptions.MissingAPI(); + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(db._fireOnBlocked); + req.onupgradeneeded = wrap(function (e) { + upgradeTransaction = req.transaction; + if (state.autoSchema && !db._options.allowEmptyDB) { + req.onerror = preventDefault; + upgradeTransaction.abort(); + req.result.close(); + var delreq = indexedDB.deleteDatabase(dbName); + delreq.onsuccess = delreq.onerror = wrap(function () { + reject(new exceptions.NoSuchDatabase("Database ".concat(dbName, " doesnt exist"))); + }); + } + else { + upgradeTransaction.onerror = eventRejectHandler(reject); + var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; + wasCreated = oldVer < 1; + db.idbdb = req.result; + if (schemaPatchMode) { + patchCurrentVersion(db, upgradeTransaction); + } + runUpgraders(db, oldVer / 10, upgradeTransaction, reject); + } + }, reject); + req.onsuccess = wrap(function () { + upgradeTransaction = null; + var idbdb = db.idbdb = req.result; + var objectStoreNames = slice(idbdb.objectStoreNames); + if (objectStoreNames.length > 0) + try { + var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly'); + if (state.autoSchema) + readGlobalSchema(db, idbdb, tmpTrans); + else { + adjustToExistingIndexNames(db, db._dbSchema, tmpTrans); + if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) { + console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this."); + idbdb.close(); + nativeVerToOpen = idbdb.version + 1; + schemaPatchMode = true; + return resolve(tryOpenDB()); + } + } + generateMiddlewareStacks(db, tmpTrans); + } + catch (e) { + } + connections.push(db); + idbdb.onversionchange = wrap(function (ev) { + state.vcFired = true; + db.on("versionchange").fire(ev); + }); + idbdb.onclose = wrap(function (ev) { + db.on("close").fire(ev); + }); + if (wasCreated) + _onDatabaseCreated(db._deps, dbName); + resolve(); + }, reject); + }).catch(function (err) { + switch (err === null || err === void 0 ? void 0 : err.name) { + case "UnknownError": + if (state.PR1398_maxLoop > 0) { + state.PR1398_maxLoop--; + console.warn('Dexie: Workaround for Chrome UnknownError on open()'); + return tryOpenDB(); + } + break; + case "VersionError": + if (nativeVerToOpen > 0) { + nativeVerToOpen = 0; + return tryOpenDB(); + } + break; + } + return DexiePromise.reject(err); + }); }; + return DexiePromise.race([ + openCanceller, + (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(tryOpenDB) + ]).then(function () { + throwIfCancelled(); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(function () { return db.on.ready.fire(db.vip); })).then(function fireRemainders() { + if (state.onReadyBeingFired.length > 0) { + var remainders_1 = state.onReadyBeingFired.reduce(promisableChain, nop); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(function () { return remainders_1(db.vip); })).then(fireRemainders); + } + }); + }).finally(function () { + if (state.openCanceller === openCanceller) { + state.onReadyBeingFired = null; + state.isBeingOpened = false; + } + }).catch(function (err) { + state.dbOpenError = err; + try { + upgradeTransaction && upgradeTransaction.abort(); + } + catch (_a) { } + if (openCanceller === state.openCanceller) { + db._close(); + } + return rejection(err); + }).finally(function () { + state.openComplete = true; + resolveDbReady(); + }).then(function () { + if (wasCreated) { + var everything_1 = {}; + db.tables.forEach(function (table) { + table.schema.indexes.forEach(function (idx) { + if (idx.name) + everything_1["idb://".concat(db.name, "/").concat(table.name, "/").concat(idx.name)] = new RangeSet(-Infinity, [[[]]]); + }); + everything_1["idb://".concat(db.name, "/").concat(table.name, "/")] = everything_1["idb://".concat(db.name, "/").concat(table.name, "/:dels")] = new RangeSet(-Infinity, [[[]]]); + }); + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything_1); + signalSubscribersNow(everything_1, true); + } + return db; + }); +} + +function awaitIterator(iterator) { + var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return function (val) { + var next = getNext(val), value = next.value; + return next.done ? value : + (!value || typeof value.then !== 'function' ? + isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : + value.then(onSuccess, onError)); + }; + } + return step(callNext)(); +} + +function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + var i = arguments.length; + if (i < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + var args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + scopeFunc = args.pop(); + var tables = flatten(args); + return [mode, tables, scopeFunc]; +} +function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) { + return DexiePromise.resolve().then(function () { + var transless = PSD.transless || PSD; + var trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction); + trans.explicit = true; + var zoneProps = { + trans: trans, + transless: transless + }; + if (parentTransaction) { + trans.idbtrans = parentTransaction.idbtrans; + } + else { + try { + trans.create(); + trans.idbtrans._explicit = true; + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(function () { return enterTransactionScope(db, mode, storeNames, null, scopeFunc); }); + } + return rejection(ex); + } + } + var scopeFuncIsAsync = isAsyncFunction(scopeFunc); + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + var returnValue; + var promiseFollowed = DexiePromise.follow(function () { + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (scopeFuncIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue).then(function (x) { return trans.active ? + x + : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); }) + : promiseFollowed.then(function () { return returnValue; })).then(function (x) { + if (parentTransaction) + trans._resolve(); + return trans._completion.then(function () { return x; }); + }).catch(function (e) { + trans._reject(e); + return rejection(e); + }); + }); +} + +function pad(a, value, count) { + var result = isArray(a) ? a.slice() : [a]; + for (var i = 0; i < count; ++i) + result.push(value); + return result; +} +function createVirtualIndexMiddleware(down) { + return __assign(__assign({}, down), { table: function (tableName) { + var table = down.table(tableName); + var schema = table.schema; + var indexLookup = {}; + var allVirtualIndexes = []; + function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { + var keyPathAlias = getKeyPathAlias(keyPath); + var indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []); + var keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length; + var isVirtual = keyTail > 0; + var virtualIndex = __assign(__assign({}, lowLevelIndex), { name: isVirtual + ? "".concat(keyPathAlias, "(virtual-from:").concat(lowLevelIndex.name, ")") + : lowLevelIndex.name, lowLevelIndex: lowLevelIndex, isVirtual: isVirtual, keyTail: keyTail, keyLength: keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique }); + indexList.push(virtualIndex); + if (!virtualIndex.isPrimaryKey) { + allVirtualIndexes.push(virtualIndex); + } + if (keyLength > 1) { + var virtualKeyPath = keyLength === 2 ? + keyPath[0] : + keyPath.slice(0, keyLength - 1); + addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); + } + indexList.sort(function (a, b) { return a.keyTail - b.keyTail; }); + return virtualIndex; + } + var primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); + indexLookup[":id"] = [primaryKey]; + for (var _i = 0, _a = schema.indexes; _i < _a.length; _i++) { + var index = _a[_i]; + addVirtualIndexes(index.keyPath, 0, index); + } + function findBestIndex(keyPath) { + var result = indexLookup[getKeyPathAlias(keyPath)]; + return result && result[0]; + } + function translateRange(range, keyTail) { + return { + type: range.type === 1 ? + 2 : + range.type, + lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), + lowerOpen: true, + upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), + upperOpen: true + }; + } + function translateRequest(req) { + var index = req.query.index; + return index.isVirtual ? __assign(__assign({}, req), { query: { + index: index.lowLevelIndex, + range: translateRange(req.query.range, index.keyTail) + } }) : req; + } + var result = __assign(__assign({}, table), { schema: __assign(__assign({}, schema), { primaryKey: primaryKey, indexes: allVirtualIndexes, getIndexByKeyPath: findBestIndex }), count: function (req) { + return table.count(translateRequest(req)); + }, query: function (req) { + return table.query(translateRequest(req)); + }, openCursor: function (req) { + var _a = req.query.index, keyTail = _a.keyTail, isVirtual = _a.isVirtual, keyLength = _a.keyLength; + if (!isVirtual) + return table.openCursor(req); + function createVirtualCursor(cursor) { + function _continue(key) { + key != null ? + cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : + req.unique ? + cursor.continue(cursor.key.slice(0, keyLength) + .concat(req.reverse + ? down.MIN_KEY + : down.MAX_KEY, keyTail)) : + cursor.continue(); + } + var virtualCursor = Object.create(cursor, { + continue: { value: _continue }, + continuePrimaryKey: { + value: function (key, primaryKey) { + cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey); + } + }, + primaryKey: { + get: function () { + return cursor.primaryKey; + } + }, + key: { + get: function () { + var key = cursor.key; + return keyLength === 1 ? + key[0] : + key.slice(0, keyLength); + } + }, + value: { + get: function () { + return cursor.value; + } + } + }); + return virtualCursor; + } + return table.openCursor(translateRequest(req)) + .then(function (cursor) { return cursor && createVirtualCursor(cursor); }); + } }); + return result; + } }); +} +var virtualIndexMiddleware = { + stack: "dbcore", + name: "VirtualIndexMiddleware", + level: 1, + create: createVirtualIndexMiddleware +}; + +function getObjectDiff(a, b, rv, prfx) { + rv = rv || {}; + prfx = prfx || ''; + keys(a).forEach(function (prop) { + if (!hasOwn(b, prop)) { + rv[prfx + prop] = undefined; + } + else { + var ap = a[prop], bp = b[prop]; + if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) { + var apTypeName = toStringTag(ap); + var bpTypeName = toStringTag(bp); + if (apTypeName !== bpTypeName) { + rv[prfx + prop] = b[prop]; + } + else if (apTypeName === 'Object') { + getObjectDiff(ap, bp, rv, prfx + prop + '.'); + } + else if (ap !== bp) { + rv[prfx + prop] = b[prop]; + } + } + else if (ap !== bp) + rv[prfx + prop] = b[prop]; + } + }); + keys(b).forEach(function (prop) { + if (!hasOwn(a, prop)) { + rv[prfx + prop] = b[prop]; + } + }); + return rv; +} + +function getEffectiveKeys(primaryKey, req) { + if (req.type === 'delete') + return req.keys; + return req.keys || req.values.map(primaryKey.extractKey); +} + +var hooksMiddleware = { + stack: "dbcore", + name: "HooksMiddleware", + level: 2, + create: function (downCore) { return (__assign(__assign({}, downCore), { table: function (tableName) { + var downTable = downCore.table(tableName); + var primaryKey = downTable.schema.primaryKey; + var tableMiddleware = __assign(__assign({}, downTable), { mutate: function (req) { + var dxTrans = PSD.trans; + var _a = dxTrans.table(tableName).hook, deleting = _a.deleting, creating = _a.creating, updating = _a.updating; + switch (req.type) { + case 'add': + if (creating.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'put': + if (creating.fire === nop && updating.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'delete': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'deleteRange': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return deleteRange(req); }, true); + } + return downTable.mutate(req); + function addPutOrDelete(req) { + var dxTrans = PSD.trans; + var keys = req.keys || getEffectiveKeys(primaryKey, req); + if (!keys) + throw new Error("Keys missing"); + req = req.type === 'add' || req.type === 'put' ? __assign(__assign({}, req), { keys: keys }) : __assign({}, req); + if (req.type !== 'delete') + req.values = __spreadArray([], req.values, true); + if (req.keys) + req.keys = __spreadArray([], req.keys, true); + return getExistingValues(downTable, req, keys).then(function (existingValues) { + var contexts = keys.map(function (key, i) { + var existingValue = existingValues[i]; + var ctx = { onerror: null, onsuccess: null }; + if (req.type === 'delete') { + deleting.fire.call(ctx, key, existingValue, dxTrans); + } + else if (req.type === 'add' || existingValue === undefined) { + var generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans); + if (key == null && generatedPrimaryKey != null) { + key = generatedPrimaryKey; + req.keys[i] = key; + if (!primaryKey.outbound) { + setByKeyPath(req.values[i], primaryKey.keyPath, key); + } + } + } + else { + var objectDiff = getObjectDiff(existingValue, req.values[i]); + var additionalChanges_1 = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans); + if (additionalChanges_1) { + var requestedValue_1 = req.values[i]; + Object.keys(additionalChanges_1).forEach(function (keyPath) { + if (hasOwn(requestedValue_1, keyPath)) { + requestedValue_1[keyPath] = additionalChanges_1[keyPath]; + } + else { + setByKeyPath(requestedValue_1, keyPath, additionalChanges_1[keyPath]); + } + }); + } + } + return ctx; + }); + return downTable.mutate(req).then(function (_a) { + var failures = _a.failures, results = _a.results, numFailures = _a.numFailures, lastResult = _a.lastResult; + for (var i = 0; i < keys.length; ++i) { + var primKey = results ? results[i] : keys[i]; + var ctx = contexts[i]; + if (primKey == null) { + ctx.onerror && ctx.onerror(failures[i]); + } + else { + ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ? + req.values[i] : + primKey + ); + } + } + return { failures: failures, results: results, numFailures: numFailures, lastResult: lastResult }; + }).catch(function (error) { + contexts.forEach(function (ctx) { return ctx.onerror && ctx.onerror(error); }); + return Promise.reject(error); + }); + }); + } + function deleteRange(req) { + return deleteNextChunk(req.trans, req.range, 10000); + } + function deleteNextChunk(trans, range, limit) { + return downTable.query({ trans: trans, values: false, query: { index: primaryKey, range: range }, limit: limit }) + .then(function (_a) { + var result = _a.result; + return addPutOrDelete({ type: 'delete', keys: result, trans: trans }).then(function (res) { + if (res.numFailures > 0) + return Promise.reject(res.failures[0]); + if (result.length < limit) { + return { failures: [], numFailures: 0, lastResult: undefined }; + } + else { + return deleteNextChunk(trans, __assign(__assign({}, range), { lower: result[result.length - 1], lowerOpen: true }), limit); + } + }); + }); + } + } }); + return tableMiddleware; + } })); } +}; +function getExistingValues(table, req, effectiveKeys) { + return req.type === "add" + ? Promise.resolve([]) + : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: "immutable" }); +} + +function getFromTransactionCache(keys, cache, clone) { + try { + if (!cache) + return null; + if (cache.keys.length < keys.length) + return null; + var result = []; + for (var i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) { + if (cmp(cache.keys[i], keys[j]) !== 0) + continue; + result.push(clone ? deepClone(cache.values[i]) : cache.values[i]); + ++j; + } + return result.length === keys.length ? result : null; + } + catch (_a) { + return null; + } +} +var cacheExistingValuesMiddleware = { + stack: "dbcore", + level: -1, + create: function (core) { + return { + table: function (tableName) { + var table = core.table(tableName); + return __assign(__assign({}, table), { getMany: function (req) { + if (!req.cache) { + return table.getMany(req); + } + var cachedResult = getFromTransactionCache(req.keys, req.trans["_cache"], req.cache === "clone"); + if (cachedResult) { + return DexiePromise.resolve(cachedResult); + } + return table.getMany(req).then(function (res) { + req.trans["_cache"] = { + keys: req.keys, + values: req.cache === "clone" ? deepClone(res) : res, + }; + return res; + }); + }, mutate: function (req) { + if (req.type !== "add") + req.trans["_cache"] = null; + return table.mutate(req); + } }); + }, + }; + }, +}; + +function isCachableContext(ctx, table) { + return (ctx.trans.mode === 'readonly' && + !!ctx.subscr && + !ctx.trans.explicit && + ctx.trans.db._options.cache !== 'disabled' && + !table.schema.primaryKey.outbound); +} + +function isCachableRequest(type, req) { + switch (type) { + case 'query': + return req.values && !req.unique; + case 'get': + return false; + case 'getMany': + return false; + case 'count': + return false; + case 'openCursor': + return false; + } +} + +var observabilityMiddleware = { + stack: "dbcore", + level: 0, + name: "Observability", + create: function (core) { + var dbName = core.schema.name; + var FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY); + return __assign(__assign({}, core), { transaction: function (stores, mode, options) { + if (PSD.subscr && mode !== 'readonly') { + throw new exceptions.ReadOnly("Readwrite transaction in liveQuery context. Querier source: ".concat(PSD.querier)); + } + return core.transaction(stores, mode, options); + }, table: function (tableName) { + var table = core.table(tableName); + var schema = table.schema; + var primaryKey = schema.primaryKey, indexes = schema.indexes; + var extractKey = primaryKey.extractKey, outbound = primaryKey.outbound; + var indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(function (index) { return index.compound && index.keyPath.includes(primaryKey.keyPath); }); + var tableClone = __assign(__assign({}, table), { mutate: function (req) { + var trans = req.trans; + var mutatedParts = req.mutatedParts || (req.mutatedParts = {}); + var getRangeSet = function (indexName) { + var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); + return (mutatedParts[part] || + (mutatedParts[part] = new RangeSet())); + }; + var pkRangeSet = getRangeSet(""); + var delsRangeSet = getRangeSet(":dels"); + var type = req.type; + var _a = req.type === "deleteRange" + ? [req.range] + : req.type === "delete" + ? [req.keys] + : req.values.length < 50 + ? [getEffectiveKeys(primaryKey, req).filter(function (id) { return id; }), req.values] + : [], keys = _a[0], newObjs = _a[1]; + var oldCache = req.trans["_cache"]; + if (isArray(keys)) { + pkRangeSet.addKeys(keys); + var oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null; + if (!oldObjs) { + delsRangeSet.addKeys(keys); + } + if (oldObjs || newObjs) { + trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs); + } + } + else if (keys) { + var range = { from: keys.lower, to: keys.upper }; + delsRangeSet.add(range); + pkRangeSet.add(range); + } + else { + pkRangeSet.add(FULL_RANGE); + delsRangeSet.add(FULL_RANGE); + schema.indexes.forEach(function (idx) { return getRangeSet(idx.name).add(FULL_RANGE); }); + } + return table.mutate(req).then(function (res) { + if (keys && (req.type === 'add' || req.type === 'put')) { + pkRangeSet.addKeys(res.results); + if (indexesWithAutoIncPK) { + indexesWithAutoIncPK.forEach(function (idx) { + var idxVals = req.values.map(function (v) { return idx.extractKey(v); }); + var pkPos = idx.keyPath.findIndex(function (prop) { return prop === primaryKey.keyPath; }); + res.results.forEach(function (pk) { return idxVals[pkPos] = pk; }); + getRangeSet(idx.name).addKeys(idxVals); + }); + } + } + trans.mutatedParts = extendObservabilitySet(trans.mutatedParts || {}, mutatedParts); + return res; + }); + } }); + var getRange = function (_a) { + var _b, _c; + var _d = _a.query, index = _d.index, range = _d.range; + return [ + index, + new RangeSet((_b = range.lower) !== null && _b !== void 0 ? _b : core.MIN_KEY, (_c = range.upper) !== null && _c !== void 0 ? _c : core.MAX_KEY), + ]; + }; + var readSubscribers = { + get: function (req) { return [primaryKey, new RangeSet(req.key)]; }, + getMany: function (req) { return [primaryKey, new RangeSet().addKeys(req.keys)]; }, + count: getRange, + query: getRange, + openCursor: getRange, + }; + keys(readSubscribers).forEach(function (method) { + tableClone[method] = function (req) { + var subscr = PSD.subscr; + var isLiveQuery = !!subscr; + var cachable = isCachableContext(PSD, table) && isCachableRequest(method, req); + var obsSet = cachable + ? req.obsSet = {} + : subscr; + if (isLiveQuery) { + var getRangeSet = function (indexName) { + var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); + return (obsSet[part] || + (obsSet[part] = new RangeSet())); + }; + var pkRangeSet_1 = getRangeSet(""); + var delsRangeSet_1 = getRangeSet(":dels"); + var _a = readSubscribers[method](req), queriedIndex = _a[0], queriedRanges = _a[1]; + if (method === 'query' && queriedIndex.isPrimaryKey && !req.values) { + delsRangeSet_1.add(queriedRanges); + } + else { + getRangeSet(queriedIndex.name || "").add(queriedRanges); + } + if (!queriedIndex.isPrimaryKey) { + if (method === "count") { + delsRangeSet_1.add(FULL_RANGE); + } + else { + var keysPromise_1 = method === "query" && + outbound && + req.values && + table.query(__assign(__assign({}, req), { values: false })); + return table[method].apply(this, arguments).then(function (res) { + if (method === "query") { + if (outbound && req.values) { + return keysPromise_1.then(function (_a) { + var resultingKeys = _a.result; + pkRangeSet_1.addKeys(resultingKeys); + return res; + }); + } + var pKeys = req.values + ? res.result.map(extractKey) + : res.result; + if (req.values) { + pkRangeSet_1.addKeys(pKeys); + } + else { + delsRangeSet_1.addKeys(pKeys); + } + } + else if (method === "openCursor") { + var cursor_1 = res; + var wantValues_1 = req.values; + return (cursor_1 && + Object.create(cursor_1, { + key: { + get: function () { + delsRangeSet_1.addKey(cursor_1.primaryKey); + return cursor_1.key; + }, + }, + primaryKey: { + get: function () { + var pkey = cursor_1.primaryKey; + delsRangeSet_1.addKey(pkey); + return pkey; + }, + }, + value: { + get: function () { + wantValues_1 && pkRangeSet_1.addKey(cursor_1.primaryKey); + return cursor_1.value; + }, + }, + })); + } + return res; + }); + } + } + } + return table[method].apply(this, arguments); + }; + }); + return tableClone; + } }); + }, +}; +function trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) { + function addAffectedIndex(ix) { + var rangeSet = getRangeSet(ix.name || ""); + function extractKey(obj) { + return obj != null ? ix.extractKey(obj) : null; + } + var addKeyOrKeys = function (key) { return ix.multiEntry && isArray(key) + ? key.forEach(function (key) { return rangeSet.addKey(key); }) + : rangeSet.addKey(key); }; + (oldObjs || newObjs).forEach(function (_, i) { + var oldKey = oldObjs && extractKey(oldObjs[i]); + var newKey = newObjs && extractKey(newObjs[i]); + if (cmp(oldKey, newKey) !== 0) { + if (oldKey != null) + addKeyOrKeys(oldKey); + if (newKey != null) + addKeyOrKeys(newKey); + } + }); + } + schema.indexes.forEach(addAffectedIndex); +} + +function adjustOptimisticFromFailures(tblCache, req, res) { + if (res.numFailures === 0) + return req; + if (req.type === 'deleteRange') { + return null; + } + var numBulkOps = req.keys + ? req.keys.length + : 'values' in req && req.values + ? req.values.length + : 1; + if (res.numFailures === numBulkOps) { + return null; + } + var clone = __assign({}, req); + if (isArray(clone.keys)) { + clone.keys = clone.keys.filter(function (_, i) { return !(i in res.failures); }); + } + if ('values' in clone && isArray(clone.values)) { + clone.values = clone.values.filter(function (_, i) { return !(i in res.failures); }); + } + return clone; +} + +function isAboveLower(key, range) { + return range.lower === undefined + ? true + : range.lowerOpen + ? cmp(key, range.lower) > 0 + : cmp(key, range.lower) >= 0; +} +function isBelowUpper(key, range) { + return range.upper === undefined + ? true + : range.upperOpen + ? cmp(key, range.upper) < 0 + : cmp(key, range.upper) <= 0; +} +function isWithinRange(key, range) { + return isAboveLower(key, range) && isBelowUpper(key, range); +} + +function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) { + if (!ops || ops.length === 0) + return result; + var index = req.query.index; + var multiEntry = index.multiEntry; + var queryRange = req.query.range; + var primaryKey = table.schema.primaryKey; + var extractPrimKey = primaryKey.extractKey; + var extractIndex = index.extractKey; + var extractLowLevelIndex = (index.lowLevelIndex || index).extractKey; + var finalResult = ops.reduce(function (result, op) { + var modifedResult = result; + var includedValues = op.type === 'add' || op.type === 'put' + ? op.values.filter(function (v) { + var key = extractIndex(v); + return multiEntry && isArray(key) + ? key.some(function (k) { return isWithinRange(k, queryRange); }) + : isWithinRange(key, queryRange); + }).map(function (v) { + v = deepClone(v); + if (immutable) + Object.freeze(v); + return v; + }) + : []; + switch (op.type) { + case 'add': + modifedResult = result.concat(req.values + ? includedValues + : includedValues.map(function (v) { return extractPrimKey(v); })); + break; + case 'put': + var keySet_1 = new RangeSet().addKeys(op.values.map(function (v) { return extractPrimKey(v); })); + modifedResult = result + .filter(function (item) { + var key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keySet_1); + }) + .concat(req.values + ? includedValues + : includedValues.map(function (v) { return extractPrimKey(v); })); + break; + case 'delete': + var keysToDelete_1 = new RangeSet().addKeys(op.keys); + modifedResult = result.filter(function (item) { + var key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keysToDelete_1); + }); + break; + case 'deleteRange': + var range_1 = op.range; + modifedResult = result.filter(function (item) { return !isWithinRange(extractPrimKey(item), range_1); }); + break; + } + return modifedResult; + }, result); + if (finalResult === result) + return result; + finalResult.sort(function (a, b) { + return cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) || + cmp(extractPrimKey(a), extractPrimKey(b)); + }); + if (req.limit && req.limit < Infinity) { + if (finalResult.length > req.limit) { + finalResult.length = req.limit; + } + else if (result.length === req.limit && finalResult.length < req.limit) { + cacheEntry.dirty = true; + } + } + return immutable ? Object.freeze(finalResult) : finalResult; +} + +function areRangesEqual(r1, r2) { + return (cmp(r1.lower, r2.lower) === 0 && + cmp(r1.upper, r2.upper) === 0 && + !!r1.lowerOpen === !!r2.lowerOpen && + !!r1.upperOpen === !!r2.upperOpen); +} + +function compareLowers(lower1, lower2, lowerOpen1, lowerOpen2) { + if (lower1 === undefined) + return lower2 !== undefined ? -1 : 0; + if (lower2 === undefined) + return 1; + var c = cmp(lower1, lower2); + if (c === 0) { + if (lowerOpen1 && lowerOpen2) + return 0; + if (lowerOpen1) + return 1; + if (lowerOpen2) + return -1; + } + return c; +} +function compareUppers(upper1, upper2, upperOpen1, upperOpen2) { + if (upper1 === undefined) + return upper2 !== undefined ? 1 : 0; + if (upper2 === undefined) + return -1; + var c = cmp(upper1, upper2); + if (c === 0) { + if (upperOpen1 && upperOpen2) + return 0; + if (upperOpen1) + return -1; + if (upperOpen2) + return 1; + } + return c; +} +function isSuperRange(r1, r2) { + return (compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 && + compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0); +} + +function findCompatibleQuery(dbName, tableName, type, req) { + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (!tblCache) + return []; + var queries = tblCache.queries[type]; + if (!queries) + return [null, false, tblCache, null]; + var indexName = req.query ? req.query.index.name : null; + var entries = queries[indexName || '']; + if (!entries) + return [null, false, tblCache, null]; + switch (type) { + case 'query': + var equalEntry = entries.find(function (entry) { + return entry.req.limit === req.limit && + entry.req.values === req.values && + areRangesEqual(entry.req.query.range, req.query.range); + }); + if (equalEntry) + return [ + equalEntry, + true, + tblCache, + entries, + ]; + var superEntry = entries.find(function (entry) { + var limit = 'limit' in entry.req ? entry.req.limit : Infinity; + return (limit >= req.limit && + (req.values ? entry.req.values : true) && + isSuperRange(entry.req.query.range, req.query.range)); + }); + return [superEntry, false, tblCache, entries]; + case 'count': + var countQuery = entries.find(function (entry) { + return areRangesEqual(entry.req.query.range, req.query.range); + }); + return [countQuery, !!countQuery, tblCache, entries]; + } +} + +function subscribeToCacheEntry(cacheEntry, container, requery, signal) { + cacheEntry.subscribers.add(requery); + signal.addEventListener("abort", function () { + cacheEntry.subscribers.delete(requery); + if (cacheEntry.subscribers.size === 0) { + enqueForDeletion(cacheEntry, container); + } + }); +} +function enqueForDeletion(cacheEntry, container) { + setTimeout(function () { + if (cacheEntry.subscribers.size === 0) { + delArrayItem(container, cacheEntry); + } + }, 3000); +} + +var cacheMiddleware = { + stack: 'dbcore', + level: 0, + name: 'Cache', + create: function (core) { + var dbName = core.schema.name; + var coreMW = __assign(__assign({}, core), { transaction: function (stores, mode, options) { + var idbtrans = core.transaction(stores, mode, options); + if (mode === 'readwrite') { + var ac_1 = new AbortController(); + var signal = ac_1.signal; + var endTransaction = function (wasCommitted) { return function () { + ac_1.abort(); + if (mode === 'readwrite') { + var affectedSubscribers_1 = new Set(); + for (var _i = 0, stores_1 = stores; _i < stores_1.length; _i++) { + var storeName = stores_1[_i]; + var tblCache = cache["idb://".concat(dbName, "/").concat(storeName)]; + if (tblCache) { + var table = core.table(storeName); + var ops = tblCache.optimisticOps.filter(function (op) { return op.trans === idbtrans; }); + if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) { + for (var _a = 0, _b = Object.values(tblCache.queries.query); _a < _b.length; _a++) { + var entries = _b[_a]; + for (var _c = 0, _d = entries.slice(); _c < _d.length; _c++) { + var entry = _d[_c]; + if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) { + delArrayItem(entries, entry); + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + } + } + } + else if (ops.length > 0) { + tblCache.optimisticOps = tblCache.optimisticOps.filter(function (op) { return op.trans !== idbtrans; }); + for (var _e = 0, _f = Object.values(tblCache.queries.query); _e < _f.length; _e++) { + var entries = _f[_e]; + for (var _g = 0, _h = entries.slice(); _g < _h.length; _g++) { + var entry = _h[_g]; + if (entry.res != null && + idbtrans.mutatedParts +) { + if (wasCommitted && !entry.dirty) { + var freezeResults = Object.isFrozen(entry.res); + var modRes = applyOptimisticOps(entry.res, entry.req, ops, table, entry, freezeResults); + if (entry.dirty) { + delArrayItem(entries, entry); + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + else if (modRes !== entry.res) { + entry.res = modRes; + entry.promise = DexiePromise.resolve({ result: modRes }); + } + } + else { + if (entry.dirty) { + delArrayItem(entries, entry); + } + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + } + } + } + } + } + } + affectedSubscribers_1.forEach(function (requery) { return requery(); }); + } + }; }; + idbtrans.addEventListener('abort', endTransaction(false), { + signal: signal, + }); + idbtrans.addEventListener('error', endTransaction(false), { + signal: signal, + }); + idbtrans.addEventListener('complete', endTransaction(true), { + signal: signal, + }); + } + return idbtrans; + }, table: function (tableName) { + var downTable = core.table(tableName); + var primKey = downTable.schema.primaryKey; + var tableMW = __assign(__assign({}, downTable), { mutate: function (req) { + var trans = PSD.trans; + if (primKey.outbound || + trans.db._options.cache === 'disabled' || + trans.explicit + ) { + return downTable.mutate(req); + } + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (!tblCache) + return downTable.mutate(req); + var promise = downTable.mutate(req); + if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(function (key) { return key == null; }))) { + promise.then(function (res) { + var reqWithResolvedKeys = __assign(__assign({}, req), { values: req.values.map(function (value, i) { + var _a; + var valueWithKey = ((_a = primKey.keyPath) === null || _a === void 0 ? void 0 : _a.includes('.')) + ? deepClone(value) + : __assign({}, value); + setByKeyPath(valueWithKey, primKey.keyPath, res.results[i]); + return valueWithKey; + }) }); + var adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res); + tblCache.optimisticOps.push(adjustedReq); + queueMicrotask(function () { return req.mutatedParts && signalSubscribersLazily(req.mutatedParts); }); + }); + } + else { + tblCache.optimisticOps.push(req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + promise.then(function (res) { + if (res.numFailures > 0) { + delArrayItem(tblCache.optimisticOps, req); + var adjustedReq = adjustOptimisticFromFailures(tblCache, req, res); + if (adjustedReq) { + tblCache.optimisticOps.push(adjustedReq); + } + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + } + }); + promise.catch(function () { + delArrayItem(tblCache.optimisticOps, req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + }); + } + return promise; + }, query: function (req) { + var _a; + if (!isCachableContext(PSD, downTable) || !isCachableRequest("query", req)) + return downTable.query(req); + var freezeResults = ((_a = PSD.trans) === null || _a === void 0 ? void 0 : _a.db._options.cache) === 'immutable'; + var _b = PSD, requery = _b.requery, signal = _b.signal; + var _c = findCompatibleQuery(dbName, tableName, 'query', req), cacheEntry = _c[0], exactMatch = _c[1], tblCache = _c[2], container = _c[3]; + if (cacheEntry && exactMatch) { + cacheEntry.obsSet = req.obsSet; + } + else { + var promise = downTable.query(req).then(function (res) { + var result = res.result; + if (cacheEntry) + cacheEntry.res = result; + if (freezeResults) { + for (var i = 0, l = result.length; i < l; ++i) { + Object.freeze(result[i]); + } + Object.freeze(result); + } + else { + res.result = deepClone(result); + } + return res; + }).catch(function (error) { + if (container && cacheEntry) + delArrayItem(container, cacheEntry); + return Promise.reject(error); + }); + cacheEntry = { + obsSet: req.obsSet, + promise: promise, + subscribers: new Set(), + type: 'query', + req: req, + dirty: false, + }; + if (container) { + container.push(cacheEntry); + } + else { + container = [cacheEntry]; + if (!tblCache) { + tblCache = cache["idb://".concat(dbName, "/").concat(tableName)] = { + queries: { + query: {}, + count: {}, + }, + objs: new Map(), + optimisticOps: [], + unsignaledParts: {} + }; + } + tblCache.queries.query[req.query.index.name || ''] = container; + } + } + subscribeToCacheEntry(cacheEntry, container, requery, signal); + return cacheEntry.promise.then(function (res) { + return { + result: applyOptimisticOps(res.result, req, tblCache === null || tblCache === void 0 ? void 0 : tblCache.optimisticOps, downTable, cacheEntry, freezeResults), + }; + }); + } }); + return tableMW; + } }); + return coreMW; + }, +}; + +function vipify(target, vipDb) { + return new Proxy(target, { + get: function (target, prop, receiver) { + if (prop === 'db') + return vipDb; + return Reflect.get(target, prop, receiver); + } + }); +} + +var Dexie$1 = (function () { + function Dexie(name, options) { + var _this = this; + this._middlewares = {}; + this.verno = 0; + var deps = Dexie.dependencies; + this._options = options = __assign({ + addons: Dexie.addons, autoOpen: true, + indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange, cache: 'cloned' }, options); + this._deps = { + indexedDB: options.indexedDB, + IDBKeyRange: options.IDBKeyRange + }; + var addons = options.addons; + this._dbSchema = {}; + this._versions = []; + this._storeNames = []; + this._allTables = {}; + this.idbdb = null; + this._novip = this; + var state = { + dbOpenError: null, + isBeingOpened: false, + onReadyBeingFired: null, + openComplete: false, + dbReadyResolve: nop, + dbReadyPromise: null, + cancelOpen: nop, + openCanceller: null, + autoSchema: true, + PR1398_maxLoop: 3, + autoOpen: options.autoOpen, + }; + state.dbReadyPromise = new DexiePromise(function (resolve) { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise(function (_, reject) { + state.cancelOpen = reject; + }); + this._state = state; + this.name = name; + this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) { + return function (subscriber, bSticky) { + Dexie.vip(function () { + var state = _this._state; + if (state.openComplete) { + if (!state.dbOpenError) + DexiePromise.resolve().then(subscriber); + if (bSticky) + subscribe(subscriber); + } + else if (state.onReadyBeingFired) { + state.onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } + else { + subscribe(subscriber); + var db_1 = _this; + if (!bSticky) + subscribe(function unsubscribe() { + db_1.on.ready.unsubscribe(subscriber); + db_1.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.Collection = createCollectionConstructor(this); + this.Table = createTableConstructor(this); + this.Transaction = createTransactionConstructor(this); + this.Version = createVersionConstructor(this); + this.WhereClause = createWhereClauseConstructor(this); + this.on("versionchange", function (ev) { + if (ev.newVersion > 0) + console.warn("Another connection wants to upgrade database '".concat(_this.name, "'. Closing db now to resume the upgrade.")); + else + console.warn("Another connection wants to delete database '".concat(_this.name, "'. Closing db now to resume the delete request.")); + _this.close({ disableAutoOpen: false }); + }); + this.on("blocked", function (ev) { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn("Dexie.delete('".concat(_this.name, "') was blocked")); + else + console.warn("Upgrade '".concat(_this.name, "' blocked by other connection holding version ").concat(ev.oldVersion / 10)); + }); + this._maxKey = getMaxKey(options.IDBKeyRange); + this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { return new _this.Transaction(mode, storeNames, dbschema, _this._options.chromeTransactionDurability, parentTransaction); }; + this._fireOnBlocked = function (ev) { + _this.on("blocked").fire(ev); + connections + .filter(function (c) { return c.name === _this.name && c !== _this && !c._state.vcFired; }) + .map(function (c) { return c.on("versionchange").fire(ev); }); + }; + this.use(cacheExistingValuesMiddleware); + this.use(cacheMiddleware); + this.use(observabilityMiddleware); + this.use(virtualIndexMiddleware); + this.use(hooksMiddleware); + var vipDB = new Proxy(this, { + get: function (_, prop, receiver) { + if (prop === '_vip') + return true; + if (prop === 'table') + return function (tableName) { return vipify(_this.table(tableName), vipDB); }; + var rv = Reflect.get(_, prop, receiver); + if (rv instanceof Table) + return vipify(rv, vipDB); + if (prop === 'tables') + return rv.map(function (t) { return vipify(t, vipDB); }); + if (prop === '_createTransaction') + return function () { + var tx = rv.apply(this, arguments); + return vipify(tx, vipDB); + }; + return rv; + } + }); + this.vip = vipDB; + addons.forEach(function (addon) { return addon(_this); }); + } + Dexie.prototype.version = function (versionNumber) { + if (isNaN(versionNumber) || versionNumber < 0.1) + throw new exceptions.Type("Given version is not a positive number"); + versionNumber = Math.round(versionNumber * 10) / 10; + if (this.idbdb || this._state.isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + var versions = this._versions; + var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0]; + if (versionInstance) + return versionInstance; + versionInstance = new this.Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + versionInstance.stores({}); + this._state.autoSchema = false; + return versionInstance; + }; + Dexie.prototype._whenReady = function (fn) { + var _this = this; + return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise(function (resolve, reject) { + if (_this._state.openComplete) { + return reject(new exceptions.DatabaseClosed(_this._state.dbOpenError)); + } + if (!_this._state.isBeingOpened) { + if (!_this._state.autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + _this.open().catch(nop); + } + _this._state.dbReadyPromise.then(resolve, reject); + }).then(fn); + }; + Dexie.prototype.use = function (_a) { + var stack = _a.stack, create = _a.create, level = _a.level, name = _a.name; + if (name) + this.unuse({ stack: stack, name: name }); + var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); + middlewares.push({ stack: stack, create: create, level: level == null ? 10 : level, name: name }); + middlewares.sort(function (a, b) { return a.level - b.level; }); + return this; + }; + Dexie.prototype.unuse = function (_a) { + var stack = _a.stack, name = _a.name, create = _a.create; + if (stack && this._middlewares[stack]) { + this._middlewares[stack] = this._middlewares[stack].filter(function (mw) { + return create ? mw.create !== create : + name ? mw.name !== name : + false; + }); + } + return this; + }; + Dexie.prototype.open = function () { + var _this = this; + return usePSD(globalPSD, + function () { return dexieOpen(_this); }); + }; + Dexie.prototype._close = function () { + var state = this._state; + var idx = connections.indexOf(this); + if (idx >= 0) + connections.splice(idx, 1); + if (this.idbdb) { + try { + this.idbdb.close(); + } + catch (e) { } + this.idbdb = null; + } + if (!state.isBeingOpened) { + state.dbReadyPromise = new DexiePromise(function (resolve) { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise(function (_, reject) { + state.cancelOpen = reject; + }); + } + }; + Dexie.prototype.close = function (_a) { + var _b = _a === void 0 ? { disableAutoOpen: true } : _a, disableAutoOpen = _b.disableAutoOpen; + var state = this._state; + if (disableAutoOpen) { + if (state.isBeingOpened) { + state.cancelOpen(new exceptions.DatabaseClosed()); + } + this._close(); + state.autoOpen = false; + state.dbOpenError = new exceptions.DatabaseClosed(); + } + else { + this._close(); + state.autoOpen = this._options.autoOpen || + state.isBeingOpened; + state.openComplete = false; + state.dbOpenError = null; + } + }; + Dexie.prototype.delete = function (closeOptions) { + var _this = this; + if (closeOptions === void 0) { closeOptions = { disableAutoOpen: true }; } + var hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; + var state = this._state; + return new DexiePromise(function (resolve, reject) { + var doDelete = function () { + _this.close(closeOptions); + var req = _this._deps.indexedDB.deleteDatabase(_this.name); + req.onsuccess = wrap(function () { + _onDatabaseDeleted(_this._deps, _this.name); + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = _this._fireOnBlocked; + }; + if (hasInvalidArguments) + throw new exceptions.InvalidArgument("Invalid closeOptions argument to db.delete()"); + if (state.isBeingOpened) { + state.dbReadyPromise.then(doDelete); + } + else { + doDelete(); + } + }); + }; + Dexie.prototype.backendDB = function () { + return this.idbdb; + }; + Dexie.prototype.isOpen = function () { + return this.idbdb !== null; + }; + Dexie.prototype.hasBeenClosed = function () { + var dbOpenError = this._state.dbOpenError; + return dbOpenError && (dbOpenError.name === 'DatabaseClosed'); + }; + Dexie.prototype.hasFailed = function () { + return this._state.dbOpenError !== null; + }; + Dexie.prototype.dynamicallyOpened = function () { + return this._state.autoSchema; + }; + Object.defineProperty(Dexie.prototype, "tables", { + get: function () { + var _this = this; + return keys(this._allTables).map(function (name) { return _this._allTables[name]; }); + }, + enumerable: false, + configurable: true + }); + Dexie.prototype.transaction = function () { + var args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + }; + Dexie.prototype._transaction = function (mode, tables, scopeFunc) { + var _this = this; + var parentTransaction = PSD.trans; + if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) + parentTransaction = null; + var onlyIfCompatible = mode.indexOf('?') !== -1; + mode = mode.replace('!', '').replace('?', ''); + var idbMode, storeNames; + try { + storeNames = tables.map(function (table) { + var storeName = table instanceof _this.Table ? table.name : table; + if (typeof storeName !== 'string') + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + if (mode == "r" || mode === READONLY) + idbMode = READONLY; + else if (mode == "rw" || mode == READWRITE) + idbMode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + if (parentTransaction.mode === READONLY && idbMode === READWRITE) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach(function (storeName) { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Table " + storeName + + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + parentTransaction = null; + } + } + } + catch (e) { + return parentTransaction ? + parentTransaction._promise(null, function (_, reject) { reject(e); }) : + rejection(e); + } + var enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); + return (parentTransaction ? + parentTransaction._promise(idbMode, enterTransaction, "lock") : + PSD.trans ? + usePSD(PSD.transless, function () { return _this._whenReady(enterTransaction); }) : + this._whenReady(enterTransaction)); + }; + Dexie.prototype.table = function (tableName) { + if (!hasOwn(this._allTables, tableName)) { + throw new exceptions.InvalidTable("Table ".concat(tableName, " does not exist")); + } + return this._allTables[tableName]; + }; + return Dexie; +}()); + +var symbolObservable = typeof Symbol !== "undefined" && "observable" in Symbol + ? Symbol.observable + : "@@observable"; +var Observable = (function () { + function Observable(subscribe) { + this._subscribe = subscribe; + } + Observable.prototype.subscribe = function (x, error, complete) { + return this._subscribe(!x || typeof x === "function" ? { next: x, error: error, complete: complete } : x); + }; + Observable.prototype[symbolObservable] = function () { + return this; + }; + return Observable; +}()); + +var domDeps; +try { + domDeps = { + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; +} +catch (e) { + domDeps = { indexedDB: null, IDBKeyRange: null }; +} + +function liveQuery(querier) { + var hasValue = false; + var currentValue; + var observable = new Observable(function (observer) { + var scopeFuncIsAsync = isAsyncFunction(querier); + function execute(ctx) { + var wasRootExec = beginMicroTickScope(); + try { + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + var rv = newScope(querier, ctx); + if (scopeFuncIsAsync) { + rv = rv.finally(decrementExpectedAwaits); + } + return rv; + } + finally { + wasRootExec && endMicroTickScope(); + } + } + var closed = false; + var abortController; + var accumMuts = {}; + var currentObs = {}; + var subscription = { + get closed() { + return closed; + }, + unsubscribe: function () { + if (closed) + return; + closed = true; + if (abortController) + abortController.abort(); + if (startedListening) + globalEvents.storagemutated.unsubscribe(mutationListener); + }, + }; + observer.start && observer.start(subscription); + var startedListening = false; + var doQuery = function () { return execInGlobalContext(_doQuery); }; + function shouldNotify() { + return obsSetsOverlap(currentObs, accumMuts); + } + var mutationListener = function (parts) { + extendObservabilitySet(accumMuts, parts); + if (shouldNotify()) { + doQuery(); + } + }; + var _doQuery = function () { + if (closed || + !domDeps.indexedDB) + { + return; + } + accumMuts = {}; + var subscr = {}; + if (abortController) + abortController.abort(); + abortController = new AbortController(); + var ctx = { + subscr: subscr, + signal: abortController.signal, + requery: doQuery, + querier: querier, + trans: null + }; + var ret = execute(ctx); + Promise.resolve(ret).then(function (result) { + hasValue = true; + currentValue = result; + if (closed || ctx.signal.aborted) { + return; + } + accumMuts = {}; + currentObs = subscr; + if (!objectIsEmpty(currentObs) && !startedListening) { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener); + startedListening = true; + } + execInGlobalContext(function () { return !closed && observer.next && observer.next(result); }); + }, function (err) { + hasValue = false; + if (!['DatabaseClosedError', 'AbortError'].includes(err === null || err === void 0 ? void 0 : err.name)) { + if (!closed) + execInGlobalContext(function () { + if (closed) + return; + observer.error && observer.error(err); + }); + } + }); + }; + setTimeout(doQuery, 0); + return subscription; + }); + observable.hasValue = function () { return hasValue; }; + observable.getValue = function () { return currentValue; }; + return observable; +} + +var Dexie = Dexie$1; +props(Dexie, __assign(__assign({}, fullNameExceptions), { + delete: function (databaseName) { + var db = new Dexie(databaseName, { addons: [] }); + return db.delete(); + }, + exists: function (name) { + return new Dexie(name, { addons: [] }).open().then(function (db) { + db.close(); + return true; + }).catch('NoSuchDatabaseError', function () { return false; }); + }, + getDatabaseNames: function (cb) { + try { + return getDatabaseNames(Dexie.dependencies).then(cb); + } + catch (_a) { + return rejection(new exceptions.MissingAPI()); + } + }, + defineClass: function () { + function Class(content) { + extend(this, content); + } + return Class; + }, ignoreTransaction: function (scopeFunc) { + return PSD.trans ? + usePSD(PSD.transless, scopeFunc) : + scopeFunc(); + }, vip: vip, async: function (generatorFn) { + return function () { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }; + }, spawn: function (generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }, + currentTransaction: { + get: function () { return PSD.trans || null; } + }, waitFor: function (promiseOrFunction, optionalTimeout) { + var promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ? + Dexie.ignoreTransaction(promiseOrFunction) : + promiseOrFunction) + .timeout(optionalTimeout || 60000); + return PSD.trans ? + PSD.trans.waitFor(promise) : + promise; + }, + Promise: DexiePromise, + debug: { + get: function () { return debug; }, + set: function (value) { + setDebug(value); + } + }, + derive: derive, extend: extend, props: props, override: override, + Events: Events, on: globalEvents, liveQuery: liveQuery, extendObservabilitySet: extendObservabilitySet, + getByKeyPath: getByKeyPath, setByKeyPath: setByKeyPath, delByKeyPath: delByKeyPath, shallowClone: shallowClone, deepClone: deepClone, getObjectDiff: getObjectDiff, cmp: cmp, asap: asap$1, + minKey: minKey, + addons: [], + connections: connections, + errnames: errnames, + dependencies: domDeps, cache: cache, + semVer: DEXIE_VERSION, version: DEXIE_VERSION.split('.') + .map(function (n) { return parseInt(n); }) + .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }) })); +Dexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange); + +if (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function (updatedParts) { + if (!propagatingLocally) { + var event_1; + event_1 = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, { + detail: updatedParts + }); + propagatingLocally = true; + dispatchEvent(event_1); + propagatingLocally = false; + } + }); + addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, function (_a) { + var detail = _a.detail; + if (!propagatingLocally) { + propagateLocally(detail); + } + }); +} +function propagateLocally(updateParts) { + var wasMe = propagatingLocally; + try { + propagatingLocally = true; + globalEvents.storagemutated.fire(updateParts); + signalSubscribersNow(updateParts, true); + } + finally { + propagatingLocally = wasMe; + } +} +var propagatingLocally = false; + +var bc; +var createBC = function () { }; +if (typeof BroadcastChannel !== 'undefined') { + createBC = function () { + bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME); + bc.onmessage = function (ev) { return ev.data && propagateLocally(ev.data); }; + }; + createBC(); + if (typeof bc.unref === 'function') { + bc.unref(); + } + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function (changedParts) { + if (!propagatingLocally) { + bc.postMessage(changedParts); + } + }); +} + +if (typeof addEventListener !== 'undefined') { + addEventListener('pagehide', function (event) { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pagehide'); + bc === null || bc === void 0 ? void 0 : bc.close(); + for (var _i = 0, connections_1 = connections; _i < connections_1.length; _i++) { + var db = connections_1[_i]; + db.close({ disableAutoOpen: false }); + } + } + }); + addEventListener('pageshow', function (event) { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pageshow'); + createBC(); + propagateLocally({ all: new RangeSet(-Infinity, [[]]) }); + } + }); +} + +function add(value) { + return new PropModification({ add: value }); +} + +function remove(value) { + return new PropModification({ remove: value }); +} + +function replacePrefix(a, b) { + return new PropModification({ replacePrefix: [a, b] }); +} + +DexiePromise.rejectionMapper = mapError; +setDebug(debug); + +export { Dexie$1 as Dexie, Entity, PropModSymbol, PropModification, RangeSet, add, cmp, Dexie$1 as default, liveQuery, mergeRanges, rangesOverlap, remove, replacePrefix }; +//# sourceMappingURL=dexie.mjs.map diff --git a/src/assets/dexie/dist/dexie.mjs.map b/src/assets/dexie/dist/dexie.mjs.map new file mode 100644 index 000000000..ad2b2acf2 --- /dev/null +++ b/src/assets/dexie/dist/dexie.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"dexie.mjs","sources":["../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.es6.js","../src/globals/global.ts","../src/functions/utils.ts","../src/errors/errors.js","../src/functions/chaining-functions.js","../src/helpers/debug.ts","../src/helpers/promise.js","../src/functions/temp-transaction.ts","../src/globals/constants.ts","../src/functions/combine.ts","../src/dbcore/keyrange.ts","../src/functions/workaround-undefined-primkey.ts","../src/classes/entity/Entity.ts","../src/functions/cmp.ts","../src/classes/table/table.ts","../src/helpers/Events.js","../src/functions/make-class-constructor.ts","../src/classes/table/table-constructor.ts","../src/classes/collection/collection-helpers.ts","../src/helpers/prop-modification.ts","../src/classes/collection/collection.ts","../src/classes/collection/collection-constructor.ts","../src/functions/compare-functions.ts","../src/classes/where-clause/where-clause-helpers.ts","../src/classes/where-clause/where-clause.ts","../src/classes/where-clause/where-clause-constructor.ts","../src/functions/event-wrappers.ts","../src/globals/global-events.ts","../src/classes/transaction/transaction.ts","../src/classes/transaction/transaction-constructor.ts","../src/helpers/index-spec.ts","../src/helpers/table-schema.ts","../src/functions/quirks.ts","../src/dbcore/get-key-extractor.ts","../src/dbcore/dbcore-indexeddb.ts","../src/classes/dexie/generate-middleware-stacks.ts","../src/classes/version/schema-helpers.ts","../src/classes/version/version.ts","../src/classes/version/version-constructor.ts","../src/helpers/database-enumerator.ts","../src/classes/dexie/vip.ts","../node_modules/.pnpm/safari-14-idb-fix@3.0.0/node_modules/safari-14-idb-fix/dist/index.js","../src/helpers/rangeset.ts","../src/live-query/extend-observability-set.ts","../src/live-query/obs-sets-overlap.ts","../src/live-query/cache/cache.ts","../src/live-query/cache/signalSubscribers.ts","../src/classes/dexie/dexie-open.ts","../src/helpers/yield-support.ts","../src/classes/dexie/transaction-helpers.ts","../src/dbcore/virtual-index-middleware.ts","../src/functions/get-object-diff.ts","../src/dbcore/get-effective-keys.ts","../src/hooks/hooks-middleware.ts","../src/dbcore/cache-existing-values-middleware.ts","../src/live-query/cache/is-cachable-context.ts","../src/live-query/cache/is-cachable-request.ts","../src/live-query/observability-middleware.ts","../src/live-query/cache/adjust-optimistic-request-from-failures.ts","../src/live-query/cache/is-within-range.ts","../src/live-query/cache/apply-optimistic-ops.ts","../src/live-query/cache/are-ranges-equal.ts","../src/live-query/cache/is-super-range.ts","../src/live-query/cache/find-compatible-query.ts","../src/live-query/cache/subscribe-cachentry.ts","../src/live-query/cache/cache-middleware.ts","../src/helpers/vipify.ts","../src/classes/dexie/dexie.ts","../src/classes/observable/observable.ts","../src/classes/dexie/dexie-dom-dependencies.ts","../src/live-query/live-query.ts","../src/classes/dexie/dexie-static-props.ts","../src/live-query/propagate-locally.ts","../src/live-query/enable-broadcast.ts","../src/support-bfcache.ts","../src/functions/propmods/add.ts","../src/functions/propmods/remove.ts","../src/functions/propmods/replace-prefix.ts","../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","declare var global;\nexport const _global: any =\n typeof globalThis !== 'undefined' ? globalThis :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window :\n global;\n","import { _global } from \"../globals/global\";\nexport const keys = Object.keys;\nexport const isArray = Array.isArray;\nif (typeof Promise !== 'undefined' && !_global.Promise){\n // In jsdom, this it can be the case that Promise is not put on the global object.\n // If so, we need to patch the global object for the rest of the code to work as expected.\n // Other dexie code expects Promise to be on the global object (like normal browser environments)\n _global.Promise = Promise;\n}\nexport { _global }\n\nexport function extend(obj: T, extension: X): T & X {\n if (typeof extension !== 'object') return obj as T & X;\n keys(extension).forEach(function (key) {\n obj[key] = extension[key];\n });\n return obj as T & X;\n}\n\nexport const getProto = Object.getPrototypeOf;\nexport const _hasOwn = {}.hasOwnProperty;\nexport function hasOwn(obj, prop) {\n return _hasOwn.call(obj, prop);\n}\n\nexport function props (proto, extension) {\n if (typeof extension === 'function') extension = extension(getProto(proto));\n (typeof Reflect === \"undefined\" ? keys : Reflect.ownKeys)(extension).forEach(key => {\n setProp(proto, key, extension[key]);\n });\n}\n\nexport const defineProperty = Object.defineProperty;\n\nexport function setProp(obj, prop, functionOrGetSet, options?) {\n defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ?\n {get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true} :\n {value: functionOrGetSet, configurable: true, writable: true}, options));\n}\n\nexport function derive(Child) {\n return {\n from: function (Parent) {\n Child.prototype = Object.create(Parent.prototype);\n setProp(Child.prototype, \"constructor\", Child);\n return {\n extend: props.bind(null, Child.prototype)\n };\n }\n };\n}\n\nexport const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nexport function getPropertyDescriptor(obj, prop) {\n const pd = getOwnPropertyDescriptor(obj, prop);\n let proto;\n return pd || (proto = getProto(obj)) && getPropertyDescriptor (proto, prop);\n}\n\nconst _slice = [].slice;\nexport function slice(args, start?, end?) {\n return _slice.call(args, start, end);\n}\n\nexport function override(origFunc, overridedFactory) {\n return overridedFactory(origFunc);\n}\n\nexport function assert (b) {\n if (!b) throw new Error(\"Assertion Failed\");\n}\n\nexport function asap(fn) {\n // @ts-ignore\n if (_global.setImmediate) setImmediate(fn); else setTimeout(fn, 0);\n}\n\nexport function getUniqueArray(a) {\n return a.filter((value, index, self) => self.indexOf(value) === index);\n}\n\n/** Generate an object (hash map) based on given array.\n * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to\n * instert on the resulting object for each item in the array. If this function returns a falsy value, the\n * current item wont affect the resulting object.\n */\nexport function arrayToObject (array: T[], extractor: (x:T, idx: number)=>[string, R]): {[name: string]: R} {\n return array.reduce((result, item, i) => {\n var nameAndValue = extractor(item, i);\n if (nameAndValue) result[nameAndValue[0]] = nameAndValue[1];\n return result;\n }, {});\n}\n\nexport function trycatcher(fn, reject) {\n return function () {\n try {\n fn.apply(this, arguments);\n } catch (e) {\n reject(e);\n }\n };\n}\n\nexport function tryCatch(fn: (...args: any[])=>void, onerror, args?) : void {\n try {\n fn.apply(null, args);\n } catch (ex) {\n onerror && onerror(ex);\n }\n}\n\nexport function getByKeyPath(obj, keyPath) {\n // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path\n if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) return obj[keyPath]; // This line is moved from last to first for optimization purpose.\n if (!keyPath) return obj;\n if (typeof keyPath !== 'string') {\n var rv = [];\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n var val = getByKeyPath(obj, keyPath[i]);\n rv.push(val);\n }\n return rv;\n }\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var innerObj = obj[keyPath.substr(0, period)];\n return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n }\n return undefined;\n}\n\nexport function setByKeyPath(obj, keyPath, value) {\n if (!obj || keyPath === undefined) return;\n if ('isFrozen' in Object && Object.isFrozen(obj)) return;\n if (typeof keyPath !== 'string' && 'length' in keyPath) {\n assert(typeof value !== 'string' && 'length' in value);\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n setByKeyPath(obj, keyPath[i], value[i]);\n }\n } else {\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var currentKeyPath = keyPath.substr(0, period);\n var remainingKeyPath = keyPath.substr(period + 1);\n if (remainingKeyPath === \"\")\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) obj.splice(currentKeyPath, 1);\n else delete obj[currentKeyPath];\n } else obj[currentKeyPath] = value;\n else {\n var innerObj = obj[currentKeyPath];\n if (!innerObj || !hasOwn(obj, currentKeyPath)) innerObj = (obj[currentKeyPath] = {});\n setByKeyPath(innerObj, remainingKeyPath, value);\n }\n } else {\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(keyPath))) obj.splice(keyPath, 1);\n else delete obj[keyPath];\n } else obj[keyPath] = value;\n }\n }\n}\n\nexport function delByKeyPath(obj, keyPath) {\n if (typeof keyPath === 'string')\n setByKeyPath(obj, keyPath, undefined);\n else if ('length' in keyPath)\n [].map.call(keyPath, function(kp) {\n setByKeyPath(obj, kp, undefined);\n });\n}\n\nexport function shallowClone(obj) {\n var rv = {};\n for (var m in obj) {\n if (hasOwn(obj, m)) rv[m] = obj[m];\n }\n return rv;\n}\n\nconst concat = [].concat;\nexport function flatten (a: (T | T[])[]) : T[] {\n return concat.apply([], a);\n}\n\n//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\nconst intrinsicTypeNames =\n \"BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey\"\n .split(',').concat(\n flatten([8,16,32,64].map(num=>[\"Int\",\"Uint\",\"Float\"].map(t=>t+num+\"Array\")))\n ).filter(t=>_global[t]);\nconst intrinsicTypes = new Set(intrinsicTypeNames.map(t=>_global[t]));\n\n/** Deep clone a simple object tree.\n * \n * Copies object tree deeply, but does not deep-copy arrays,\n * typed arrays, Dates or other intrinsic types.\n * \n * Does not check for cyclic references.\n * \n * This function is 6 times faster than structuredClone() on chromium 111.\n * \n * This function can safely be used for cloning ObservabilitySets and RangeSets.\n * \n * @param o Object to clone\n * @returns Cloned object\n */\nexport function cloneSimpleObjectTree(o: T): T {\n const rv = {} as T;\n for (const k in o) if (hasOwn(o, k)) {\n const v = o[k];\n rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v);\n }\n return rv;\n}\n\nexport function objectIsEmpty(o: object) {\n for (const k in o) if (hasOwn(o, k)) return false;\n return true;\n}\n\nlet circularRefs: null | WeakMap = null;\n\n/** Deep clone an object or array.\n * \n * \n * @param any \n * @returns \n */\nexport function deepClone(any: T): T {\n circularRefs = new WeakMap();\n const rv = innerDeepClone(any);\n circularRefs = null;\n return rv;\n}\n\nfunction innerDeepClone(x: T): T {\n if (!x || typeof x !== 'object') return x;\n let rv = circularRefs.get(x); // Resolve circular references\n if (rv) return rv;\n if (isArray(x)) {\n rv = [];\n circularRefs.set(x, rv);\n for (var i = 0, l = x.length; i < l; ++i) {\n rv.push(innerDeepClone(x[i]));\n }\n } else if (intrinsicTypes.has(x.constructor)) {\n // For performance, we're less strict than structuredClone - we're only\n // cloning arrays and custom objects.\n // Typed arrays, Dates etc are not cloned.\n rv = x;\n } else {\n // We're nicer to custom classes than what structuredClone() is -\n // we preserve the proto of each object.\n const proto = getProto(x);\n rv = proto === Object.prototype ? {} : Object.create(proto);\n circularRefs.set(x, rv);\n for (var prop in x) {\n if (hasOwn(x, prop)) {\n rv[prop] = innerDeepClone(x[prop]);\n }\n }\n }\n return rv;\n}\n\nconst {toString} = {};\nexport function toStringTag(o: Object) {\n return toString.call(o).slice(8, -1);\n}\n\n// If first argument is iterable or array-like, return it as an array\nexport const iteratorSymbol = typeof Symbol !== 'undefined' ?\n Symbol.iterator :\n '@@iterator';\nexport const getIteratorOf = typeof iteratorSymbol === \"symbol\" ? function(x) {\n var i;\n return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nexport const asyncIteratorSymbol = typeof Symbol !== 'undefined'\n ? Symbol.asyncIterator || Symbol.for(\"Symbol.asyncIterator\")\n : '@asyncIterator';\n\nexport function delArrayItem(a: any[], x: any) {\n const i = a.indexOf(x);\n if (i >= 0) a.splice(i, 1);\n return i >= 0;\n}\n\nexport const NO_CHAR_ARRAY = {};\n// Takes one or several arguments and returns an array based on the following criteras:\n// * If several arguments provided, return arguments converted to an array in a way that\n// still allows javascript engine to optimize the code.\n// * If single argument is an array, return a clone of it.\n// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special\n// case to the two bullets below.\n// * If single argument is an iterable, convert it to an array and return the resulting array.\n// * If single argument is array-like (has length of type number), convert it to an array.\nexport function getArrayOf (arrayLike) {\n var i, a, x, it;\n if (arguments.length === 1) {\n if (isArray(arrayLike)) return arrayLike.slice();\n if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') return [arrayLike];\n if ((it = getIteratorOf(arrayLike))) {\n a = [];\n while ((x = it.next()), !x.done) a.push(x.value);\n return a;\n }\n if (arrayLike == null) return [arrayLike];\n i = arrayLike.length;\n if (typeof i === 'number') {\n a = new Array(i);\n while (i--) a[i] = arrayLike[i];\n return a;\n }\n return [arrayLike];\n }\n i = arguments.length;\n a = new Array(i);\n while (i--) a[i] = arguments[i];\n return a;\n}\nexport const isAsyncFunction = typeof Symbol !== 'undefined'\n ? (fn: Function) => fn[Symbol.toStringTag] === 'AsyncFunction'\n : ()=>false;\n","import { derive, setProp } from '../functions/utils';\n\nvar dexieErrorNames = [\n 'Modify',\n 'Bulk',\n 'OpenFailed',\n 'VersionChange',\n 'Schema',\n 'Upgrade',\n 'InvalidTable',\n 'MissingAPI',\n 'NoSuchDatabase',\n 'InvalidArgument',\n 'SubTransaction',\n 'Unsupported',\n 'Internal',\n 'DatabaseClosed',\n 'PrematureCommit',\n 'ForeignAwait'\n];\n\nvar idbDomErrorNames = [\n 'Unknown',\n 'Constraint',\n 'Data',\n 'TransactionInactive',\n 'ReadOnly',\n 'Version',\n 'NotFound',\n 'InvalidState',\n 'InvalidAccess',\n 'Abort',\n 'Timeout',\n 'QuotaExceeded',\n 'Syntax',\n 'DataClone'\n];\n\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\n\nvar defaultTexts = {\n VersionChanged: \"Database version changed by other database connection\",\n DatabaseClosed: \"Database has been closed\",\n Abort: \"Transaction aborted\",\n TransactionInactive: \"Transaction has already completed or failed\",\n MissingAPI: \"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb\"\n};\n\n//\n// DexieError - base class of all out exceptions.\n//\nexport function DexieError (name, msg) {\n // Reason we don't use ES6 classes is because:\n // 1. It bloats transpiled code and increases size of minified code.\n // 2. It doesn't give us much in this case.\n // 3. It would require sub classes to call super(), which\n // is not needed when deriving from Error.\n this.name = name;\n this.message = msg;\n}\n\nderive(DexieError).from(Error).extend({\n toString: function(){ return this.name + \": \" + this.message; }\n});\n\nfunction getMultiErrorMessage (msg, failures) {\n return msg + \". Errors: \" + Object.keys(failures)\n .map(key=>failures[key].toString())\n .filter((v,i,s)=>s.indexOf(v) === i) // Only unique error strings\n .join('\\n');\n}\n\n//\n// ModifyError - thrown in Collection.modify()\n// Specific constructor because it contains members failures and failedKeys.\n//\nexport function ModifyError (msg, failures, successCount, failedKeys) {\n this.failures = failures;\n this.failedKeys = failedKeys;\n this.successCount = successCount;\n this.message = getMultiErrorMessage(msg, failures);\n}\nderive(ModifyError).from(DexieError);\n\nexport function BulkError (msg, failures) {\n this.name = \"BulkError\";\n this.failures = Object.keys(failures).map(pos => failures[pos]);\n this.failuresByPos = failures;\n this.message = getMultiErrorMessage(msg, this.failures);\n}\nderive(BulkError).from(DexieError);\n\n//\n//\n// Dynamically generate error names and exception classes based\n// on the names in errorList.\n//\n//\n\n// Map of {ErrorName -> ErrorName + \"Error\"}\nexport var errnames = errorList.reduce((obj,name)=>(obj[name]=name+\"Error\",obj),{});\n\n// Need an alias for DexieError because we're gonna create subclasses with the same name.\nconst BaseException = DexieError;\n// Map of {ErrorName -> exception constructor}\nexport var exceptions = errorList.reduce((obj,name)=>{\n // Let the name be \"DexieError\" because this name may\n // be shown in call stack and when debugging. DexieError is\n // the most true name because it derives from DexieError,\n // and we cannot change Function.name programatically without\n // dynamically create a Function object, which would be considered\n // 'eval-evil'.\n var fullName = name + \"Error\";\n function DexieError (msgOrInner, inner){\n this.name = fullName;\n if (!msgOrInner) {\n this.message = defaultTexts[name] || fullName;\n this.inner = null;\n } else if (typeof msgOrInner === 'string') {\n this.message = `${msgOrInner}${!inner ? '' : '\\n ' + inner}`;\n this.inner = inner || null;\n } else if (typeof msgOrInner === 'object') {\n this.message = `${msgOrInner.name} ${msgOrInner.message}`;\n this.inner = msgOrInner;\n }\n }\n derive(DexieError).from(BaseException);\n obj[name]=DexieError;\n return obj;\n},{});\n\n// Use ECMASCRIPT standard exceptions where applicable:\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\n\nexport var exceptionMap = idbDomErrorNames.reduce((obj, name)=>{\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nexport function mapError (domError, message) {\n if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])\n return domError;\n var rv = new exceptionMap[domError.name](message || domError.message, domError);\n if (\"stack\" in domError) {\n // Derive stack from inner exception if it has a stack\n setProp(rv, \"stack\", {get: function(){\n return this.inner.stack;\n }});\n }\n return rv;\n}\n\nexport var fullNameExceptions = errorList.reduce((obj, name)=>{\n if ([\"Syntax\",\"Type\",\"Range\"].indexOf(name) === -1)\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n","import {extend} from './utils';\n\nexport function nop() { }\nexport function mirror(val) { return val; }\nexport function pureFunctionChain(f1, f2) {\n // Enables chained events that takes ONE argument and returns it to the next function in chain.\n // This pattern is used in the hook(\"reading\") event.\n if (f1 == null || f1 === mirror) return f2;\n return function (val) {\n return f2(f1(val));\n };\n}\n\nexport function callBoth(on1, on2) {\n return function () {\n on1.apply(this, arguments);\n on2.apply(this, arguments);\n };\n}\n\nexport function hookCreatingChain(f1, f2) {\n // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance.\n // This pattern is used in the hook(\"creating\") event.\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res !== undefined) arguments[0] = res;\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res2 !== undefined ? res2 : res;\n };\n}\n\nexport function hookDeletingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = this.onerror = null;\n f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n };\n}\n\nexport function hookUpdatingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function (modifications) {\n var res = f1.apply(this, arguments);\n extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain.\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res === undefined ?\n (res2 === undefined ? undefined : res2) :\n (extend(res, res2));\n };\n}\n\nexport function reverseStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n if (f2.apply(this, arguments) === false) return false;\n return f1.apply(this, arguments);\n };\n}\n\nexport function nonStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n f2.apply(this, arguments);\n };\n}\n\nexport function promisableChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res && typeof res.then === 'function') {\n var thiz = this,\n i = arguments.length,\n args = new Array(i);\n while (i--) args[i] = arguments[i];\n return res.then(function () {\n return f2.apply(thiz, args);\n });\n }\n return f2.apply(this, arguments);\n };\n}\n","// By default, debug will be true only if platform is a web platform and its page is served from localhost.\n// When debug = true, error's stacks will contain asyncronic long stacks.\nexport var debug = typeof location !== 'undefined' &&\n // By default, use debug mode if served from localhost.\n /^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\n\nexport function setDebug(value, filter) {\n debug = value;\n}\n\nexport function deprecated (what: string, fn: (...args)=>T) {\n return function () {\n console.warn(`${what} is deprecated. See https://dexie.org/docs/Deprecations}`);\n return fn.apply(this, arguments);\n } as (...args)=>T\n}\n","/*\n * Copyright (c) 2014-2017 David Fahlander\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n */\nimport { _global } from '../globals/global';\nimport {tryCatch, props, setProp,\n getPropertyDescriptor, getArrayOf, extend, getProto} from '../functions/utils';\nimport {nop, callBoth, mirror} from '../functions/chaining-functions';\nimport {debug} from './debug';\nimport {exceptions} from '../errors';\n\n//\n// Promise and Zone (PSD) for Dexie library\n//\n// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by\n// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation.\n//\n// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another\n// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use\n// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task\n// engine that is indexedDB compliant across all browsers.\n// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible.\n//\n// Specific non-standard features of this Promise class:\n// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as\n// native async / await.\n// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame\n// and below + all promises that those promises creates or awaits.\n// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). \n//\n// David Fahlander, https://github.com/dfahlander\n//\n\n// Just a pointer that only this module knows about.\n// Used in Promise constructor to emulate a private constructor.\nvar INTERNAL = {};\n\nconst\n ZONE_ECHO_LIMIT = 100,\n [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ?\n [] :\n (()=>{\n let globalP = Promise.resolve();\n if (typeof crypto === 'undefined' || !crypto.subtle)\n return [globalP, getProto(globalP), globalP];\n // Generate a native promise (as window.Promise may have been patched)\n const nativeP = crypto.subtle.digest(\"SHA-512\", new Uint8Array([0]));\n return [\n nativeP,\n getProto(nativeP),\n globalP\n ];\n })(),\n nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\n\nexport const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nconst patchGlobalPromise = !!resolvedGlobalPromise;\n\n/* The default function used only for the very first promise in a promise chain.\n As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks\n emulated in this module. For indexedDB compatibility, this means that every method needs to \n execute at least one promise before doing an indexedDB operation. Dexie will always call \n db.ready().then() for every operation to make sure the indexedDB event is started in an\n indexedDB-compatible emulated micro task loop.\n*/\nfunction schedulePhysicalTick() {\n queueMicrotask(physicalTick);\n}\n\n// Configurable through Promise.scheduler.\n// Don't export because it would be unsafe to let unknown\n// code call it unless they do try..catch within their callback.\n// This function can be retrieved through getter of Promise.scheduler though,\n// but users must not do Promise.scheduler = myFuncThatThrowsException\nvar asap = function (callback, args) {\n microtickQueue.push([callback, args]);\n if (needsNewPhysicalTick) {\n schedulePhysicalTick();\n needsNewPhysicalTick = false;\n }\n};\n\nvar isOutsideMicroTick = true, // True when NOT in a virtual microTick.\n needsNewPhysicalTick = true, // True when a push to microtickQueue must also schedulePhysicalTick()\n unhandledErrors = [], // Rejected promises that has occured. Used for triggering 'unhandledrejection'.\n rejectingErrors = [], // Tracks if errors are being re-rejected during onRejected callback.\n rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions\n \nexport var globalPSD = {\n id: 'global',\n global: true,\n ref: 0,\n unhandleds: [],\n onunhandled: nop,\n pgp: false,\n env: {},\n finalize: nop\n};\n\nexport var PSD = globalPSD;\n\nexport var microtickQueue = []; // Callbacks to call in this or next physical tick.\nexport var numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick.\nexport var tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick.\n\nexport default function DexiePromise(fn) {\n if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); \n this._listeners = [];\n \n // A library may set `promise._lib = true;` after promise is created to make resolve() or reject()\n // execute the microtask engine implicitely within the call to resolve() or reject().\n // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack\n // only contains library code when calling resolve() or reject().\n // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from\n // global scope (event handler, timer etc)!\n this._lib = false;\n // Current async scope\n var psd = (this._PSD = PSD);\n \n if (typeof fn !== 'function') {\n if (fn !== INTERNAL) throw new TypeError('Not a function');\n // Private constructor (INTERNAL, state, value).\n // Used internally by Promise.resolve() and Promise.reject().\n this._state = arguments[1];\n this._value = arguments[2];\n if (this._state === false)\n handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError().\n return;\n }\n \n this._state = null; // null (=pending), false (=rejected) or true (=resolved)\n this._value = null; // error or result\n ++psd.ref; // Refcounting current scope\n executePromiseTask(this, fn);\n}\n\n// Prepare a property descriptor to put onto Promise.prototype.then\nconst thenProp = {\n get: function() {\n var psd = PSD, microTaskId = totalEchoes;\n\n function then (onFulfilled, onRejected) {\n var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n const cleanup = possibleAwait && !decrementExpectedAwaits();\n var rv = new DexiePromise((resolve, reject) => {\n propagateToListener(this, new Listener(\n nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup),\n nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup),\n resolve,\n reject,\n psd));\n });\n if (this._consoleTask) rv._consoleTask = this._consoleTask;\n return rv;\n }\n\n then.prototype = INTERNAL; // For idempotense, see setter below.\n\n return then;\n },\n // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then\n // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor.\n set: function (value) {\n setProp (this, 'then', value && value.prototype === INTERNAL ?\n thenProp : // Restore to original property descriptor.\n {\n get: function(){\n return value; // Getter returning provided value (behaves like value is just changed)\n },\n set: thenProp.set // Keep a setter that is prepared to restore original.\n }\n );\n }\n};\n\nprops(DexiePromise.prototype, {\n then: thenProp, // Defined above.\n _then: function (onFulfilled, onRejected) {\n // A little tinier version of then() that don't have to create a resulting promise.\n propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); \n },\n\n catch: function (onRejected) {\n if (arguments.length === 1) return this.then(null, onRejected);\n // First argument is the Error type to catch\n var type = arguments[0],\n handler = arguments[1];\n return typeof type === 'function' ? this.then(null, err =>\n // Catching errors by its constructor type (similar to java / c++ / c#)\n // Sample: promise.catch(TypeError, function (e) { ... });\n err instanceof type ? handler(err) : PromiseReject(err))\n : this.then(null, err =>\n // Catching errors by the error.name property. Makes sense for indexedDB where error type\n // is always DOMError but where e.name tells the actual error type.\n // Sample: promise.catch('ConstraintError', function (e) { ... });\n err && err.name === type ? handler(err) : PromiseReject(err));\n },\n\n finally: function (onFinally) {\n return this.then(value => {\n return DexiePromise.resolve(onFinally()).then(()=>value);\n }, err => {\n return DexiePromise.resolve(onFinally()).then(()=>PromiseReject(err));\n });\n },\n \n timeout: function (ms, msg) {\n return ms < Infinity ?\n new DexiePromise((resolve, reject) => {\n var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms);\n this.then(resolve, reject).finally(clearTimeout.bind(null, handle));\n }) : this;\n }\n});\n\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag)\n setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise');\n\n// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env.\n// Environment globals snapshotted on leaving global zone\nglobalPSD.env = snapShot();\n\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n this.psd = zone;\n}\n\n// Promise Static Properties\nprops (DexiePromise, {\n all: function () {\n var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like.\n .map(onPossibleParallellAsync); // Handle parallell async/awaits \n return new DexiePromise(function (resolve, reject) {\n if (values.length === 0) resolve([]);\n var remaining = values.length;\n values.forEach((a,i) => DexiePromise.resolve(a).then(x => {\n values[i] = x;\n if (!--remaining) resolve(values);\n }, reject));\n });\n },\n \n resolve: value => {\n if (value instanceof DexiePromise) return value;\n if (value && typeof value.then === 'function') return new DexiePromise((resolve, reject)=>{\n value.then(resolve, reject);\n });\n var rv = new DexiePromise(INTERNAL, true, value);\n return rv;\n },\n \n reject: PromiseReject,\n \n race: function () {\n var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n values.map(value => DexiePromise.resolve(value).then(resolve, reject));\n });\n },\n\n PSD: {\n get: ()=>PSD,\n set: value => PSD = value\n },\n\n totalEchoes: {get: ()=>totalEchoes},\n\n //task: {get: ()=>task},\n \n newPSD: newScope,\n \n usePSD: usePSD,\n \n scheduler: {\n get: () => asap,\n set: value => {asap = value}\n },\n \n rejectionMapper: {\n get: () => rejectionMapper,\n set: value => {rejectionMapper = value;} // Map reject failures\n },\n \n follow: (fn, zoneProps) => {\n return new DexiePromise((resolve, reject) => {\n return newScope((resolve, reject) => {\n var psd = PSD;\n psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize()\n psd.onunhandled = reject; // Triggered directly on unhandled promises of this library.\n psd.finalize = callBoth(function () {\n // Unhandled standard or 3rd part promises are put in PSD.unhandleds and\n // examined upon scope completion while unhandled rejections in this Promise\n // will trigger directly through psd.onunhandled\n run_at_end_of_this_or_next_physical_tick(()=>{\n this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]);\n });\n }, psd.finalize);\n fn();\n }, zoneProps, resolve, reject);\n });\n }\n});\n\nif (NativePromise) {\n if (NativePromise.allSettled) setProp (DexiePromise, \"allSettled\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise(resolve => {\n if (possiblePromises.length === 0) resolve([]);\n let remaining = possiblePromises.length;\n const results = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => results[i] = {status: \"fulfilled\", value},\n reason => results[i] = {status: \"rejected\", reason})\n .then(()=>--remaining || resolve(results)));\n });\n });\n if (NativePromise.any && typeof AggregateError !== 'undefined') setProp(DexiePromise, \"any\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n if (possiblePromises.length === 0) reject(new AggregateError([]));\n let remaining = possiblePromises.length;\n const failures = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => resolve(value),\n failure => {\n failures[i] = failure;\n if (!--remaining) reject(new AggregateError(failures));\n }));\n });\n });\n}\n\n/**\n* Take a potentially misbehaving resolver function and make sure\n* onFulfilled and onRejected are only called once.\n*\n* Makes no guarantees about asynchrony.\n*/\nfunction executePromiseTask (promise, fn) {\n // Promise Resolution Procedure:\n // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n try {\n fn(value => {\n if (promise._state !== null) return; // Already settled\n if (value === promise) throw new TypeError('A promise cannot be resolved with itself.');\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n if (value && typeof value.then === 'function') {\n executePromiseTask(promise, (resolve, reject) => {\n value instanceof DexiePromise ?\n value._then(resolve, reject) :\n value.then(resolve, reject);\n });\n } else {\n promise._state = true;\n promise._value = value;\n propagateAllListeners(promise);\n }\n if (shouldExecuteTick) endMicroTickScope();\n }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below\n } catch (ex) {\n handleRejection(promise, ex);\n }\n}\n\nfunction handleRejection (promise, reason) {\n rejectingErrors.push(reason);\n if (promise._state !== null) return;\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n reason = rejectionMapper(reason);\n promise._state = false;\n promise._value = reason;\n // Add the failure to a list of possibly uncaught errors\n addPossiblyUnhandledError(promise);\n propagateAllListeners(promise);\n if (shouldExecuteTick) endMicroTickScope();\n}\n\nfunction propagateAllListeners (promise) {\n //debug && linkToPreviousPromise(promise);\n var listeners = promise._listeners;\n promise._listeners = [];\n for (var i = 0, len = listeners.length; i < len; ++i) {\n propagateToListener(promise, listeners[i]);\n }\n var psd = promise._PSD;\n --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize();\n if (numScheduledCalls === 0) {\n // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call,\n // and that no deferreds where listening to this rejection or success.\n // Since there is a risk that our stack can contain application code that may\n // do stuff after this code is finished that may generate new calls, we cannot\n // call finalizers here.\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick(); // Will detect unhandled errors\n }, []);\n }\n}\n\nfunction propagateToListener(promise, listener) {\n if (promise._state === null) {\n promise._listeners.push(listener);\n return;\n }\n\n var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n if (cb === null) {\n // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch()\n return (promise._state ? listener.resolve : listener.reject) (promise._value);\n }\n ++listener.psd.ref;\n ++numScheduledCalls;\n asap (callListener, [cb, promise, listener]);\n}\n\nfunction callListener (cb, promise, listener) {\n try {\n // Call callback and resolve our listener with it's return value.\n var ret, value = promise._value;\n \n if (!promise._state && rejectingErrors.length) rejectingErrors = [];\n // cb is onResolved\n ret = debug && promise._consoleTask ? promise._consoleTask.run(()=>cb (value)) : cb (value);\n if (!promise._state && rejectingErrors.indexOf(value) === -1) {\n markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise.\n }\n listener.resolve(ret);\n } catch (e) {\n // Exception thrown in callback. Reject our listener.\n listener.reject(e);\n } finally {\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n --listener.psd.ref || listener.psd.finalize();\n }\n}\n\n/* The callback to schedule with queueMicrotask().\n It runs a virtual microtick and executes any callback registered in microtickQueue.\n */\nfunction physicalTick() {\n usePSD(globalPSD, ()=>{\n // Make sure to reset the async context to globalPSD before\n // executing any of the microtick subscribers.\n beginMicroTickScope() && endMicroTickScope();\n });\n}\n\nexport function beginMicroTickScope() {\n var wasRootExec = isOutsideMicroTick;\n isOutsideMicroTick = false;\n needsNewPhysicalTick = false;\n return wasRootExec;\n}\n\n/* Executes micro-ticks without doing try..catch.\n This can be possible because we only use this internally and\n the registered functions are exception-safe (they do try..catch\n internally before calling any external method). If registering\n functions in the microtickQueue that are not exception-safe, this\n would destroy the framework and make it instable. So we don't export\n our asap method.\n*/\nexport function endMicroTickScope() {\n var callbacks, i, l;\n do {\n while (microtickQueue.length > 0) {\n callbacks = microtickQueue;\n microtickQueue = [];\n l = callbacks.length;\n for (i = 0; i < l; ++i) {\n var item = callbacks[i];\n item[0].apply(null, item[1]);\n }\n }\n } while (microtickQueue.length > 0);\n isOutsideMicroTick = true;\n needsNewPhysicalTick = true;\n}\n\nfunction finalizePhysicalTick() {\n var unhandledErrs = unhandledErrors;\n unhandledErrors = [];\n unhandledErrs.forEach(p => {\n p._PSD.onunhandled.call(null, p._value, p);\n });\n var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list.\n var i = finalizers.length;\n while (i) finalizers[--i](); \n}\n\nfunction run_at_end_of_this_or_next_physical_tick (fn) {\n function finalizer() {\n fn();\n tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n }\n tickFinalizers.push(finalizer);\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n }, []);\n}\n\nfunction addPossiblyUnhandledError(promise) {\n // Only add to unhandledErrors if not already there. The first one to add to this list\n // will be upon the first rejection so that the root cause (first promise in the\n // rejection chain) is the one listed.\n if (!unhandledErrors.some(p => p._value === promise._value))\n unhandledErrors.push(promise);\n}\n\nfunction markErrorAsHandled(promise) {\n // Called when a reject handled is actually being called.\n // Search in unhandledErrors for any promise whos _value is this promise_value (list\n // contains only rejected promises, and only one item per error)\n var i = unhandledErrors.length;\n while (i) if (unhandledErrors[--i]._value === promise._value) {\n // Found a promise that failed with this same error object pointer,\n // Remove that since there is a listener that actually takes care of it.\n unhandledErrors.splice(i, 1);\n return;\n }\n}\n\nfunction PromiseReject (reason) {\n return new DexiePromise(INTERNAL, false, reason);\n}\n\nexport function wrap (fn, errorCatcher) {\n var psd = PSD;\n return function() {\n var wasRootExec = beginMicroTickScope(),\n outerScope = PSD;\n\n try {\n switchToZone(psd, true);\n return fn.apply(this, arguments);\n } catch (e) {\n errorCatcher && errorCatcher(e);\n } finally {\n switchToZone(outerScope, false);\n if (wasRootExec) endMicroTickScope();\n }\n };\n}\n\n\n//\n// variables used for native await support\n//\nconst task = { awaits: 0, echoes: 0, id: 0}; // The ongoing macro-task when using zone-echoing.\nvar taskCounter = 0; // ID counter for macro tasks.\nvar zoneStack = []; // Stack of left zones to restore asynchronically.\nvar zoneEchoes = 0; // When > 0, zoneLeaveEcho is queued. When 0 and task.echoes is also 0, nothing is queued.\nvar totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then.\n\n\nvar zone_id_counter = 0;\nexport function newScope (fn, props, a1, a2) {\n var parent = PSD,\n psd = Object.create(parent);\n psd.parent = parent;\n psd.ref = 0;\n psd.global = false;\n psd.id = ++zone_id_counter;\n // Prepare for promise patching (done in usePSD):\n var globalEnv = globalPSD.env;\n psd.env = patchGlobalPromise ? {\n Promise: DexiePromise, // Changing window.Promise could be omitted for Chrome and Edge, where IDB+Promise plays well!\n PromiseProp: {value: DexiePromise, configurable: true, writable: true},\n all: DexiePromise.all,\n race: DexiePromise.race,\n allSettled: DexiePromise.allSettled,\n any: DexiePromise.any,\n resolve: DexiePromise.resolve,\n reject: DexiePromise.reject,\n } : {};\n if (props) extend(psd, props);\n \n // unhandleds and onunhandled should not be specifically set here.\n // Leave them on parent prototype.\n // unhandleds.push(err) will push to parent's prototype\n // onunhandled() will call parents onunhandled (with this scope's this-pointer though!)\n ++parent.ref;\n psd.finalize = function () {\n --this.parent.ref || this.parent.finalize();\n }\n var rv = usePSD (psd, fn, a1, a2);\n if (psd.ref === 0) psd.finalize();\n return rv;\n}\n\n// Function to call if scopeFunc returns NativePromise\n// Also for each NativePromise in the arguments to Promise.all()\nexport function incrementExpectedAwaits() {\n if (!task.id) task.id = ++taskCounter;\n ++task.awaits;\n task.echoes += ZONE_ECHO_LIMIT;\n return task.id;\n}\n\n// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called.\n// Also call this when a native await calls then method on a promise. In that case, don't supply\n// sourceTaskId because we already know it refers to current task.\nexport function decrementExpectedAwaits() {\n if (!task.awaits) return false;\n if (--task.awaits === 0) task.id = 0;\n task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0.\n return true;\n}\n\nif ((''+nativePromiseThen).indexOf('[native code]') === -1) {\n // If the native promise' prototype is patched, we cannot rely on zone echoing.\n // Disable that here:\n incrementExpectedAwaits = decrementExpectedAwaits = nop;\n}\n\n// Call from Promise.all() and Promise.race()\nexport function onPossibleParallellAsync (possiblePromise) {\n if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n incrementExpectedAwaits(); \n return possiblePromise.then(x => {\n decrementExpectedAwaits();\n return x;\n }, e => {\n decrementExpectedAwaits();\n return rejection(e);\n });\n }\n return possiblePromise;\n}\n\nfunction zoneEnterEcho(targetZone) {\n ++totalEchoes;\n //console.log(\"Total echoes \", totalEchoes);\n //if (task.echoes === 1) console.warn(\"Cancelling echoing of async context.\");\n if (!task.echoes || --task.echoes === 0) {\n task.echoes = task.awaits = task.id = 0; // Cancel echoing.\n }\n\n zoneStack.push(PSD);\n switchToZone(targetZone, true);\n}\n\nfunction zoneLeaveEcho() {\n var zone = zoneStack[zoneStack.length-1];\n zoneStack.pop();\n switchToZone(zone, false);\n}\n\nfunction switchToZone (targetZone, bEnteringZone) {\n var currentZone = PSD;\n if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {\n // Enter or leave zone asynchronically as well, so that tasks initiated during current tick\n // will be surrounded by the zone when they are invoked.\n queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n }\n if (targetZone === PSD) return;\n\n PSD = targetZone; // The actual zone switch occurs at this line.\n\n // Snapshot on every leave from global zone.\n if (currentZone === globalPSD) globalPSD.env = snapShot();\n\n if (patchGlobalPromise) {\n // Let's patch the global and native Promises (may be same or may be different)\n var GlobalPromise = globalPSD.env.Promise;\n // Swich environments (may be PSD-zone or the global zone. Both apply.)\n var targetEnv = targetZone.env;\n\n if (currentZone.global || targetZone.global) {\n // Leaving or entering global zone. It's time to patch / restore global Promise.\n\n // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular.\n Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);\n\n // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might\n // not be accessing global.Promise but a local reference to it)\n GlobalPromise.all = targetEnv.all;\n GlobalPromise.race = targetEnv.race;\n GlobalPromise.resolve = targetEnv.resolve;\n GlobalPromise.reject = targetEnv.reject;\n if (targetEnv.allSettled) GlobalPromise.allSettled = targetEnv.allSettled;\n if (targetEnv.any) GlobalPromise.any = targetEnv.any;\n }\n }\n}\n\nfunction snapShot () {\n var GlobalPromise = _global.Promise;\n return patchGlobalPromise ? {\n Promise: GlobalPromise,\n PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n all: GlobalPromise.all,\n race: GlobalPromise.race,\n allSettled: GlobalPromise.allSettled,\n any: GlobalPromise.any,\n resolve: GlobalPromise.resolve,\n reject: GlobalPromise.reject,\n } : {};\n}\n\nexport function usePSD (psd, fn, a1, a2, a3) {\n var outerScope = PSD;\n try {\n switchToZone(psd, true);\n return fn(a1, a2, a3);\n } finally {\n switchToZone(outerScope, false);\n }\n}\n\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) {\n return typeof fn !== 'function' ? fn : function () {\n var outerZone = PSD;\n if (possibleAwait) incrementExpectedAwaits();\n switchToZone(zone, true);\n try {\n return fn.apply(this, arguments);\n } finally {\n switchToZone(outerZone, false);\n if (cleanup) queueMicrotask(decrementExpectedAwaits);\n }\n };\n}\n\n/** Execute callback in global context */\nexport function execInGlobalContext(cb) {\n if (Promise === NativePromise && task.echoes === 0) {\n if (zoneEchoes === 0) {\n cb();\n } else {\n enqueueNativeMicroTask(cb);\n }\n } else {\n setTimeout(cb, 0);\n }\n}\n\nexport var rejection = DexiePromise.reject;\n\nexport {DexiePromise};\n","import { PSD, rejection, newScope } from \"../helpers/promise\";\nimport { DexieOptions } from \"../public/types/dexie-constructor\";\nimport { errnames, exceptions } from \"../errors\";\nimport { nop } from \"./chaining-functions\";\nimport { Transaction } from \"../classes/transaction\";\nimport { Dexie } from '../classes/dexie';\n\n/* Generate a temporary transaction when db operations are done outside a transaction scope.\n*/\nexport function tempTransaction (\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n fn: (resolve, reject, trans: Transaction) => any)\n // Last argument is \"writeLocked\". But this doesnt apply to oneshot direct db operations, so we ignore it.\n{\n if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) {\n if (db._state.openComplete) {\n // db.idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError));\n }\n if (!db._state.isBeingOpened) {\n if (!db._state.autoOpen)\n return rejection(new exceptions.DatabaseClosed());\n db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn));\n } else {\n var trans = db._createTransaction(mode, storeNames, db._dbSchema);\n try {\n trans.create();\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(()=>tempTransaction(db, mode, storeNames, fn));\n }\n return rejection(ex);\n }\n return trans._promise(mode, (resolve, reject) => {\n return newScope(() => { // OPTIMIZATION POSSIBLE? newScope() not needed because it's already done in _promise.\n PSD.trans = trans;\n return fn(resolve, reject, trans);\n });\n }).then(result => {\n // Instead of resolving value directly, wait with resolving it until transaction has completed.\n // Otherwise the data would not be in the DB if requesting it in the then() operation.\n // Specifically, to ensure that the following expression will work:\n //\n // db.friends.put({name: \"Arne\"}).then(function () {\n // db.friends.where(\"name\").equals(\"Arne\").count(function(count) {\n // assert (count === 1);\n // });\n // });\n //\n if (mode === 'readwrite') try {trans.idbtrans.commit();} catch {}\n return mode === 'readonly' ? result : trans._completion.then(() => result);\n });/*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major.\n trans._reject(err);\n return rejection(err);\n });*/\n }\n}\n","import { Dexie } from \"../classes/dexie\";\n\nexport const DEXIE_VERSION = '{version}'; // Replaced by build-script.\nexport const maxString = String.fromCharCode(65535);\nexport const minKey = -Infinity; // minKey can be constant. maxKey must be a prop of Dexie (_maxKey)\nexport const INVALID_KEY_ARGUMENT =\n \"Invalid key provided. Keys must be of type string, number, Date or Array.\";\nexport const STRING_EXPECTED = \"String expected.\";\nexport const connections: Dexie[] = [];\nexport const dexieStackFrameFilter = frame => !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\nexport const DBNAMES_DB = '__dbnames';\nexport const READONLY = 'readonly';\nexport const READWRITE = 'readwrite';\n","export function combine(filter1, filter2) {\n return filter1 ?\n filter2 ?\n function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :\n filter1 :\n filter2;\n}\n","import { DBCoreKeyRange, DBCoreRangeType } from '../public/types/dbcore';\n\nexport const AnyRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Any,\n lower: -Infinity,\n lowerOpen: false,\n upper: [[]],\n upperOpen: false\n}\n\nexport const NeverRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Never,\n lower: -Infinity,\n lowerOpen: true,\n upper: -Infinity,\n upperOpen: true\n}\n","import { deepClone, delByKeyPath, getByKeyPath } from './utils';\n\n// This workaround is needed since obj could be a custom-class instance with an\n// uninitialized keyPath. See the following comment for more context:\n// https://github.com/dfahlander/Dexie.js/issues/1280#issuecomment-823557881\nexport function workaroundForUndefinedPrimKey(keyPath: string | ArrayLike) {\n // Workaround only needed for plain non-dotted keyPaths\n return typeof keyPath === \"string\" && !/\\./.test(keyPath) \n ? (obj: object) => {\n if (obj[keyPath] === undefined && (keyPath in obj)) {\n // property exists but is undefined. This will not be liked by Indexeddb.\n // Need to remove the property before adding it but we need to clone it before\n // doing that to not be intrusive.\n obj = deepClone(obj);\n delete obj[keyPath];\n }\n return obj;\n }\n : (obj: object) => obj;\n}","import { exceptions } from \"../../errors\";\n\nexport function Entity(){\n throw exceptions.Type();\n}\n","// Implementation of https://www.w3.org/TR/IndexedDB-3/#compare-two-keys\n\nimport { toStringTag } from './utils';\n\n// ... with the adjustment to return NaN instead of throwing.\nexport function cmp(a: any, b: any): number {\n try {\n const ta = type(a);\n const tb = type(b);\n if (ta !== tb) {\n if (ta === 'Array') return 1;\n if (tb === 'Array') return -1;\n if (ta === 'binary') return 1;\n if (tb === 'binary') return -1;\n if (ta === 'string') return 1;\n if (tb === 'string') return -1;\n if (ta === 'Date') return 1;\n if (tb !== 'Date') return NaN;\n return -1;\n }\n switch (ta) {\n case 'number':\n case 'Date':\n case 'string':\n return a > b ? 1 : a < b ? -1 : 0;\n case 'binary': {\n return compareUint8Arrays(getUint8Array(a), getUint8Array(b));\n }\n case 'Array':\n return compareArrays(a, b);\n }\n } catch {}\n return NaN; // Return value if any given args are valid keys.\n}\n\nexport function compareArrays(a: any[], b: any[]): number {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n const res = cmp(a[i], b[i]);\n if (res !== 0) return res;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\nexport function compareUint8Arrays(\n a: Uint8Array,\n b: Uint8Array\n) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n if (a[i] !== b[i]) return a[i] < b[i] ? -1 : 1;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\n// Implementation of https://www.w3.org/TR/IndexedDB-3/#key-type\nfunction type(x: any) {\n const t = typeof x;\n if (t !== 'object') return t;\n if (ArrayBuffer.isView(x)) return 'binary';\n const tsTag = toStringTag(x); // Cannot use instanceof in Safari\n return tsTag === 'ArrayBuffer' ? 'binary' : (tsTag as 'Array' | 'Date');\n}\n\ntype BinaryType =\n | ArrayBuffer\n | DataView\n | Uint8ClampedArray\n | ArrayBufferView\n | Uint8Array\n | Int8Array\n | Uint16Array\n | Int16Array\n | Uint32Array\n | Int32Array\n | Float32Array\n | Float64Array\n | BigInt64Array \n | BigUint64Array;\n\nfunction getUint8Array(a: BinaryType): Uint8Array {\n if (a instanceof Uint8Array) return a;\n if (ArrayBuffer.isView(a))\n // TypedArray or DataView\n return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return new Uint8Array(a); // ArrayBuffer\n}\n","import { BulkError, exceptions } from '../../errors';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { DexiePromise as Promise, PSD, newScope, rejection, beginMicroTickScope, endMicroTickScope } from '../../helpers/promise';\nimport { Transaction } from '../transaction';\nimport { Dexie } from '../dexie';\nimport { tempTransaction } from '../../functions/temp-transaction';\nimport { Collection } from '../collection';\nimport { isArray, keys, getByKeyPath, setByKeyPath, extend, getProto } from '../../functions/utils';\nimport { maxString } from '../../globals/constants';\nimport { combine } from '../../functions/combine';\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { IndexableType } from '../../public/types/indexable-type';\nimport { debug } from '../../helpers/debug';\nimport { DBCoreTable } from '../../public/types/dbcore';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { workaroundForUndefinedPrimKey } from '../../functions/workaround-undefined-primkey';\nimport { Entity } from '../entity/Entity';\nimport { UpdateSpec } from '../../public';\nimport { cmp } from '../../functions/cmp';\n\n/** class Table\n * \n * https://dexie.org/docs/Table/Table\n */\nexport class Table implements ITable {\n db: Dexie;\n _tx?: Transaction;\n name: string;\n schema: TableSchema;\n hook: TableHooks;\n core: DBCoreTable;\n\n _trans(\n mode: IDBTransactionMode,\n fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike | void,\n writeLocked?: boolean | string) : PromiseExtended\n {\n const trans: Transaction = this._tx || PSD.trans;\n const tableName = this.name;\n // @ts-ignore: Use Chrome's Async Stack Tagging API to allow tracing and simplify debugging for dexie users.\n const task = debug && typeof console !== 'undefined' && console.createTask && console.createTask(`Dexie: ${mode === 'readonly' ? 'read' : 'write' } ${this.name}`);\n \n function checkTableInTransaction(resolve, reject, trans: Transaction) {\n if (!trans.schema[tableName])\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n return fn(trans.idbtrans, trans) as Promise;\n }\n // Surround all in a microtick scope.\n // Reason: Browsers (modern Safari + older others)\n // still as of 2018-10-10 has problems keeping a transaction\n // alive between micro ticks. Safari because if transaction\n // is created but not used in same microtick, it will go\n // away. That specific issue could be solved in DBCore\n // by opening the transaction just before using it instead.\n // But older Firefoxes and IE11 (with Promise polyfills)\n // will still have probs.\n // The beginMicrotickScope()/endMicrotickScope() works\n // in cooperation with Dexie.Promise to orchestrate\n // the micro-ticks in endMicrotickScope() rather than\n // in native engine.\n const wasRootExec = beginMicroTickScope();\n try {\n let p = trans && trans.db._novip === this.db._novip ?\n trans === PSD.trans ?\n trans._promise(mode, checkTableInTransaction, writeLocked) :\n newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) :\n tempTransaction(this.db, mode, [this.name], checkTableInTransaction);\n if (task) { // Dexie.debug = true so we trace errors\n p._consoleTask = task;\n p = p.catch(err => {\n console.trace(err);\n return rejection(err);\n });\n }\n return p; \n } finally {\n if (wasRootExec) endMicroTickScope();\n }\n }\n\n /** Table.get()\n * \n * https://dexie.org/docs/Table/Table.get()\n * \n **/\n get(keyOrCrit, cb?) {\n if (keyOrCrit && keyOrCrit.constructor === Object)\n return this.where(keyOrCrit as { [key: string]: IndexableType }).first(cb);\n if (keyOrCrit == null) return rejection(new exceptions.Type(`Invalid argument to Table.get()`));\n\n return this._trans('readonly', (trans) => {\n return this.core.get({trans, key: keyOrCrit})\n .then(res => this.hook.reading.fire(res));\n }).then(cb);\n }\n\n /** Table.where()\n * \n * https://dexie.org/docs/Table/Table.where()\n * \n **/\n where(indexOrCrit: string | string[] | { [key: string]: IndexableType }) {\n if (typeof indexOrCrit === 'string')\n return new this.db.WhereClause(this, indexOrCrit);\n if (isArray(indexOrCrit))\n return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`);\n // indexOrCrit is an object map of {[keyPath]:value} \n const keyPaths = keys(indexOrCrit);\n if (keyPaths.length === 1)\n // Only one critera. This was the easy case:\n return this\n .where(keyPaths[0])\n .equals(indexOrCrit[keyPaths[0]]);\n\n // Multiple criterias.\n // Let's try finding a compound index that matches all keyPaths in\n // arbritary order:\n const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => {\n if (\n ix.compound &&\n keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0)) {\n for (let i=0; i a.keyPath.length - b.keyPath.length)[0];\n \n if (compoundIndex && this.db._maxKey !== maxString) {\n // Cool! We found such compound index\n // and this browser supports compound indexes (maxKey !== maxString)!\n const keyPathsInValidOrder = (compoundIndex.keyPath as string[]).slice(0, keyPaths.length);\n return this\n .where(keyPathsInValidOrder)\n .equals(keyPathsInValidOrder.map(kp => indexOrCrit[kp]));\n }\n\n if (!compoundIndex && debug) console.warn(\n `The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit from a ` +\n `compound index [${keyPaths.join('+')}]`);\n\n // Ok, now let's fallback to finding at least one matching index\n // and filter the rest.\n const { idxByName } = this.schema;\n const idb = this.db._deps.indexedDB;\n\n function equals (a, b) {\n return idb.cmp(a,b) === 0; // Works with all indexable types including binary keys.\n }\n\n const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => {\n const index = idxByName[keyPath];\n const value = indexOrCrit[keyPath];\n return [\n prevIndex || index, // idx::=Pick index of first matching keypath\n prevIndex || !index ? // filter::=null if not needed, otherwise combine function filter\n combine(\n prevFilterFn,\n index && index.multi ?\n x => {\n const prop = getByKeyPath(x, keyPath);\n return isArray(prop) && prop.some(item => equals(value, item));\n } : x => equals(value, getByKeyPath(x, keyPath)))\n : prevFilterFn\n ];\n }, [null, null]);\n\n return idx ?\n this.where(idx.name).equals(indexOrCrit[idx.keyPath])\n .filter(filterFunction) :\n compoundIndex ?\n this.filter(filterFunction) : // Has compound but browser bad. Allow filter.\n this.where(keyPaths).equals(''); // No index at all. Fail lazily with \"[a+b+c] is not indexed\"\n }\n\n /** Table.filter()\n * \n * https://dexie.org/docs/Table/Table.filter()\n * \n **/\n filter(filterFunction: (obj: any) => boolean) {\n return this.toCollection().and(filterFunction);\n }\n\n /** Table.count()\n * \n * https://dexie.org/docs/Table/Table.count()\n * \n **/\n count(thenShortcut?: any) {\n return this.toCollection().count(thenShortcut);\n }\n\n /** Table.offset()\n * \n * https://dexie.org/docs/Table/Table.offset()\n * \n **/\n offset(offset: number) {\n return this.toCollection().offset(offset);\n }\n\n /** Table.limit()\n * \n * https://dexie.org/docs/Table/Table.limit()\n * \n **/\n limit(numRows: number) {\n return this.toCollection().limit(numRows);\n }\n\n /** Table.each()\n * \n * https://dexie.org/docs/Table/Table.each()\n * \n **/\n each(callback: (obj: any, cursor: { key: IndexableType, primaryKey: IndexableType }) => any) {\n return this.toCollection().each(callback);\n }\n\n /** Table.toArray()\n * \n * https://dexie.org/docs/Table/Table.toArray()\n * \n **/\n toArray(thenShortcut?: any) {\n return this.toCollection().toArray(thenShortcut);\n }\n\n /** Table.toCollection()\n * \n * https://dexie.org/docs/Table/Table.toCollection()\n * \n **/\n toCollection() {\n return new this.db.Collection(new this.db.WhereClause(this));\n }\n\n /** Table.orderBy()\n * \n * https://dexie.org/docs/Table/Table.orderBy()\n * \n **/\n orderBy(index: string | string[]) {\n return new this.db.Collection(\n new this.db.WhereClause(this, isArray(index) ?\n `[${index.join('+')}]` :\n index));\n }\n\n /** Table.reverse()\n * \n * https://dexie.org/docs/Table/Table.reverse()\n * \n **/\n reverse(): Collection {\n return this.toCollection().reverse();\n }\n\n /** Table.mapToClass()\n * \n * https://dexie.org/docs/Table/Table.mapToClass()\n * \n **/\n mapToClass(constructor: Function) {\n const {db, name: tableName} = this;\n this.schema.mappedClass = constructor;\n if (constructor.prototype instanceof Entity) {\n constructor = class extends (constructor as any) {\n get db () { return db; }\n table() { return tableName; }\n }\n }\n // Collect all inherited property names (including method names) by\n // walking the prototype chain. This is to avoid overwriting them from\n // database data - so application code can rely on inherited props never\n // becoming shadowed by database object props.\n const inheritedProps = new Set();\n for (let proto = constructor.prototype; proto; proto = getProto(proto)) {\n Object.getOwnPropertyNames(proto).forEach(propName => inheritedProps.add(propName));\n }\n \n // Now, subscribe to the when(\"reading\") event to make all objects that come out from this table inherit from given class\n // no matter which method to use for reading (Table.get() or Table.where(...)... )\n const readHook = (obj: Object) => {\n if (!obj) return obj; // No valid object. (Value is null or undefined). Return as is.\n // Create a new object that derives from constructor:\n const res = Object.create(constructor.prototype);\n // Clone members (but never those that collide with a property in the prototype\n // hierchary (MUST BE ABLE TO RELY ON Entity methods and props!)):\n for (let m in obj) if (!inheritedProps.has(m)) try { res[m] = obj[m]; } catch (_) { }\n return res;\n };\n\n if (this.schema.readHook) {\n this.hook.reading.unsubscribe(this.schema.readHook);\n }\n this.schema.readHook = readHook;\n this.hook(\"reading\", readHook);\n return constructor;\n }\n\n /** @deprecated */\n defineClass() {\n function Class (content){\n extend(this, content);\n };\n return this.mapToClass(Class);\n }\n\n /** Table.add()\n * \n * https://dexie.org/docs/Table/Table.add()\n * \n **/\n add(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd]});\n }).then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.update()\n * \n * https://dexie.org/docs/Table/Table.update()\n * \n **/\n update(keyOrObject, modifications: { [keyPath: string]: any; } | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n if (key === undefined) return rejection(new exceptions.InvalidArgument(\n \"Given object does not contain its primary key\"));\n /*// object to modify. Also modify given object with the modifications:\n // This part should be here for backward compatibility.\n // If ever feeling too bad about mutating given object, please wait to a new major before removing it,\n // and document the change thoroughly. TODO: Document this change!\n if (!Object.isFrozen(keyOrObject)) try {\n if (typeof modifications !== \"function\") {\n keys(modifications).forEach(keyPath => {\n setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n });\n } else {\n // Now since we support function argument, we should have a similar behavior here as well\n // (as long as we do this mutability stuff on the given object)\n modifications(keyOrObject, {value: keyOrObject, primKey: key});\n }\n } catch {\n // Maybe given object was frozen.\n // This part is not essential. Just move on as nothing happened...\n }*/\n return this.where(\":id\").equals(key).modify(modifications);\n } else {\n // key to modify\n return this.where(\":id\").equals(keyOrObject).modify(modifications);\n }\n }\n\n /** Table.put()\n * \n * https://dexie.org/docs/Table/Table.put()\n * \n **/\n put(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans(\n 'readwrite',\n trans => this.core.mutate({trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.delete()\n * \n * https://dexie.org/docs/Table/Table.delete()\n * \n **/\n delete(key: IndexableType): PromiseExtended {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'delete', keys: [key]}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.clear()\n * \n * https://dexie.org/docs/Table/Table.clear()\n * \n **/\n clear() {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'deleteRange', range: AnyRange}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.bulkGet()\n * \n * https://dexie.org/docs/Table/Table.bulkGet()\n * \n * @param keys \n */\n bulkGet(keys: IndexableType[]) {\n return this._trans('readonly', trans => {\n return this.core.getMany({\n keys,\n trans\n }).then(result => result.map(res => this.hook.reading.fire(res)));\n });\n }\n\n /** Table.bulkAdd()\n * \n * https://dexie.org/docs/Table/Table.bulkAdd()\n * \n **/\n bulkAdd(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToAdd = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate(\n {trans, type: 'add', keys: keys as IndexableType[], values: objectsToAdd, wantResults}\n )\n .then(({numFailures, results,lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkPut()\n * \n * https://dexie.org/docs/Table/Table.bulkPut()\n * \n **/\n bulkPut(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToPut = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n\n return this.core.mutate(\n {trans, type: 'put', keys: keys as IndexableType[], values: objectsToPut, wantResults}\n )\n .then(({numFailures, results, lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkUpdate()\n *\n * https://dexie.org/docs/Table.Table.bulkUpdate()\n */\n bulkUpdate(\n keysAndChanges: readonly { key: any; changes: UpdateSpec }[]\n ): PromiseExtended {\n const coreTable = this.core;\n const keys = keysAndChanges.map((entry) => entry.key);\n const changeSpecs = keysAndChanges.map((entry) => entry.changes);\n const offsetMap: number[] = [];\n return this._trans('readwrite', (trans) => {\n return coreTable.getMany({ trans, keys, cache: 'clone' }).then((objs) => {\n const resultKeys: any[] = [];\n const resultObjs: any[] = [];\n keysAndChanges.forEach(({ key, changes }, idx) => {\n const obj = objs[idx];\n if (obj) {\n for (const keyPath of Object.keys(changes)) {\n const value = changes[keyPath];\n if (keyPath === this.schema.primKey.keyPath) {\n if (cmp(value, key) !== 0) {\n throw new exceptions.Constraint(\n `Cannot update primary key in bulkUpdate()`\n );\n }\n } else {\n setByKeyPath(obj, keyPath, value);\n }\n }\n offsetMap.push(idx);\n resultKeys.push(key);\n resultObjs.push(obj);\n }\n });\n const numEntries = resultKeys.length;\n return coreTable\n .mutate({\n trans,\n type: 'put',\n keys: resultKeys,\n values: resultObjs,\n updates: {\n keys,\n changeSpecs\n }\n })\n .then(({ numFailures, failures }) => {\n if (numFailures === 0) return numEntries;\n // Failure. bulkPut() may have a subset of keys\n // so we must translate returned 'failutes' into the offsets of given argument:\n for (const offset of Object.keys(failures)) {\n const mappedOffset = offsetMap[Number(offset)];\n if (mappedOffset != null) {\n const failure = failures[offset];\n delete failures[offset];\n failures[mappedOffset] = failure;\n }\n }\n throw new BulkError(\n `${this.name}.bulkUpdate(): ${numFailures} of ${numEntries} operations failed`,\n failures\n );\n });\n });\n });\n }\n\n /** Table.bulkDelete()\n * \n * https://dexie.org/docs/Table/Table.bulkDelete()\n * \n **/\n bulkDelete(keys: ReadonlyArray): PromiseExtended {\n const numKeys = keys.length;\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'delete', keys: keys as IndexableType[]});\n }).then(({numFailures, lastResult, failures}) => {\n if (numFailures === 0) return lastResult;\n throw new BulkError(\n `${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures);\n });\n }\n}\n","import {keys, isArray, asap} from '../functions/utils';\nimport {nop, mirror, reverseStoppableEventChain} from '../functions/chaining-functions';\nimport {exceptions} from '../errors';\n\nexport default function Events(ctx) {\n var evs = {};\n var rv = function (eventName, subscriber) {\n if (subscriber) {\n // Subscribe. If additional arguments than just the subscriber was provided, forward them as well.\n var i = arguments.length, args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n evs[eventName].subscribe.apply(null, args);\n return ctx;\n } else if (typeof (eventName) === 'string') {\n // Return interface allowing to fire or unsubscribe from event\n return evs[eventName];\n }\n };\n rv.addEventType = add;\n \n for (var i = 1, l = arguments.length; i < l; ++i) {\n add(arguments[i]);\n }\n \n return rv;\n\n function add(eventName, chainFunction, defaultFunction) {\n if (typeof eventName === 'object') return addConfiguredEvents(eventName);\n if (!chainFunction) chainFunction = reverseStoppableEventChain;\n if (!defaultFunction) defaultFunction = nop;\n\n var context = {\n subscribers: [],\n fire: defaultFunction,\n subscribe: function (cb) {\n if (context.subscribers.indexOf(cb) === -1) {\n context.subscribers.push(cb);\n context.fire = chainFunction(context.fire, cb);\n }\n },\n unsubscribe: function (cb) {\n context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });\n context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n }\n };\n evs[eventName] = rv[eventName] = context;\n return context;\n }\n\n function addConfiguredEvents(cfg) {\n // events(this, {reading: [functionChain, nop]});\n keys(cfg).forEach(function (eventName) {\n var args = cfg[eventName];\n if (isArray(args)) {\n add(eventName, cfg[eventName][0], cfg[eventName][1]);\n } else if (args === 'asap') {\n // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack\n // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten.\n var context = add(eventName, mirror, function fire() {\n // Optimazation-safe cloning of arguments into args.\n var i = arguments.length, args = new Array(i);\n while (i--) args[i] = arguments[i];\n // All each subscriber:\n context.subscribers.forEach(function (fn) {\n asap(function fireEvent() {\n fn.apply(null, args);\n });\n });\n });\n } else throw new exceptions.InvalidArgument(\"Invalid event config\");\n });\n }\n}\n","import { arrayToObject, derive } from './utils';\n\n\nexport function makeClassConstructor (prototype: Object, constructor: Function) {\n /*const propertyDescriptorMap = arrayToObject(\n Object.getOwnPropertyNames(prototype),\n propKey => [propKey, Object.getOwnPropertyDescriptor(prototype, propKey)]);\n\n // Both derive and clone the prototype.\n // derive: So that x instanceof T returns true when T is the class template.\n // clone: Optimizes method access a bit (but actually not nescessary)\n const derivedPrototypeClone = Object.create(prototype, propertyDescriptorMap);\n derivedPrototypeClone.constructor = constructor;\n constructor.prototype = derivedPrototypeClone;\n return constructor as any as TConstructor;*/\n\n // Keep the above code in case we want to clone AND derive the parent prototype.\n // Reason would be optimization of property access.\n // The code below will only create a prototypal inheritance from given constructor function\n // to given prototype.\n derive(constructor).from({prototype});\n return constructor as any as TConstructor; \n}\n","import { Dexie } from '../dexie';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { Transaction } from '../transaction/transaction';\nimport { hookCreatingChain, pureFunctionChain, nop, mirror, hookUpdatingChain, hookDeletingChain } from '../../functions/chaining-functions';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { Table } from './table';\nimport Events from '../../helpers/Events';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\n\nexport interface TableConstructor {\n new (name: string, tableSchema: TableSchema, optionalTrans?: Transaction) : Table;\n prototype: Table;\n}\n\n/** Generates a Table constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTableConstructor (db: Dexie) {\n return makeClassConstructor(\n Table.prototype,\n\n function Table (this: Table, name: string, tableSchema: TableSchema, trans?: Transaction) {\n this.db = db;\n this._tx = trans;\n this.name = name;\n this.schema = tableSchema;\n this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {\n \"creating\": [hookCreatingChain, nop],\n \"reading\": [pureFunctionChain, mirror],\n \"updating\": [hookUpdatingChain, nop],\n \"deleting\": [hookDeletingChain, nop]\n }) as TableHooks;\n }\n\n );\n}\n","import { combine } from \"../../functions/combine\";\nimport { exceptions } from \"../../errors\";\nimport { hasOwn } from \"../../functions/utils\";\nimport { wrap } from \"../../helpers/promise\";\nimport { Collection } from './';\nimport { DBCoreCursor, DBCoreTable, DBCoreTransaction, DBCoreTableSchema, DBCoreRangeType } from '../../public/types/dbcore';\nimport { nop } from '../../functions/chaining-functions';\n\ntype CollectionContext = Collection[\"_ctx\"];\n\nexport function isPlainKeyRange (ctx: CollectionContext, ignoreLimitFilter?: boolean) {\n return !(ctx.filter || ctx.algorithm || ctx.or) &&\n (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n} \n\nexport function addFilter(ctx: CollectionContext, fn: Function) {\n ctx.filter = combine(ctx.filter, fn);\n}\n\nexport function addReplayFilter (ctx: CollectionContext, factory, isLimitFilter?) {\n var curr = ctx.replayFilter;\n ctx.replayFilter = curr ? ()=>combine(curr(), factory()) : factory;\n ctx.justLimit = isLimitFilter && !curr;\n}\n\nexport function addMatchFilter(ctx: CollectionContext, fn) {\n ctx.isMatch = combine(ctx.isMatch, fn);\n}\n\nexport function getIndexOrStore(ctx: CollectionContext, coreSchema: DBCoreTableSchema) {\n // TODO: Rewrite this. No need to know ctx.isPrimKey. ctx.index should hold the keypath.\n // Still, throw if not found!\n if (ctx.isPrimKey) return coreSchema.primaryKey;\n const index = coreSchema.getIndexByKeyPath(ctx.index);\n if (!index) throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + coreSchema.name + \" is not indexed\");\n return index;\n}\n\nexport function openCursor(ctx: CollectionContext, coreTable: DBCoreTable, trans: DBCoreTransaction) {\n const index = getIndexOrStore(ctx, coreTable.schema);\n return coreTable.openCursor({\n trans,\n values: !ctx.keysOnly,\n reverse: ctx.dir === 'prev',\n unique: !!ctx.unique,\n query: {\n index, \n range: ctx.range\n }\n });\n}\n\nexport function iter (\n ctx: CollectionContext, \n fn: (item, cursor: DBCoreCursor, advance: Function)=>void,\n coreTrans: DBCoreTransaction,\n coreTable: DBCoreTable): Promise\n{\n const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n if (!ctx.or) {\n return iterate(\n openCursor(ctx, coreTable, coreTrans),\n combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);\n } else {\n const set = {};\n\n const union = (item: any, cursor: DBCoreCursor, advance) => {\n if (!filter || filter(cursor, advance, result=>cursor.stop(result), err => cursor.fail(err))) {\n var primaryKey = cursor.primaryKey;\n var key = '' + primaryKey;\n if (key === '[object ArrayBuffer]') key = '' + new Uint8Array(primaryKey);\n if (!hasOwn(set, key)) {\n set[key] = true;\n fn(item, cursor, advance);\n }\n }\n }\n\n return Promise.all([\n ctx.or._iterate(union, coreTrans),\n iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)\n ]);\n }\n}\n\nfunction iterate(cursorPromise: Promise, filter, fn, valueMapper): Promise {\n \n // Apply valueMapper (hook('reading') or mappped class)\n var mappedFn = valueMapper ? (x,c,a) => fn(valueMapper(x),c,a) : fn;\n // Wrap fn with PSD and microtick stuff from Promise.\n var wrappedFn = wrap(mappedFn);\n \n return cursorPromise.then(cursor => {\n if (cursor) {\n return cursor.start(()=>{\n var c = ()=>cursor.continue();\n if (!filter || filter(cursor, advancer => c = advancer, val=>{cursor.stop(val);c=nop}, e => {cursor.fail(e);c = nop;}))\n wrappedFn(cursor.value, cursor, advancer => c = advancer);\n c();\n });\n }\n });\n}\n","import { isArray } from \"../functions/utils\";\nimport { PropModSpec } from \"../public/types/prop-modification\";\n\nexport const PropModSymbol: unique symbol = Symbol();\n\n/** Consistent change propagation across offline synced data.\n * \n * This class is executed client- and server side on sync, making\n * an operation consistent across sync for full consistency and accuracy.\n * \n * Example: An object represents a bank account with a balance.\n * One offline user adds $ 1.00 to the balance.\n * Another user (online) adds $ 2.00 to the balance.\n * When first user syncs, the balance becomes the sum of every operation (3.00).\n * \n * -- initial: balance is 0\n * 1. db.bankAccounts.update(1, { balance: new ProdModification({add: 100})}) // user 1 (offline)\n * 2. db.bankAccounts.update(1, { balance: new ProdModification({add: 200})}) // user 2 (online)\n * -- before user 1 syncs, balance is 200 (representing money with integers * 100 to avoid rounding issues)\n * \n * -- balance is 300\n * \n * When new operations are added, they need to be added to:\n * 1. PropModSpec interface\n * 2. Here in PropModification with the logic they represent\n * 3. (Optionally) a sugar function for it, such as const mathAdd = (amount: number | BigInt) => new PropModification({mathAdd: amount})\n */\nexport class PropModification implements PropModSpec {\n [PropModSymbol]?: true;\n replacePrefix?: [string, string];\n add?: number | BigInt | Array;\n remove?: number | BigInt | Array;\n\n execute(value: any): any {\n // add (mathematical or set-wise)\n if (this.add !== undefined) {\n const term = this.add;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(term)) {\n return [...(isArray(value) ? value : []), ...term].sort();\n }\n // Mathematical addition:\n if (typeof term === 'number') return (Number(value) || 0) + term; // if value is not convertible to number, return 0 + term\n if (typeof term === 'bigint') {\n try {\n return BigInt(value) + term;\n } catch {\n return BigInt(0) + term; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid term ${term}`);\n }\n\n // remove (mathematical or set-wise)\n if (this.remove !== undefined) {\n const subtrahend = this.remove;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(subtrahend)) {\n return isArray(value) ? value.filter(item => !subtrahend.includes(item)).sort() : [];\n } \n // Mathematical addition:\n if (typeof subtrahend === 'number') return Number(value) - subtrahend;\n if (typeof subtrahend === 'bigint') {\n try {\n return BigInt(value) - subtrahend;\n } catch {\n return BigInt(0) - subtrahend; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid subtrahend ${subtrahend}`);\n }\n\n // Replace a prefix:\n const prefixToReplace = this.replacePrefix?.[0];\n if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) {\n return this.replacePrefix[1] + value.substring(prefixToReplace.length);\n }\n return value;\n }\n\n constructor(spec: PropModSpec) {\n Object.assign(this, spec);\n }\n}\n","import { Collection as ICollection } from \"../../public/types/collection\";\nimport { Dexie } from \"../dexie\";\nimport { Table } from \"../table\";\nimport { IndexableType, IndexableTypeArrayReadonly } from \"../../public/types/indexable-type\";\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { iter, isPlainKeyRange, getIndexOrStore, addReplayFilter, addFilter, addMatchFilter } from \"./collection-helpers\";\nimport { rejection } from \"../../helpers/promise\";\nimport { combine } from \"../../functions/combine\";\nimport { extend, hasOwn, deepClone, keys, setByKeyPath, getByKeyPath } from \"../../functions/utils\";\nimport { ModifyError } from \"../../errors\";\nimport { ThenShortcut } from \"../../public/types/then-shortcut\";\nimport { Transaction } from '../transaction';\nimport { DBCoreCursor, DBCoreTransaction, DBCoreRangeType, DBCoreMutateResponse, DBCoreKeyRange } from '../../public/types/dbcore';\nimport { cmp } from \"../../functions/cmp\";\nimport { PropModification } from \"../../helpers/prop-modification\";\nimport { UpdateSpec } from \"../../public/types/update-spec\";\n\n/** class Collection\n * \n * https://dexie.org/docs/Collection/Collection\n */\nexport class Collection implements ICollection {\n db: Dexie;\n _ctx: {\n table: Table;\n index?: string | null;\n isPrimKey?: boolean;\n range: DBCoreKeyRange;\n keysOnly: boolean;\n dir: \"next\" | \"prev\";\n unique: \"\" | \"unique\";\n algorithm?: Function | null;\n filter?: Function | null;\n replayFilter: Function | null;\n justLimit: boolean; // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: Function | null;\n offset: number,\n limit: number,\n error: any, // If set, any promise must be rejected with this error\n or: Collection,\n valueMapper: (any) => any\n }\n \n _ondirectionchange?: Function;\n\n _read(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike, cb?): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readonly', fn).then(cb);\n }\n\n _write(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readwrite', fn, \"locked\"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued.\n }\n\n _addAlgorithm(fn) {\n var ctx = this._ctx;\n ctx.algorithm = combine(ctx.algorithm, fn);\n }\n\n _iterate(\n fn: (item, cursor: DBCoreCursor, advance: Function) => void,\n coreTrans: DBCoreTransaction) : Promise\n {\n return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n }\n\n /** Collection.clone()\n * \n * https://dexie.org/docs/Collection/Collection.clone()\n * \n **/\n clone(props?): this {\n var rv = Object.create(this.constructor.prototype),\n ctx = Object.create(this._ctx);\n if (props) extend(ctx, props);\n rv._ctx = ctx;\n return rv;\n }\n\n /** Collection.raw()\n * \n * https://dexie.org/docs/Collection/Collection.raw()\n * \n **/\n raw(): this {\n this._ctx.valueMapper = null;\n return this;\n }\n\n /** Collection.each()\n * \n * https://dexie.org/docs/Collection/Collection.each()\n * \n **/\n each(fn: (obj, cursor: DBCoreCursor) => any): PromiseExtended {\n var ctx = this._ctx;\n\n return this._read(trans => iter(ctx, fn, trans, ctx.table.core));\n }\n\n /** Collection.count()\n * \n * https://dexie.org/docs/Collection/Collection.count()\n * \n **/\n count(cb?) {\n return this._read(trans => {\n const ctx = this._ctx;\n const coreTable = ctx.table.core;\n if (isPlainKeyRange(ctx, true)) {\n // This is a plain key range. We can use the count() method if the index.\n return coreTable.count({\n trans,\n query: {\n index: getIndexOrStore(ctx, coreTable.schema),\n range: ctx.range\n }\n }).then(count => Math.min(count, ctx.limit));\n } else {\n // Algorithms, filters or expressions are applied. Need to count manually.\n var count = 0;\n return iter(ctx, () => { ++count; return false; }, trans, coreTable)\n .then(()=>count);\n }\n }).then(cb);\n }\n\n /** Collection.sortBy()\n * \n * https://dexie.org/docs/Collection/Collection.sortBy()\n * \n **/\n sortBy(keyPath: string): PromiseExtended;\n sortBy(keyPath: string, thenShortcut: ThenShortcut) : PromiseExtended;\n sortBy(keyPath: string, cb?: ThenShortcut) {\n const parts = keyPath.split('.').reverse(),\n lastPart = parts[0],\n lastIndex = parts.length - 1;\n function getval(obj, i) {\n if (i) return getval(obj[parts[i]], i - 1);\n return obj[lastPart];\n }\n var order = this._ctx.dir === \"next\" ? 1 : -1;\n\n function sorter(a, b) {\n var aVal = getval(a, lastIndex),\n bVal = getval(b, lastIndex);\n return aVal < bVal ? -order : aVal > bVal ? order : 0;\n }\n return this.toArray(function (a) {\n return a.sort(sorter);\n }).then(cb);\n }\n\n /** Collection.toArray()\n * \n * https://dexie.org/docs/Collection/Collection.toArray()\n * \n **/\n toArray(cb?): PromiseExtended {\n return this._read(trans => {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAll() or\n // IDBKeyRange.getAll():\n const {valueMapper} = ctx;\n const index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n limit: ctx.limit,\n values: true,\n query: {\n index,\n range: ctx.range\n }\n }).then(({result}) => valueMapper ? result.map(valueMapper) : result);\n } else {\n // Getting array through a cursor.\n const a = [];\n return iter(ctx, item => a.push(item), trans, ctx.table.core).then(()=>a);\n }\n }, cb);\n }\n\n /** Collection.offset()\n * \n * https://dexie.org/docs/Collection/Collection.offset()\n * \n **/\n offset(offset: number) : Collection{\n var ctx = this._ctx;\n if (offset <= 0) return this;\n ctx.offset += offset; // For count()\n if (isPlainKeyRange(ctx)) {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return (cursor, advance) => {\n if (offsetLeft === 0) return true;\n if (offsetLeft === 1) { --offsetLeft; return false; }\n advance(() => {\n cursor.advance(offsetLeft);\n offsetLeft = 0;\n });\n return false;\n };\n });\n } else {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return () => (--offsetLeft < 0);\n });\n }\n return this;\n }\n\n /** Collection.limit()\n * \n * https://dexie.org/docs/Collection/Collection.limit()\n * \n **/\n limit(numRows: number) : Collection {\n this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count()\n addReplayFilter(this._ctx, () => {\n var rowsLeft = numRows;\n return function (cursor, advance, resolve) {\n if (--rowsLeft <= 0) advance(resolve); // Stop after this item has been included\n return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here.\n };\n }, true);\n return this;\n }\n\n /** Collection.until()\n * \n * https://dexie.org/docs/Collection/Collection.until()\n * \n **/\n until(filterFunction: (x) => boolean, bIncludeStopEntry?) {\n addFilter(this._ctx, function (cursor, advance, resolve) {\n if (filterFunction(cursor.value)) {\n advance(resolve);\n return bIncludeStopEntry;\n } else {\n return true;\n }\n });\n return this;\n }\n\n /** Collection.first()\n * \n * https://dexie.org/docs/Collection/Collection.first()\n * \n **/\n first(cb?) {\n return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.last()\n * \n * https://dexie.org/docs/Collection/Collection.last()\n * \n **/\n last(cb?) {\n return this.reverse().first(cb);\n }\n\n /** Collection.filter()\n * \n * https://dexie.org/docs/Collection/Collection.filter()\n * \n **/\n filter(filterFunction: (x) => boolean): Collection {\n /// function(val){return true/false}\n addFilter(this._ctx, function (cursor) {\n return filterFunction(cursor.value);\n });\n // match filters not used in Dexie.js but can be used by 3rd part libraries to test a\n // collection for a match without querying DB. Used by Dexie.Observable.\n addMatchFilter(this._ctx, filterFunction);\n return this;\n }\n\n /** Collection.and()\n * \n * https://dexie.org/docs/Collection/Collection.and()\n * \n **/\n and(filter: (x) => boolean) {\n return this.filter(filter);\n }\n\n /** Collection.or()\n * \n * https://dexie.org/docs/Collection/Collection.or()\n * \n **/\n or(indexName: string) {\n return new this.db.WhereClause(this._ctx.table, indexName, this);\n }\n\n /** Collection.reverse()\n * \n * https://dexie.org/docs/Collection/Collection.reverse()\n * \n **/\n reverse() {\n this._ctx.dir = (this._ctx.dir === \"prev\" ? \"next\" : \"prev\");\n if (this._ondirectionchange) this._ondirectionchange(this._ctx.dir);\n return this;\n }\n\n /** Collection.desc()\n * \n * https://dexie.org/docs/Collection/Collection.desc()\n * \n **/\n desc() {\n return this.reverse();\n }\n\n /** Collection.eachKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachKey()\n * \n **/\n eachKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n }\n\n /** Collection.eachUniqueKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachUniqueKey()\n * \n **/\n eachUniqueKey(cb?) {\n this._ctx.unique = \"unique\";\n return this.eachKey(cb);\n }\n\n /** Collection.eachPrimaryKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachPrimaryKey()\n * \n **/\n eachPrimaryKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n }\n\n /** Collection.keys()\n * \n * https://dexie.org/docs/Collection/Collection.keys()\n * \n **/\n keys(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.key);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.primaryKeys()\n * \n * https://dexie.org/docs/Collection/Collection.primaryKeys()\n * \n **/\n primaryKeys(cb?) : PromiseExtended {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAllKeys() or\n // IDBKeyRange.getAllKeys():\n return this._read(trans => {\n var index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n values: false,\n limit: ctx.limit,\n query: {\n index,\n range: ctx.range\n }});\n }).then(({result})=>result).then(cb);\n }\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.primaryKey);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.uniqueKeys()\n * \n * https://dexie.org/docs/Collection/Collection.uniqueKeys()\n * \n **/\n uniqueKeys(cb?) {\n this._ctx.unique = \"unique\";\n return this.keys(cb);\n }\n\n /** Collection.firstKey()\n * \n * https://dexie.org/docs/Collection/Collection.firstKey()\n * \n **/\n firstKey(cb?) {\n return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.lastKey()\n * \n * https://dexie.org/docs/Collection/Collection.lastKey()\n * \n **/\n lastKey(cb?) {\n return this.reverse().firstKey(cb);\n }\n\n /** Collection.distinct()\n * \n * https://dexie.org/docs/Collection/Collection.distinct()\n * \n **/\n distinct() {\n var ctx = this._ctx,\n idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n if (!idx || !idx.multi) return this; // distinct() only makes differencies on multiEntry indexes.\n var set = {};\n addFilter(this._ctx, function (cursor: DBCoreCursor) {\n var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string\n var found = hasOwn(set, strKey);\n set[strKey] = true;\n return !found;\n });\n return this;\n }\n\n //\n // Methods that mutate storage\n //\n\n /** Collection.modify()\n * \n * https://dexie.org/docs/Collection/Collection.modify()\n * \n **/\n modify(changes: UpdateSpec | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n var ctx = this._ctx;\n return this._write(trans => {\n var modifyer: (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean\n if (typeof changes === 'function') {\n // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item)\n modifyer = changes as (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean;\n } else {\n // changes is a set of {keyPath: value} and no one is listening to the updating hook.\n var keyPaths = keys(changes);\n var numKeys = keyPaths.length;\n modifyer = function (item) {\n let anythingModified = false;\n for (let i = 0; i < numKeys; ++i) {\n let keyPath = keyPaths[i];\n let val = changes[keyPath];\n let origVal = getByKeyPath(item, keyPath);\n\n if (val instanceof PropModification) {\n setByKeyPath(item, keyPath, val.execute(origVal));\n anythingModified = true;\n } else if (origVal !== val) {\n setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n anythingModified = true;\n }\n }\n return anythingModified;\n };\n }\n\n const coreTable = ctx.table.core;\n const {outbound, extractKey} = coreTable.schema.primaryKey;\n const limit = this.db._options.modifyChunkSize || 200;\n const totalFailures = [];\n let successCount = 0;\n const failedKeys: IndexableType[] = [];\n const applyMutateResult = (expectedCount: number, res: DBCoreMutateResponse) => {\n const {failures, numFailures} = res;\n successCount += expectedCount - numFailures;\n for (let pos of keys(failures)) {\n totalFailures.push(failures[pos]);\n }\n }\n return this.clone().primaryKeys().then(keys => {\n const criteria = isPlainKeyRange(ctx) &&\n ctx.limit === Infinity &&\n (typeof changes !== 'function' || changes === deleteCallback) && {\n index: ctx.index,\n range: ctx.range\n };\n\n const nextChunk = (offset: number) => {\n const count = Math.min(limit, keys.length - offset);\n return coreTable.getMany({\n trans,\n keys: keys.slice(offset, offset + count),\n cache: \"immutable\" // Optimize for 2 things:\n // 1) observability-middleware can track changes better.\n // 2) hooks middleware don't have to query the existing values again when tracking changes.\n // We can use \"immutable\" because we promise to not touch the values we retrieve here!\n }).then(values => {\n const addValues = [];\n const putValues = [];\n const putKeys = outbound ? [] : null;\n const deleteKeys = [];\n for (let i=0; i 0 &&\n coreTable.mutate({trans, type: 'add', values: addValues})\n .then(res => {\n for (let pos in res.failures) {\n // Remove from deleteKeys the key of the object that failed to change its primary key\n deleteKeys.splice(parseInt(pos), 1);\n }\n applyMutateResult(addValues.length, res);\n })\n ).then(()=>(putValues.length > 0 || (criteria && typeof changes === 'object')) &&\n coreTable.mutate({\n trans,\n type: 'put',\n keys: putKeys,\n values: putValues,\n criteria,\n changeSpec: typeof changes !== 'function'\n && changes,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(putValues.length, res))\n ).then(()=>(deleteKeys.length > 0 || (criteria && changes === deleteCallback)) &&\n coreTable.mutate({\n trans,\n type: 'delete',\n keys: deleteKeys,\n criteria,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(deleteKeys.length, res))\n ).then(()=>{\n return keys.length > offset + count && nextChunk(offset + limit);\n });\n });\n }\n\n return nextChunk(0).then(()=>{\n if (totalFailures.length > 0)\n throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys as IndexableTypeArrayReadonly);\n\n return keys.length;\n });\n });\n\n });\n }\n\n /** Collection.delete()\n * \n * https://dexie.org/docs/Collection/Collection.delete()\n * \n **/\n delete() : PromiseExtended {\n var ctx = this._ctx,\n range = ctx.range;\n //deletingHook = ctx.table.hook.deleting.fire,\n //hasDeleteHook = deletingHook !== nop;\n if (isPlainKeyRange(ctx) &&\n (ctx.isPrimKey || range.type === DBCoreRangeType.Any)) // if no range, we'll use clear().\n {\n // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208)\n // For chromium, this is the way most optimized version.\n // For IE/Edge, this could hang the indexedDB engine and make operating system instable\n // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7)\n return this._write(trans => {\n // Our API contract is to return a count of deleted items, so we have to count() before delete().\n const {primaryKey} = ctx.table.core.schema;\n const coreRange = range;\n return ctx.table.core.count({trans, query: {index: primaryKey, range: coreRange}}).then(count => {\n return ctx.table.core.mutate({trans, type: 'deleteRange', range: coreRange})\n .then(({failures, lastResult, results, numFailures}) => {\n if (numFailures) throw new ModifyError(\"Could not delete some values\",\n Object.keys(failures).map(pos => failures[pos]),\n count - numFailures);\n return count - numFailures;\n });\n });\n });\n }\n\n return this.modify(deleteCallback);\n }\n}\n\nconst deleteCallback = (value, ctx) => ctx.value = null;\n","import { Dexie } from '../../classes/dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Collection } from './collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\nimport { mirror } from '../../functions/chaining-functions';\n\n/** Constructs a Collection instance. */\nexport interface CollectionConstructor {\n new(whereClause?: WhereClause | null, keyRangeGenerator?: () => DBCoreKeyRange): Collection;\n prototype: Collection;\n}\n\n/** Generates a Collection constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createCollectionConstructor(db: Dexie) {\n return makeClassConstructor(\n Collection.prototype,\n\n function Collection(\n this: Collection,\n whereClause?: WhereClause | null,\n keyRangeGenerator?: () => DBCoreKeyRange)\n {\n this.db = db;\n let keyRange = AnyRange, error = null;\n if (keyRangeGenerator) try {\n keyRange = keyRangeGenerator();\n } catch (ex) {\n error = ex;\n }\n\n const whereCtx = whereClause._ctx;\n const table = whereCtx.table;\n const readingHook = table.hook.reading.fire;\n this._ctx = {\n table: table,\n index: whereCtx.index,\n isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),\n range: keyRange,\n keysOnly: false,\n dir: \"next\",\n unique: \"\",\n algorithm: null,\n filter: null,\n replayFilter: null,\n justLimit: true, // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: null,\n offset: 0,\n limit: Infinity,\n error: error, // If set, any promise must be rejected with this error\n or: whereCtx.or,\n valueMapper: readingHook !== mirror ? readingHook : null\n };\n }\n );\n}\n","import { IndexableType } from '../public/types/indexable-type';\n\nexport function simpleCompare(a, b) {\n return a < b ? -1 : a === b ? 0 : 1;\n}\n\nexport function simpleCompareReverse(a, b) {\n return a > b ? -1 : a === b ? 0 : 1;\n}\n","import { WhereClause } from './where-clause';\nimport { Collection } from '../collection';\nimport { STRING_EXPECTED } from '../../globals/constants';\nimport { simpleCompare, simpleCompareReverse } from '../../functions/compare-functions';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange, DBCoreRangeType } from '../../public/types/dbcore';\n\nexport function fail(collectionOrWhereClause: Collection | WhereClause, err, T?) {\n var collection = collectionOrWhereClause instanceof WhereClause ?\n new collectionOrWhereClause.Collection (collectionOrWhereClause) :\n collectionOrWhereClause;\n \n collection._ctx.error = T ? new T(err) : new TypeError(err);\n return collection;\n}\n\nexport function emptyCollection(whereClause: WhereClause) {\n return new whereClause.Collection (whereClause, () => rangeEqual(\"\")).limit(0);\n}\n\nexport function upperFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toUpperCase() :\n (s: string) => s.toLowerCase();\n}\n\nexport function lowerFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toLowerCase() :\n (s: string) => s.toUpperCase();\n}\n\nexport function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n var length = Math.min(key.length, lowerNeedle.length);\n var llp = -1;\n for (var i = 0; i < length; ++i) {\n var lwrKeyChar = lowerKey[i];\n if (lwrKeyChar !== lowerNeedle[i]) {\n if (cmp(key[i], upperNeedle[i]) < 0) return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n if (cmp(key[i], lowerNeedle[i]) < 0) return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n if (llp >= 0) return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n return null;\n }\n if (cmp(key[i], lwrKeyChar) < 0) llp = i;\n }\n if (length < lowerNeedle.length && dir === \"next\") return key + upperNeedle.substr(key.length);\n if (length < key.length && dir === \"prev\") return key.substr(0, upperNeedle.length);\n return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));\n}\n\nexport function addIgnoreCaseAlgorithm(whereClause: WhereClause, match, needles, suffix) {\n /// \n var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix,\n needlesLen = needles.length;\n if (!needles.every(s => typeof s === 'string')) {\n return fail(whereClause, STRING_EXPECTED);\n }\n function initDirection(dir) {\n upper = upperFactory(dir);\n lower = lowerFactory(dir);\n compare = (dir === \"next\" ? simpleCompare : simpleCompareReverse);\n var needleBounds = needles.map(function (needle){\n return {lower: lower(needle), upper: upper(needle)};\n }).sort(function(a,b) {\n return compare(a.lower, b.lower);\n });\n upperNeedles = needleBounds.map(function (nb){ return nb.upper; });\n lowerNeedles = needleBounds.map(function (nb){ return nb.lower; });\n direction = dir;\n nextKeySuffix = (dir === \"next\" ? \"\" : suffix);\n }\n initDirection(\"next\");\n\n var c = new whereClause.Collection (\n whereClause,\n ()=>createRange(upperNeedles[0], lowerNeedles[needlesLen-1] + suffix)\n );\n\n c._ondirectionchange = function (direction) {\n // This event onlys occur before filter is called the first time.\n initDirection(direction);\n };\n\n var firstPossibleNeedle = 0;\n\n c._addAlgorithm(function (cursor, advance, resolve) {\n /// \n /// \n /// \n var key = cursor.key;\n if (typeof key !== 'string') return false;\n var lowerKey = lower(key);\n if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n return true;\n } else {\n var lowestPossibleCasing = null;\n for (var i=firstPossibleNeedle; i 0) {\n lowestPossibleCasing = casing;\n }\n }\n if (lowestPossibleCasing !== null) {\n advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });\n } else {\n advance(resolve);\n }\n return false;\n }\n });\n return c;\n}\n\nexport function createRange (lower: IndexableType, upper: IndexableType, lowerOpen?: boolean, upperOpen?: boolean): DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Range,\n lower,\n upper,\n lowerOpen,\n upperOpen\n };\n}\n\nexport function rangeEqual (value: IndexableType) : DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Equal,\n lower: value,\n upper: value\n };\n}\n","import { WhereClause as IWhereClause } from \"../../public/types/where-clause\";\nimport { Collection } from \"../collection\";\nimport { Table } from \"../table\";\nimport { IndexableType } from \"../../public/types/indexable-type\";\nimport { emptyCollection, fail, addIgnoreCaseAlgorithm, createRange, rangeEqual } from './where-clause-helpers';\nimport { INVALID_KEY_ARGUMENT, STRING_EXPECTED, maxString, minKey } from '../../globals/constants';\nimport { getArrayOf, NO_CHAR_ARRAY } from '../../functions/utils';\nimport { exceptions } from '../../errors';\nimport { Dexie } from '../dexie';\nimport { Collection as ICollection} from \"../../public/types/collection\";\n\n/** class WhereClause\n * \n * https://dexie.org/docs/WhereClause/WhereClause\n */\nexport class WhereClause implements IWhereClause {\n db: Dexie;\n _IDBKeyRange: typeof IDBKeyRange;\n _ctx: {\n table: Table;\n index: string;\n or: Collection;\n }\n _cmp: (a: IndexableType, b: IndexableType) => number;\n _ascending: (a: IndexableType, b: IndexableType) => number;\n _descending: (a: IndexableType, b: IndexableType) => number;\n _min: (a: IndexableType, b: IndexableType) => IndexableType;\n _max: (a: IndexableType, b: IndexableType) => IndexableType;\n\n get Collection() {\n return this._ctx.table.db.Collection;\n }\n\n /** WhereClause.between()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.between()\n * \n **/\n between(lower: IndexableType, upper: IndexableType, includeLower?: boolean, includeUpper?: boolean) {\n includeLower = includeLower !== false; // Default to true\n includeUpper = includeUpper === true; // Default to false\n try {\n if ((this._cmp(lower, upper) > 0) ||\n (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))\n return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection.\n return new this.Collection(this, ()=>createRange(lower, upper, !includeLower, !includeUpper));\n } catch (e) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n }\n\n /** WhereClause.equals()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equals()\n * \n **/\n equals(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => rangeEqual(value)) as ICollection;\n }\n\n /** WhereClause.above()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.above()\n * \n **/\n above(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, true));\n }\n\n /** WhereClause.aboveOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.aboveOrEqual()\n * \n **/\n aboveOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, false));\n }\n\n /** WhereClause.below()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.below()\n * \n **/\n below(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value, false, true));\n }\n\n /** WhereClause.belowOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.belowOrEqual()\n * \n **/\n belowOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value));\n }\n\n /** WhereClause.startsWith()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWith()\n * \n **/\n startsWith(str: string) {\n if (typeof str !== 'string') return fail(this, STRING_EXPECTED);\n return this.between(str, str + maxString, true, true);\n }\n\n /** WhereClause.startsWithIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithIgnoreCase()\n * \n **/\n startsWithIgnoreCase(str: string) {\n if (str === \"\") return this.startsWith(str);\n return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString);\n }\n\n /** WhereClause.equalsIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equalsIgnoreCase()\n * \n **/\n equalsIgnoreCase(str: string) {\n return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], \"\");\n }\n\n /** WhereClause.anyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOfIgnoreCase()\n * \n **/\n anyOfIgnoreCase(...values: string[]): Collection;\n anyOfIgnoreCase(values: string[]): Collection;\n anyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, \"\");\n }\n\n /** WhereClause.startsWithAnyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOfIgnoreCase()\n * \n **/\n startsWithAnyOfIgnoreCase(...values: string[]): Collection;\n startsWithAnyOfIgnoreCase(values: string[]): Collection;\n startsWithAnyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString);\n }\n\n /** WhereClause.anyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOf()\n * \n **/\n anyOf(...values: string[]): Collection;\n anyOf(values: string[]): Collection;\n anyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n let compare = this._cmp;\n try { set.sort(compare); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n if (set.length === 0) return emptyCollection(this);\n const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1]));\n\n c._ondirectionchange = direction => {\n compare = (direction === \"next\" ?\n this._ascending :\n this._descending);\n set.sort(compare);\n };\n\n let i = 0;\n c._addAlgorithm((cursor, advance, resolve) => {\n const key = cursor.key;\n while (compare(key, set[i]) > 0) {\n // The cursor has passed beyond this key. Check next.\n ++i;\n if (i === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (compare(key, set[i]) === 0) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => { cursor.continue(set[i]); });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.notEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.notEqual()\n * \n **/\n notEqual(value: IndexableType) {\n return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.noneOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.noneOf()\n * \n **/\n noneOf(...values: string[]): Collection;\n noneOf(values: string[]): Collection;\n noneOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return new this.Collection(this); // Return entire collection.\n try { set.sort(this._ascending); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n // Transform [\"a\",\"b\",\"c\"] to a set of ranges for between/above/below: [[minKey,\"a\"], [\"a\",\"b\"], [\"b\",\"c\"], [\"c\",maxKey]]\n const ranges = set.reduce(\n (res, val) => res ?\n res.concat([[res[res.length - 1][1], val]]) :\n [[minKey, val]],\n null);\n ranges.push([set[set.length - 1], this.db._maxKey]);\n return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.inAnyRange()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.inAnyRange()\n * \n **/\n inAnyRange(\n ranges: ReadonlyArray<{ 0: IndexableType, 1: IndexableType }>,\n options?: { includeLowers?: boolean, includeUppers?: boolean })\n {\n const cmp = this._cmp,\n ascending = this._ascending,\n descending = this._descending,\n min = this._min,\n max = this._max;\n\n if (ranges.length === 0) return emptyCollection(this);\n if (!ranges.every(range =>\n range[0] !== undefined &&\n range[1] !== undefined &&\n ascending(range[0], range[1]) <= 0)) {\n return fail(\n this,\n \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\",\n exceptions.InvalidArgument);\n }\n const includeLowers = !options || options.includeLowers !== false; // Default to true\n const includeUppers = options && options.includeUppers === true; // Default to false\n\n function addRange(ranges, newRange) {\n let i = 0, l = ranges.length;\n for (; i < l; ++i) {\n const range = ranges[i];\n if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n range[0] = min(range[0], newRange[0]);\n range[1] = max(range[1], newRange[1]);\n break;\n }\n }\n if (i === l)\n ranges.push(newRange);\n return ranges;\n }\n\n let sortDirection = ascending;\n function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n\n // Join overlapping ranges\n let set;\n try {\n set = ranges.reduce(addRange, []);\n set.sort(rangeSorter);\n } catch (ex) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n\n let rangePos = 0;\n const keyIsBeyondCurrentEntry = includeUppers ?\n key => ascending(key, set[rangePos][1]) > 0 :\n key => ascending(key, set[rangePos][1]) >= 0;\n\n const keyIsBeforeCurrentEntry = includeLowers ?\n key => descending(key, set[rangePos][0]) > 0 :\n key => descending(key, set[rangePos][0]) >= 0;\n\n function keyWithinCurrentRange(key) {\n return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n }\n\n let checkKey = keyIsBeyondCurrentEntry;\n\n const c = new this.Collection(\n this,\n () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers));\n\n c._ondirectionchange = direction => {\n if (direction === \"next\") {\n checkKey = keyIsBeyondCurrentEntry;\n sortDirection = ascending;\n } else {\n checkKey = keyIsBeforeCurrentEntry;\n sortDirection = descending;\n }\n set.sort(rangeSorter);\n };\n\n c._addAlgorithm((cursor, advance, resolve) => {\n var key = cursor.key;\n while (checkKey(key)) {\n // The cursor has passed beyond this key. Check next.\n ++rangePos;\n if (rangePos === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (keyWithinCurrentRange(key)) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) {\n // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border.\n // Continue to next key but don't include this one.\n return false;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => {\n if (sortDirection === ascending) cursor.continue(set[rangePos][0]);\n else cursor.continue(set[rangePos][1]);\n });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.startsWithAnyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOf()\n * \n **/\n startsWithAnyOf(...prefixes: string[]): Collection;\n startsWithAnyOf(prefixes: string[]): Collection;\n startsWithAnyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n\n if (!set.every(s => typeof s === 'string')) {\n return fail(this, \"startsWithAnyOf() only works with strings\");\n }\n if (set.length === 0) return emptyCollection(this);\n\n return this.inAnyRange(set.map((str: string) => [str, str + maxString]));\n }\n\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { WhereClause } from './where-clause';\nimport { Table } from '../table';\nimport { Collection } from '../collection';\nimport { exceptions } from '../../errors';\nimport { cmp } from '../../functions/cmp';\n\nexport interface WhereClauseConstructor {\n new(table: Table, index?: string, orCollection?: Collection): WhereClause;\n prototype: WhereClause;\n}\n\n/** Generates a WhereClause constructor.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createWhereClauseConstructor(db: Dexie) {\n return makeClassConstructor(\n WhereClause.prototype,\n\n function WhereClause(this: WhereClause, table: Table, index?: string, orCollection?: Collection) {\n this.db = db;\n this._ctx = {\n table: table,\n index: index === \":id\" ? null : index,\n or: orCollection\n };\n this._cmp = this._ascending = cmp;\n this._descending = (a, b) => cmp(b, a);\n this._max = (a, b) => cmp(a,b) > 0 ? a : b;\n this._min = (a, b) => cmp(a,b) < 0 ? a : b;\n this._IDBKeyRange = db._deps.IDBKeyRange;\n if (!this._IDBKeyRange) throw new exceptions.MissingAPI();\n }\n );\n}\n","import { wrap } from \"../helpers/promise\";\n\nexport function eventRejectHandler(reject) {\n return wrap(function (event) {\n preventDefault(event);\n reject (event.target.error);\n return false;\n });\n}\n\nexport function eventSuccessHandler (resolve) {\n return wrap(function (event){\n resolve(event.target.result);\n });\n}\n\nexport function hookedEventRejectHandler (reject) {\n return wrap(function (event) {\n // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks.\n \n var req = event.target,\n err = req.error,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n hookErrorHandler = ctx && ctx.onerror;\n hookErrorHandler && hookErrorHandler(err);\n preventDefault(event);\n reject (err);\n return false;\n });\n}\n\nexport function hookedEventSuccessHandler(resolve) {\n // wrap() is needed when calling hooks because the rare scenario of:\n // * hook does a db operation that fails immediately (IDB throws exception)\n // For calling db operations on correct transaction, wrap makes sure to set PSD correctly.\n // wrap() will also execute in a virtual tick.\n // * If not wrapped in a virtual tick, direct exception will launch a new physical tick.\n // * If this was the last event in the bulk, the promise will resolve after a physical tick\n // and the transaction will have committed already.\n // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise,\n // because it is always marked with _lib = true when created using Transaction._promise().\n return wrap(function(event) {\n var req = event.target,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key.\n hookSuccessHandler = ctx && ctx.onsuccess;\n hookSuccessHandler && hookSuccessHandler(result);\n resolve && resolve(result);\n }, resolve);\n}\n\n\nexport function preventDefault(event) {\n if (event.stopPropagation) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.stopPropagation();\n if (event.preventDefault) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.preventDefault();\n}\n\nexport function BulkErrorHandlerCatchAll(errorList, done?, supportHooks?) {\n return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(e => {\n errorList.push(e);\n done && done();\n });\n}\n\n","import Events from '../helpers/Events';\nimport { GlobalDexieEvents } from '../public/types/db-events';\n\nexport const DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated' as 'storagemutated';\n\n// Name of the global event fired using DOM dispatchEvent (if not in node).\n// Reason for propagating this as a DOM event is for getting reactivity across\n// multiple versions of Dexie within the same app (as long as they are\n// compatible with regards to the event data).\n// If the ObservabilitySet protocol change in a way that would not be backward\n// compatible, make sure also update the event name to a new number at the end\n// so that two Dexie instances of different versions continue to work together\n// - maybe not able to communicate but won't fail due to unexpected data in\n// the detail property of the CustomEvent. If so, also make sure to udpate\n// docs and explain at which Dexie version the new name and format of the event\n// is being used.\nexport const STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1';\n\nexport const globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME) as GlobalDexieEvents;\n","import { Transaction as ITransaction } from '../../public/types/transaction';\nimport { DexiePromise, wrap, rejection } from \"../../helpers/promise\";\nimport { DbSchema } from '../../public/types/db-schema';\nimport { assert, hasOwn } from '../../functions/utils';\nimport { PSD, usePSD } from '../../helpers/promise';\nimport { Dexie } from '../dexie';\nimport { exceptions } from '../../errors';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { preventDefault } from '../../functions/event-wrappers';\nimport { newScope } from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { Table } from '../table';\nimport { globalEvents } from '../../globals/global-events';\n\n/** Transaction\n * \n * https://dexie.org/docs/Transaction/Transaction\n * \n **/\nexport class Transaction implements ITransaction {\n db: Dexie;\n active: boolean;\n mode: IDBTransactionMode;\n chromeTransactionDurability: ChromeTransactionDurability;\n idbtrans: IDBTransaction;\n storeNames: string[];\n explicit?: boolean;\n on: any;\n parent?: Transaction;\n schema: DbSchema;\n _memoizedTables: {[tableName: string]: Table};\n\n _reculock: number;\n _blockedFuncs: { 0: () => any, 1: any }[];\n _resolve: () => void;\n _reject: (Error) => void;\n _waitingFor: DexiePromise; // for waitFor()\n _waitingQueue: Function[]; // for waitFor()\n _spinCount: number; // Just for debugging waitFor()\n _completion: DexiePromise;\n\n //\n // Transaction internal methods (not required by API users, but needed internally and eventually by dexie extensions)\n //\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _lock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n // Temporary set all requests into a pending queue if they are called before database is ready.\n ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage)\n if (this._reculock === 1 && !PSD.global) PSD.lockOwnerFor = this;\n return this;\n }\n\n /** Transaction._unlock()\n * \n * Internal method.\n */\n _unlock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n if (--this._reculock === 0) {\n if (!PSD.global) PSD.lockOwnerFor = null;\n while (this._blockedFuncs.length > 0 && !this._locked()) {\n var fnAndPSD = this._blockedFuncs.shift();\n try { usePSD(fnAndPSD[1], fnAndPSD[0]); } catch (e) { }\n }\n }\n return this;\n }\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _locked() {\n // Checks if any write-lock is applied on this transaction.\n // To simplify the Dexie API for extension implementations, we support recursive locks.\n // This is accomplished by using \"Promise Specific Data\" (PSD).\n // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ).\n // PSD is local to code executing on top of the call stacks of any of any code executed by Promise():\n // * callback given to the Promise() constructor (function (resolve, reject){...})\n // * callbacks given to then()/catch()/finally() methods (function (value){...})\n // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise.\n // Derivation is done so that the inner PSD __proto__ points to the outer PSD.\n // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock.\n return this._reculock && PSD.lockOwnerFor !== this;\n }\n\n /** Transaction.create()\n * \n * Internal method.\n * \n */\n create(idbtrans?: IDBTransaction & {[prop: string]: any}) {\n if (!this.mode) return this;\n const idbdb = this.db.idbdb;\n const dbOpenError = this.db._state.dbOpenError;\n assert(!this.idbtrans);\n if (!idbtrans && !idbdb) {\n switch (dbOpenError && dbOpenError.name) {\n case \"DatabaseClosedError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.DatabaseClosed(dbOpenError);\n case \"MissingAPIError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n default:\n // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()!\n throw new exceptions.OpenFailed(dbOpenError);\n }\n }\n if (!this.active) throw new exceptions.TransactionInactive();\n assert(this._completion._state === null); // Completion Promise must still be pending.\n\n idbtrans = this.idbtrans = idbtrans ||\n (this.db.core \n ? this.db.core.transaction(this.storeNames, this.mode as 'readwrite' | 'readonly', { durability: this.chromeTransactionDurability })\n : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })\n ) as IDBTransaction;\n\n idbtrans.onerror = wrap(ev => {\n preventDefault(ev);// Prohibit default bubbling to window.error\n this._reject(idbtrans.error);\n });\n idbtrans.onabort = wrap(ev => {\n preventDefault(ev);\n this.active && this._reject(new exceptions.Abort(idbtrans.error));\n this.active = false;\n this.on(\"abort\").fire(ev);\n });\n idbtrans.oncomplete = wrap(() => {\n this.active = false;\n this._resolve();\n if ('mutatedParts' in idbtrans) {\n globalEvents.storagemutated.fire(idbtrans[\"mutatedParts\"]);\n }\n });\n return this;\n }\n\n /** Transaction._promise()\n * \n * Internal method.\n */\n _promise(\n mode: IDBTransactionMode,\n fn: (resolve, reject, trans: Transaction) => PromiseLike | void,\n bWriteLock?: string | boolean): DexiePromise\n {\n if (mode === 'readwrite' && this.mode !== 'readwrite')\n return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n\n if (!this.active)\n return rejection(new exceptions.TransactionInactive());\n\n if (this._locked()) {\n return new DexiePromise((resolve, reject) => {\n this._blockedFuncs.push([() => {\n this._promise(mode, fn, bWriteLock).then(resolve, reject);\n }, PSD]);\n });\n\n } else if (bWriteLock) {\n return newScope(() => {\n var p = new DexiePromise((resolve, reject) => {\n this._lock();\n const rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p.finally(() => this._unlock());\n p._lib = true;\n return p;\n });\n\n } else {\n var p = new DexiePromise((resolve, reject) => {\n var rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p._lib = true;\n return p;\n }\n }\n\n /** Transaction._root()\n * \n * Internal method. Retrieves the root transaction in the tree of sub transactions.\n */\n _root() {\n return this.parent ? this.parent._root() : this;\n }\n\n /** Transaction.waitFor()\n * \n * Internal method. Can be accessed from the public API through\n * Dexie.waitFor(): https://dexie.org/docs/Dexie/Dexie.waitFor()\n * \n **/\n waitFor(promiseLike: PromiseLike) {\n // Always operate on the root transaction (in case this is a sub stransaction)\n var root = this._root();\n // For stability reasons, convert parameter to promise no matter what type is passed to waitFor().\n // (We must be able to call .then() on it.)\n const promise = DexiePromise.resolve(promiseLike);\n if (root._waitingFor) {\n // Already called waitFor(). Wait for both to complete.\n root._waitingFor = root._waitingFor.then(() => promise);\n } else {\n // We're not in waiting state. Start waiting state.\n root._waitingFor = promise;\n root._waitingQueue = [];\n // Start interacting with indexedDB until promise completes:\n var store = root.idbtrans.objectStore(root.storeNames[0]);\n (function spin() {\n ++root._spinCount; // For debugging only\n while (root._waitingQueue.length) (root._waitingQueue.shift())();\n if (root._waitingFor) store.get(-Infinity).onsuccess = spin;\n }());\n }\n var currentWaitPromise = root._waitingFor;\n return new DexiePromise((resolve, reject) => {\n promise.then(\n res => root._waitingQueue.push(wrap(resolve.bind(null, res))),\n err => root._waitingQueue.push(wrap(reject.bind(null, err)))\n ).finally(() => {\n if (root._waitingFor === currentWaitPromise) {\n // No one added a wait after us. Safe to stop the spinning.\n root._waitingFor = null;\n }\n });\n });\n } \n\n /** Transaction.abort()\n * \n * https://dexie.org/docs/Transaction/Transaction.abort()\n */\n abort() {\n if (this.active) {\n this.active = false;\n if (this.idbtrans) this.idbtrans.abort();\n this._reject(new exceptions.Abort());\n }\n }\n\n /** Transaction.table()\n * \n * https://dexie.org/docs/Transaction/Transaction.table()\n */\n table(tableName: string) {\n const memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n if (hasOwn(memoizedTables, tableName))\n return memoizedTables[tableName];\n const tableSchema = this.schema[tableName];\n if (!tableSchema) {\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\"); \n }\n\n const transactionBoundTable = new this.db.Table(tableName, tableSchema, this);\n transactionBoundTable.core = this.db.core.table(tableName);\n memoizedTables[tableName] = transactionBoundTable;\n return transactionBoundTable;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Transaction } from './transaction';\nimport { DbSchema } from '../../public/types/db-schema';\nimport Events from '../../helpers/Events';\nimport Promise, { rejection } from '../../helpers/promise';\n\nexport interface TransactionConstructor {\n new (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction) : T;\n prototype: T;\n}\n\n/** Generates a Transaction constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTransactionConstructor(db: Dexie) {\n return makeClassConstructor>(\n Transaction.prototype,\n function Transaction (\n this: Transaction,\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction)\n {\n this.db = db;\n this.mode = mode;\n this.storeNames = storeNames;\n this.schema = dbschema;\n this.chromeTransactionDurability = chromeTransactionDurability;\n this.idbtrans = null;\n this.on = Events(this, \"complete\", \"error\", \"abort\");\n this.parent = parent || null;\n this.active = true;\n this._reculock = 0;\n this._blockedFuncs = [];\n this._resolve = null;\n this._reject = null;\n this._waitingFor = null;\n this._waitingQueue = null;\n this._spinCount = 0; // Just for debugging waitFor()\n this._completion = new Promise ((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n \n this._completion.then(\n ()=> {\n this.active = false;\n this.on.complete.fire();\n },\n e => {\n var wasActive = this.active;\n this.active = false;\n this.on.error.fire(e);\n this.parent ?\n this.parent._reject(e) :\n wasActive && this.idbtrans && this.idbtrans.abort();\n return rejection(e); // Indicate we actually DO NOT catch this error.\n });\n \n });\n}\n","import { IndexSpec } from '../public/types/index-spec';\n\nexport function createIndexSpec(\n name: string,\n keyPath: string | string[],\n unique: boolean,\n multi: boolean,\n auto: boolean,\n compound: boolean,\n isPrimKey: boolean\n): IndexSpec {\n return {\n name,\n keyPath,\n unique,\n multi,\n auto,\n compound,\n src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + nameFromKeyPath(keyPath)\n }\n}\n\nexport function nameFromKeyPath (keyPath?: string | string[]): string {\n return typeof keyPath === 'string' ?\n keyPath :\n keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : \"\";\n}\n","import { IndexSpec } from '../public/types/index-spec';\nimport { TableSchema } from '../public/types/table-schema';\nimport { createIndexSpec } from './index-spec';\nimport { arrayToObject } from '../functions/utils';\n\nexport function createTableSchema (\n name: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n): TableSchema {\n return {\n name,\n primKey,\n indexes,\n mappedClass: null,\n idxByName: arrayToObject(indexes, index => [index.name, index])\n };\n}\n","import { maxString } from '../globals/constants';\n\nexport function safariMultiStoreFix(storeNames: string[]) {\n return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\n\nexport function getNativeGetDatabaseNamesFn(indexedDB) {\n var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n return fn && fn.bind(indexedDB);\n}\n\nexport let getMaxKey = (IdbKeyRange: typeof IDBKeyRange) => {\n try {\n IdbKeyRange.only([[]]);\n getMaxKey = () => [[]];\n return [[]];\n } catch (e) {\n getMaxKey = () => maxString;\n return maxString;\n }\n}\n","import { getByKeyPath } from '../functions/utils';\n\nexport function getKeyExtractor (keyPath: null | string | string[]) : (a: any) => any {\n if (keyPath == null) {\n return () => undefined;\n } else if (typeof keyPath === 'string') {\n return getSinglePathKeyExtractor(keyPath);\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n\nexport function getSinglePathKeyExtractor(keyPath: string) {\n const split = keyPath.split('.');\n if (split.length === 1) {\n return obj => obj[keyPath];\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n","import {\n DBCore,\n DBCoreCursor,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryResponse,\n DBCoreRangeType,\n DBCoreSchema,\n DBCoreTableSchema,\n DBCoreTable,\n DBCoreMutateResponse,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { eventRejectHandler, preventDefault } from '../functions/event-wrappers';\nimport { wrap } from '../helpers/promise';\nimport { getMaxKey } from '../functions/quirks';\nimport { getKeyExtractor } from './get-key-extractor';\n\nexport function arrayify(arrayLike: {length: number, [index: number]: T}): T[] {\n return [].slice.call(arrayLike);\n}\nexport function pick(obj: T, props: Prop[]): Pick {\n const result = {} as Pick;\n props.forEach(prop => result[prop] = obj[prop]);\n return result;\n}\n\nlet _id_counter = 0;\n\nexport function getKeyPathAlias(keyPath: null | string | string[]) {\n return keyPath == null ?\n \":id\" :\n typeof keyPath === 'string' ?\n keyPath :\n `[${keyPath.join('+')}]`;\n}\n\nexport function createDBCore (\n db: IDBDatabase,\n IdbKeyRange: typeof IDBKeyRange,\n tmpTrans: IDBTransaction) : DBCore\n{\n function extractSchema(db: IDBDatabase, trans: IDBTransaction) : {schema: DBCoreSchema, hasGetAll: boolean} {\n const tables = arrayify(db.objectStoreNames);\n return {\n schema: {\n name: db.name,\n tables: tables.map(table => trans.objectStore(table)).map(store => {\n const {keyPath, autoIncrement} = store;\n const compound = isArray(keyPath);\n const outbound = keyPath == null;\n const indexByKeyPath: {[keyPathAlias: string]: DBCoreIndex} = {};\n const result = {\n name: store.name,\n primaryKey: {\n name: null,\n isPrimaryKey: true,\n outbound,\n compound,\n keyPath,\n autoIncrement,\n unique: true,\n extractKey: getKeyExtractor(keyPath)\n } as DBCoreIndex,\n indexes: arrayify(store.indexNames).map(indexName => store.index(indexName))\n .map(index => {\n const {name, unique, multiEntry, keyPath} = index;\n const compound = isArray(keyPath);\n const result: DBCoreIndex = {\n name,\n compound,\n keyPath,\n unique,\n multiEntry,\n extractKey: getKeyExtractor(keyPath)\n };\n indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n return result;\n }),\n getIndexByKeyPath: (keyPath: null | string | string[]) => indexByKeyPath[getKeyPathAlias(keyPath)]\n };\n indexByKeyPath[\":id\"] = result.primaryKey;\n if (keyPath != null) {\n indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;\n }\n return result;\n })\n },\n hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&\n !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) // Bug with getAll() on Safari ver<604. See discussion following PR #579\n };\n }\n\n function makeIDBKeyRange (range: DBCoreKeyRange) : IDBKeyRange | null {\n if (range.type === DBCoreRangeType.Any) return null;\n if (range.type === DBCoreRangeType.Never) throw new Error(\"Cannot convert never type to IDBKeyRange\");\n const {lower, upper, lowerOpen, upperOpen} = range;\n const idbRange = lower === undefined ?\n upper === undefined ?\n null : //IDBKeyRange.lowerBound(-Infinity, false) : // Any range (TODO: Should we return null instead?)\n IdbKeyRange.upperBound(upper, !!upperOpen) : // below\n upper === undefined ?\n IdbKeyRange.lowerBound(lower, !!lowerOpen) : // above\n IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);\n return idbRange;\n }\n\n function createDbCoreTable(tableSchema: DBCoreTableSchema): DBCoreTable {\n const tableName = tableSchema.name;\n\n function mutate ({trans, type, keys, values, range}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const outbound = store.keyPath == null;\n const isAddOrPut = type === \"put\" || type === \"add\";\n if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n throw new Error (\"Invalid operation type: \" + type);\n\n const {length} = keys || values || {length: 1}; // keys.length if keys. values.length if values. 1 if range.\n if (keys && values && keys.length !== values.length) {\n throw new Error(\"Given keys array must have same length as given values array.\");\n }\n if (length === 0)\n // No items to write. Don't even bother!\n return resolve({numFailures: 0, failures: {}, results: [], lastResult: undefined});\n\n let req: IDBRequest;\n const reqs: IDBRequest[] = [];\n \n const failures: {[operationNumber: number]: Error} = [];\n let numFailures = 0;\n const errorHandler = \n event => {\n ++numFailures;\n preventDefault(event);\n };\n \n if (type === 'deleteRange') {\n // Here the argument is the range\n if (range.type === DBCoreRangeType.Never)\n return resolve({numFailures, failures, results: [], lastResult: undefined}); // Deleting the Never range shoulnt do anything.\n if (range.type === DBCoreRangeType.Any)\n reqs.push(req = store.clear()); // Deleting the Any range is equivalent to store.clear()\n else\n reqs.push(req = store.delete(makeIDBKeyRange(range)));\n } else {\n // No matter add, put or delete - find out arrays of first and second arguments to it.\n const [args1, args2] = isAddOrPut ?\n outbound ?\n [values, keys] :\n [values, null] :\n [keys, null];\n\n if (isAddOrPut) {\n for (let i=0; i {\n const lastResult = event.target.result;\n reqs.forEach((req, i) => req.error != null && (failures[i] = req.error));\n resolve({\n numFailures,\n failures,\n results: type === \"delete\" ? keys : reqs.map(req => req.result),\n lastResult\n });\n };\n \n req.onerror = event => { // wrap() not needed. All paths calling outside will wrap!\n errorHandler(event);\n done(event);\n };\n \n req.onsuccess = done;\n });\n }\n \n function openCursor ({trans, values, query, reverse, unique}: DBCoreOpenCursorRequest): Promise\n {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n // source\n const source = index.isPrimaryKey ?\n store :\n store.index(index.name);\n // direction\n const direction = reverse ?\n unique ?\n \"prevunique\" :\n \"prev\" :\n unique ?\n \"nextunique\" :\n \"next\";\n // request\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(makeIDBKeyRange(range), direction) :\n source.openKeyCursor(makeIDBKeyRange(range), direction);\n \n // iteration\n req.onerror = eventRejectHandler(reject);\n req.onsuccess = wrap(ev => {\n\n const cursor = req.result as unknown as DBCoreCursor;\n if (!cursor) {\n resolve(null);\n return;\n }\n (cursor as any).___id = ++_id_counter;\n (cursor as any).done = false;\n const _cursorContinue = cursor.continue.bind(cursor);\n let _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n if (_cursorContinuePrimaryKey) _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n const _cursorAdvance = cursor.advance.bind(cursor);\n const doThrowCursorIsNotStarted = ()=>{throw new Error(\"Cursor not started\");}\n const doThrowCursorIsStopped = ()=>{throw new Error(\"Cursor not stopped\");}\n (cursor as any).trans = trans;\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;\n cursor.fail = wrap(reject);\n cursor.next = function (this: DBCoreCursor) {\n // next() must work with \"this\" pointer in order to function correctly for ProxyCursors (derived objects)\n // without having to re-define next() on each child.\n let gotOne = 1;\n return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this);\n };\n cursor.start = (callback) => {\n //console.log(\"Starting cursor\", (cursor as any).___id);\n const iterationPromise = new Promise((resolveIteration, rejectIteration) =>{\n resolveIteration = wrap(resolveIteration);\n req.onerror = eventRejectHandler(rejectIteration);\n cursor.fail = rejectIteration;\n cursor.stop = value => {\n //console.log(\"Cursor stop\", cursor);\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n resolveIteration(value);\n };\n });\n // Now change req.onsuccess to a callback that doesn't call initCursor but just observer.next()\n const guardedCallback = () => {\n if (req.result) {\n //console.log(\"Next result\", cursor);\n try {\n callback();\n } catch (err) {\n cursor.fail(err);\n }\n } else {\n (cursor as any).done = true;\n cursor.start = ()=>{throw new Error(\"Cursor behind last entry\");}\n cursor.stop();\n }\n }\n req.onsuccess = wrap(ev => {\n //cursor.continue = _cursorContinue;\n //cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n //cursor.advance = _cursorAdvance;\n req.onsuccess = guardedCallback;\n guardedCallback();\n });\n cursor.continue = _cursorContinue;\n cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n cursor.advance = _cursorAdvance;\n guardedCallback();\n return iterationPromise;\n };\n resolve(cursor);\n }, reject); \n });\n }\n \n function query (hasGetAll: boolean) {\n return (request: DBCoreQueryRequest) => {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {trans, values, limit, query} = request;\n const nonInfinitLimit = limit === Infinity ? undefined : limit;\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n if (limit === 0) return resolve({result: []});\n if (hasGetAll) {\n const req = values ?\n (source as any).getAll(idbKeyRange, nonInfinitLimit) :\n (source as any).getAllKeys(idbKeyRange, nonInfinitLimit);\n req.onsuccess = event => resolve({result: event.target.result});\n req.onerror = eventRejectHandler(reject);\n } else {\n let count = 0;\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(idbKeyRange) :\n source.openKeyCursor(idbKeyRange)\n const result = [];\n req.onsuccess = event => {\n const cursor = req.result as IDBCursorWithValue;\n if (!cursor) return resolve({result});\n result.push(values ? cursor.value : cursor.primaryKey);\n if (++count === limit) return resolve({result});\n cursor.continue();\n };\n req.onerror = eventRejectHandler(reject);\n }\n });\n };\n }\n \n return {\n name: tableName,\n schema: tableSchema,\n \n mutate,\n\n getMany ({trans, keys}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const length = keys.length;\n const result = new Array(length);\n let keyCount = 0;\n let callbackCount = 0;\n let valueCount = 0;\n let req: IDBRequest & {_pos?: number};\n \n const successHandler = event => {\n const req = event.target;\n if ((result[req._pos] = req.result) != null) ++valueCount;\n if (++callbackCount === keyCount) resolve(result);\n };\n const errorHandler = eventRejectHandler(reject);\n \n for (let i=0; i((resolve, reject) => {\n resolve = wrap (resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const req = store.get(key);\n req.onsuccess = event => resolve((event.target as any).result);\n req.onerror = eventRejectHandler(reject);\n });\n },\n\n query: query(hasGetAll),\n \n openCursor,\n\n count ({query, trans}) {\n const {index, range} = query;\n return new Promise((resolve, reject) => {\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n const req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n req.onsuccess = wrap(ev => resolve((ev.target as IDBRequest).result));\n req.onerror = eventRejectHandler(reject);\n });\n }\n };\n }\n\n const {schema, hasGetAll} = extractSchema(db, tmpTrans);\n const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema));\n const tableMap: {[name: string]: DBCoreTable} = {};\n tables.forEach(table => tableMap[table.name] = table);\n return {\n stack: \"dbcore\",\n \n transaction: db.transaction.bind(db),\n\n table(name: string) {\n const result = tableMap[name];\n if (!result) throw new Error(`Table '${name}' not found`);\n return tableMap[name];\n },\n\n MIN_KEY: -Infinity,\n\n MAX_KEY: getMaxKey(IdbKeyRange),\n\n schema\n\n };\n}\n","import { Dexie } from './';\nimport { createDBCore } from '../../dbcore/dbcore-indexeddb';\nimport { DBCore } from '../../public/types/dbcore';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { DexieStacks, Middleware } from '../../public/types/middleware';\nimport { exceptions } from '../../errors';\n\nfunction createMiddlewareStack(\n stackImpl: {stack: string},\n middlewares: Middleware<{stack: string}>[]): TStack {\n return middlewares.reduce((down, {create}) => ({...down, ...create(down)}), stackImpl) as TStack;\n} \n\nfunction createMiddlewareStacks(\n middlewares: {[StackName in keyof DexieStacks]?: Middleware[]},\n idbdb: IDBDatabase,\n {IDBKeyRange, indexedDB}: DexieDOMDependencies,\n tmpTrans: IDBTransaction): {[StackName in keyof DexieStacks]?: DexieStacks[StackName]}\n{\n const dbcore = createMiddlewareStack(\n createDBCore(idbdb, IDBKeyRange, tmpTrans),\n middlewares.dbcore);\n \n // TODO: Create other stacks the same way as above. They might be dependant on the result\n // of creating dbcore stack.\n\n return {\n dbcore\n };\n}\n\nexport function generateMiddlewareStacks(db: Dexie, tmpTrans: IDBTransaction) {\n const idbdb = tmpTrans.db;\n const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n db.core = stacks.dbcore!;\n db.tables.forEach(table => {\n const tableName = table.name;\n if (db.core.schema.tables.some(tbl => tbl.name === tableName)) {\n table.core = db.core.table(tableName);\n if (db[tableName] instanceof db.Table) {\n db[tableName].core = table.core;\n }\n }\n });\n}\n","import { Dexie } from '../dexie';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { _global } from \"../../globals/global\";\nimport { setProp, keys, slice, isArray, shallowClone, isAsyncFunction, defineProperty, getPropertyDescriptor } from '../../functions/utils';\nimport { Transaction } from '../transaction';\nimport { Version } from './version';\nimport Promise, { PSD, newScope, NativePromise, decrementExpectedAwaits, incrementExpectedAwaits } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { IndexSpec } from '../../public/types/index-spec';\nimport { createIndexSpec, nameFromKeyPath } from '../../helpers/index-spec';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { generateMiddlewareStacks } from '../dexie/generate-middleware-stacks';\nimport { debug } from '../../helpers/debug';\nimport { PromiseExtended } from '../../public/types/promise-extended';\n\nexport function setApiOnPlace(db: Dexie, objs: Object[], tableNames: string[], dbschema: DbSchema) {\n tableNames.forEach(tableName => {\n const schema = dbschema[tableName];\n objs.forEach(obj => {\n const propDesc = getPropertyDescriptor(obj, tableName);\n if (!propDesc || (\"value\" in propDesc && propDesc.value === undefined)) {\n // Either the prop is not declared, or it is initialized to undefined.\n if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n // obj is a Transaction prototype (or prototype of a subclass to Transaction)\n // Make the API a getter that returns this.table(tableName)\n setProp(obj, tableName, {\n get(this: Transaction) { return this.table(tableName); },\n set(value: any) {\n // Issue #1039\n // Let \"this.schema = dbschema;\" and other props in transaction constructor work even if there's a name collision with the table name.\n defineProperty(this, tableName, {value, writable: true, configurable: true, enumerable: true});\n }\n });\n } else {\n // Table will not be bound to a transaction (will use Dexie.currentTransaction)\n obj[tableName] = new db.Table(tableName, schema);\n }\n }\n });\n });\n}\n\nexport function removeTablesApi(db: Dexie, objs: Object[]) {\n objs.forEach(obj => {\n for (let key in obj) {\n if (obj[key] instanceof db.Table) delete obj[key];\n }\n });\n}\n\nexport function lowerVersionFirst(a: Version, b: Version) {\n return a._cfg.version - b._cfg.version;\n}\n\nexport function runUpgraders(db: Dexie, oldVersion: number, idbUpgradeTrans: IDBTransaction, reject) {\n const globalSchema = db._dbSchema;\n if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) {\n globalSchema.$meta = createTableSchema(\"$meta\", parseIndexSyntax(\"\")[0], []);\n db._storeNames.push('$meta');\n }\n const trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n trans.create(idbUpgradeTrans);\n trans._completion.catch(reject);\n const rejectTransaction = trans._reject.bind(trans);\n const transless = PSD.transless || PSD;\n newScope(() => {\n PSD.trans = trans;\n PSD.transless = transless;\n if (oldVersion === 0) {\n // Create tables:\n keys(globalSchema).forEach(tableName => {\n createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n });\n generateMiddlewareStacks(db, idbUpgradeTrans);\n Promise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction);\n } else {\n generateMiddlewareStacks(db, idbUpgradeTrans);\n return getExistingVersion(db, trans, oldVersion)\n .then(oldVersion => updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans))\n .catch(rejectTransaction);\n }\n });\n}\n\nexport type UpgradeQueueItem = (idbtrans: IDBTransaction) => PromiseLike | void;\n\nexport function patchCurrentVersion(db: Dexie, idbUpgradeTrans: IDBTransaction) {\n createMissingTables(db._dbSchema, idbUpgradeTrans);\n if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) {\n // Rolled over to the next 10-ies due to many schema upgrades without bumping version.\n // No problem! We pin the database to its expected version by adding the $meta table so that next\n // time the programmer bumps the version and attaches, an upgrader, that upgrader will indeed run,\n // as well any further upgraders coming after that.\n idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version');\n }\n const globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans);\n const diff = getSchemaDiff(globalSchema, db._dbSchema);\n for (const tableChange of diff.change) {\n if (tableChange.change.length || tableChange.recreate) {\n console.warn(`Unable to patch indexes of table ${tableChange.name} because it has changes on the type of index or primary key.`);\n return;\n }\n const store = idbUpgradeTrans.objectStore(tableChange.name);\n tableChange.add.forEach(idx => {\n if (debug) console.debug(`Dexie upgrade patch: Creating missing index ${tableChange.name}.${idx.src}`);\n addIndex(store, idx);\n });\n }\n}\n\nfunction getExistingVersion(db: Dexie, trans: Transaction, oldVersion: number): PromiseExtended {\n // In normal case, existing version is the native installed version divided by 10.\n // However, in case more than 10 schema changes have been made on the same version (such as while\n // developing an app), the native version may have passed beyond a multiple of 10 within the same version.\n // When that happens, a table $meta will have been created, containing a single entry with key \"version\"\n // and the value of the real old version to use when running upgraders going forward.\n if (trans.storeNames.includes('$meta')) {\n return trans.table('$meta').get('version').then(metaVersion => {\n return metaVersion != null ? metaVersion : oldVersion\n })\n } else {\n return Promise.resolve(oldVersion);\n }\n}\n\nfunction updateTablesAndIndexes(\n db: Dexie,\n oldVersion: number,\n trans: Transaction,\n idbUpgradeTrans: IDBTransaction)\n{\n // Upgrade version to version, step-by-step from oldest to newest version.\n // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version)\n const queue: UpgradeQueueItem[] = [];\n const versions = db._versions;\n let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n let anyContentUpgraderHasRun = false;\n \n const versToRun = versions.filter(v => v._cfg.version >= oldVersion);\n if (versToRun.length === 0) {\n // Important not to continue at this point.\n // Coming here means we've already patched schema in patchCurrentVersion() after having\n // incremented native version to a value above the declared highest version.\n // When being in this mode, it means that there might be different versions the db competing\n // about it with different version of the schema. Therefore, we must avoid deleting tables\n // or indexes here so that both versions can co-exist until the application has been upgraded to\n // a version that declares no lower than the native version.\n // If after that, a downgrade happens again, we'll end up here again, accepting both versions\n // And we'll stay in this state until app developer releases a new declared version.\n return Promise.resolve(); \n }\n \n versToRun.forEach(version => {\n queue.push(() => {\n const oldSchema = globalSchema;\n const newSchema = version._cfg.dbschema;\n adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n\n globalSchema = db._dbSchema = newSchema;\n\n const diff = getSchemaDiff(oldSchema, newSchema);\n // Add tables \n diff.add.forEach(tuple => {\n createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n });\n // Change tables\n diff.change.forEach(change => {\n if (change.recreate) {\n throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n } else {\n const store = idbUpgradeTrans.objectStore(change.name);\n // Add indexes\n change.add.forEach(idx => addIndex(store, idx));\n // Update indexes\n change.change.forEach(idx => {\n store.deleteIndex(idx.name);\n addIndex(store, idx);\n });\n // Delete indexes\n change.del.forEach(idxName => store.deleteIndex(idxName));\n }\n });\n\n const contentUpgrade = version._cfg.contentUpgrade;\n\n if (contentUpgrade && version._cfg.version > oldVersion) {\n // Update db.core with new tables and indexes:\n generateMiddlewareStacks(db, idbUpgradeTrans);\n trans._memoizedTables = {}; // Invalidate memoization as transaction shape may change between versions.\n\n anyContentUpgraderHasRun = true;\n\n // Add to-be-deleted tables to contentUpgrade transaction\n let upgradeSchema = shallowClone(newSchema);\n diff.del.forEach(table => {\n upgradeSchema[table] = oldSchema[table];\n });\n\n // Safe to affect Transaction.prototype globally in this moment,\n // because when this code runs, there may not be any other code\n // that can access any transaction instance, else than this particular\n // upgrader function.\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema);\n trans.schema = upgradeSchema;\n\n // Support for native async await.\n const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade);\n if (contentUpgradeIsAsync) {\n incrementExpectedAwaits();\n }\n \n let returnValue: any;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = contentUpgrade(trans);\n if (returnValue) {\n if (contentUpgradeIsAsync) {\n // contentUpgrade is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n }\n }\n });\n return (returnValue && typeof returnValue.then === 'function' ?\n Promise.resolve(returnValue) : promiseFollowed.then(()=>returnValue));\n }\n });\n queue.push(idbtrans => {\n const newSchema = version._cfg.dbschema;\n // Delete old tables\n deleteRemovedTables(newSchema, idbtrans);\n // Restore the final API\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);\n trans.schema = db._dbSchema;\n });\n // Maintain the $meta table after this version's tables and indexes has been created and content upgraders have run.\n queue.push(idbtrans => {\n if (db.idbdb.objectStoreNames.contains('$meta')) {\n if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) {\n // Remove $meta table if it's no more needed - we are in line with the native version\n db.idbdb.deleteObjectStore('$meta');\n delete db._dbSchema.$meta;\n db._storeNames = db._storeNames.filter(name => name !== '$meta');\n } else {\n // We're still not in line with the native version. Make sure to update the virtual version\n // to the successfully run version\n idbtrans.objectStore('$meta').put(version._cfg.version, 'version');\n }\n }\n }); \n });\n\n // Now, create a queue execution engine\n function runQueue() {\n return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n Promise.resolve();\n }\n\n return runQueue().then(() => {\n createMissingTables(globalSchema, idbUpgradeTrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version)\n });\n}\n\nexport interface SchemaDiff {\n del: string[],\n add: [string, TableSchema][];\n change: TableSchemaDiff[];\n}\n\nexport interface TableSchemaDiff {\n name: string,\n recreate: boolean,\n del: string[],\n add: IndexSpec[],\n change: IndexSpec[]\n}\n\nexport function getSchemaDiff(oldSchema: DbSchema, newSchema: DbSchema): SchemaDiff {\n const diff: SchemaDiff = {\n del: [], // Array of table names\n add: [], // Array of [tableName, newDefinition]\n change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}\n };\n let table: string;\n for (table in oldSchema) {\n if (!newSchema[table]) diff.del.push(table);\n }\n for (table in newSchema) {\n const oldDef = oldSchema[table],\n newDef = newSchema[table];\n if (!oldDef) {\n diff.add.push([table, newDef]);\n } else {\n const change = {\n name: table,\n def: newDef,\n recreate: false,\n del: [],\n add: [],\n change: []\n };\n if (\n (\n // compare keyPaths no matter if string or string[]\n // compare falsy keypaths same no matter if they are null or empty string.\n ''+(oldDef.primKey.keyPath||'')\n ) !== (\n ''+(newDef.primKey.keyPath||'')\n ) ||\n // Compare the autoIncrement flag also\n (oldDef.primKey.auto !== newDef.primKey.auto))\n {\n // Primary key has changed. Remove and re-add table.\n change.recreate = true;\n diff.change.push(change);\n } else {\n // Same primary key. Just find out what differs:\n const oldIndexes = oldDef.idxByName;\n const newIndexes = newDef.idxByName;\n let idxName: string;\n for (idxName in oldIndexes) {\n if (!newIndexes[idxName]) change.del.push(idxName);\n }\n for (idxName in newIndexes) {\n const oldIdx = oldIndexes[idxName],\n newIdx = newIndexes[idxName];\n if (!oldIdx) change.add.push(newIdx);\n else if (oldIdx.src !== newIdx.src) change.change.push(newIdx);\n }\n if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n diff.change.push(change);\n }\n }\n }\n }\n return diff;\n}\n\nexport function createTable(\n idbtrans: IDBTransaction,\n tableName: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n) {\n const store = idbtrans.db.createObjectStore(\n tableName,\n primKey.keyPath ?\n { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n { autoIncrement: primKey.auto }\n );\n indexes.forEach(idx => addIndex(store, idx));\n return store;\n}\n\nexport function createMissingTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n keys(newSchema).forEach(tableName => {\n if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n if (debug) console.debug('Dexie: Creating missing table', tableName);\n createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n }\n });\n}\n\nexport function deleteRemovedTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName =>\n newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName));\n}\n\nexport function addIndex(store: IDBObjectStore, idx: IndexSpec) {\n store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\n\nfunction buildGlobalSchema(\n db: Dexie,\n idbdb: IDBDatabase,\n tmpTrans: IDBTransaction\n) {\n const globalSchema = {};\n const dbStoreNames = slice(idbdb.objectStoreNames, 0);\n dbStoreNames.forEach(storeName => {\n const store = tmpTrans.objectStore(storeName);\n let keyPath = store.keyPath;\n const primKey = createIndexSpec(\n nameFromKeyPath(keyPath),\n keyPath || \"\",\n true,\n false,\n !!store.autoIncrement,\n keyPath && typeof keyPath !== \"string\",\n true\n );\n const indexes: IndexSpec[] = [];\n for (let j = 0; j < store.indexNames.length; ++j) {\n const idbindex = store.index(store.indexNames[j]);\n keyPath = idbindex.keyPath;\n var index = createIndexSpec(\n idbindex.name,\n keyPath,\n !!idbindex.unique,\n !!idbindex.multiEntry,\n false,\n keyPath && typeof keyPath !== \"string\",\n false\n );\n indexes.push(index);\n }\n globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n });\n return globalSchema;\n}\n\nexport function readGlobalSchema(db: Dexie, idbdb: IDBDatabase, tmpTrans: IDBTransaction) {\n db.verno = idbdb.version / 10;\n const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);\n db._storeNames = slice(idbdb.objectStoreNames, 0);\n setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\n\nexport function verifyInstalledSchema(db: Dexie, tmpTrans: IDBTransaction): boolean {\n const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans);\n const diff = getSchemaDiff(installedSchema, db._dbSchema);\n return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length));\n}\n\nexport function adjustToExistingIndexNames(db: Dexie, schema: DbSchema, idbtrans: IDBTransaction) {\n // Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db\n const storeNames = idbtrans.db.objectStoreNames;\n\n for (let i = 0; i < storeNames.length; ++i) {\n const storeName = storeNames[i];\n const store = idbtrans.objectStore(storeName);\n db._hasGetAll = 'getAll' in store;\n\n for (let j = 0; j < store.indexNames.length; ++j) {\n const indexName = store.indexNames[j];\n const keyPath = store.index(indexName).keyPath;\n const dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n if (schema[storeName]) {\n const indexSpec = schema[storeName].idxByName[dexieName];\n if (indexSpec) {\n indexSpec.name = indexName;\n delete schema[storeName].idxByName[dexieName];\n schema[storeName].idxByName[indexName] = indexSpec;\n }\n }\n }\n }\n\n // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579\n if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604)\n {\n db._hasGetAll = false;\n }\n}\n\nexport function parseIndexSyntax(primKeyAndIndexes: string): IndexSpec[] {\n return primKeyAndIndexes.split(',').map((index, indexNum) => {\n index = index.trim();\n const name = index.replace(/([&*]|\\+\\+)/g, \"\"); // Remove \"&\", \"++\" and \"*\"\n // Let keyPath of \"[a+b]\" be [\"a\",\"b\"]:\n const keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n\n return createIndexSpec(\n name,\n keyPath || null,\n /\\&/.test(index),\n /\\*/.test(index),\n /\\+\\+/.test(index),\n isArray(keyPath),\n indexNum === 0\n );\n });\n}\n","import { Version as IVersion } from '../../public/types/version';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { extend, keys } from '../../functions/utils';\nimport { Dexie } from '../dexie';\nimport { Transaction } from '../transaction';\nimport { removeTablesApi, setApiOnPlace, parseIndexSyntax } from './schema-helpers';\nimport { exceptions } from '../../errors';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\n\n/** class Version\n *\n * https://dexie.org/docs/Version/Version\n */\nexport class Version implements IVersion {\n db: Dexie;\n _cfg: {\n version: number,\n storesSource: { [tableName: string]: string | null },\n dbschema: DbSchema,\n tables: {},\n contentUpgrade: Function | null\n }\n\n _parseStoresSpec(stores: { [tableName: string]: string | null }, outSchema: DbSchema): any {\n keys(stores).forEach(tableName => {\n if (stores[tableName] !== null) {\n var indexes = parseIndexSyntax(stores[tableName]);\n var primKey = indexes.shift();\n primKey.unique = true;\n if (primKey.multi) throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n indexes.forEach(idx => {\n if (idx.auto) throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n if (!idx.keyPath) throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n });\n outSchema[tableName] = createTableSchema(tableName, primKey, indexes);\n }\n });\n }\n\n stores(stores: { [key: string]: string | null; }): IVersion {\n const db = this.db;\n this._cfg.storesSource = this._cfg.storesSource ?\n extend(this._cfg.storesSource, stores) :\n stores;\n const versions = db._versions;\n\n // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax.\n const storesSpec: { [key: string]: string; } = {};\n let dbschema = {};\n versions.forEach(version => { // 'versions' is always sorted by lowest version first.\n extend(storesSpec, version._cfg.storesSource);\n dbschema = (version._cfg.dbschema = {});\n version._parseStoresSpec(storesSpec, dbschema);\n });\n // Update the latest schema to this version\n db._dbSchema = dbschema;\n // Update APIs\n removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);\n setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n db._storeNames = keys(dbschema);\n return this;\n }\n\n upgrade(upgradeFunction: (trans: Transaction) => PromiseLike | void): Version {\n this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction);\n return this;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Version } from './version';\n\nexport interface VersionConstructor {\n new(versionNumber: number): Version;\n prototype: Version;\n}\n\n/** Generates a Version constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createVersionConstructor(db: Dexie) {\n return makeClassConstructor(\n Version.prototype,\n\n function Version(this: Version, versionNumber: number) {\n this.db = db;\n this._cfg = {\n version: versionNumber,\n storesSource: null,\n dbschema: {},\n tables: {},\n contentUpgrade: null\n };\n });\n\n}\n","import { Dexie } from \"../classes/dexie/dexie\";\nimport { Table } from \"../public/types/table\";\nimport { DBNAMES_DB } from \"../globals/constants\";\nimport { DexieDOMDependencies } from \"../public/types/dexie-dom-dependencies\";\nimport { nop } from \"../functions/chaining-functions\";\n\ntype IDBKeyNamesVar = typeof IDBKeyRange;\n\nfunction getDbNamesTable(indexedDB: IDBFactory, IDBKeyRange: IDBKeyNamesVar) {\n let dbNamesDB = indexedDB[\"_dbNamesDB\"];\n if (!dbNamesDB) {\n dbNamesDB = indexedDB[\"_dbNamesDB\"] = new Dexie(DBNAMES_DB, {\n addons: [],\n indexedDB,\n IDBKeyRange,\n });\n dbNamesDB.version(1).stores({ dbnames: \"name\" });\n }\n return dbNamesDB.table(\"dbnames\") as Table<{ name: string }, string>;\n}\n\nfunction hasDatabasesNative(indexedDB: IDBFactory) {\n return indexedDB && typeof indexedDB.databases === \"function\";\n}\n\nexport function getDatabaseNames({\n indexedDB,\n IDBKeyRange,\n}: DexieDOMDependencies) {\n return hasDatabasesNative(indexedDB)\n ? Promise.resolve(indexedDB.databases()).then((infos) =>\n infos\n // Select name prop of infos:\n .map((info) => info.name)\n // Filter out DBNAMES_DB as previous Dexie or browser version would not have included it in the result.\n .filter((name) => name !== DBNAMES_DB)\n )\n : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys();\n}\n\nexport function _onDatabaseCreated(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).put({name}).catch(nop);\n}\n\nexport function _onDatabaseDeleted(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop);\n}\n","import { newScope } from '../../helpers/promise';\nimport { PSD } from '../../helpers/promise';\n\nexport function vip (fn) {\n // To be used by subscribers to the on('ready') event.\n // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing.\n // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD\n // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since\n // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that.\n // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip()\n // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by\n // the caller will not resolve until database is opened.\n return newScope(function () {\n PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing.\n return fn();\n });\n}\n\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import { cmp } from \"../functions/cmp\";\nimport { extend, iteratorSymbol, props } from '../functions/utils';\nimport { IndexableType } from '../public';\nimport {\n EmptyRange,\n IntervalTree,\n IntervalTreeNode,\n RangeSetConstructor,\n RangeSetPrototype,\n} from \"../public/types/rangeset\";\n\n/* An interval tree implementation to efficiently detect overlapping ranges of queried indexes.\n *\n * https://en.wikipedia.org/wiki/Interval_tree\n * \n */\n\nfunction isEmptyRange(node: IntervalTree | {from: IndexableType, to: IndexableType}): node is EmptyRange {\n return !(\"from\" in node);\n}\n\nexport type RangeSet = RangeSetPrototype & IntervalTree;\n\nexport const RangeSet = function(fromOrTree: any, to?: any) {\n if (this) {\n // Called with new()\n extend(this, arguments.length ? {d:1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree} : {d:0});\n } else {\n // Called without new()\n const rv = new RangeSet();\n if (fromOrTree && (\"d\" in fromOrTree)) {\n extend(rv, fromOrTree);\n }\n return rv;\n }\n} as RangeSetConstructor;\n\nprops(RangeSet.prototype, {\n add(rangeSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n mergeRanges(this, rangeSet);\n return this;\n },\n addKey(key: IndexableType) {\n addRange(this, key, key);\n return this;\n },\n addKeys(keys: IndexableType[]) {\n keys.forEach(key => addRange(this, key, key));\n return this;\n },\n\n [iteratorSymbol](): Iterator {\n return getRangeSetIterator(this);\n }\n});\n\nfunction addRange(target: IntervalTree, from: IndexableType, to: IndexableType) {\n const diff = cmp(from, to);\n // cmp() returns NaN if one of the args are IDB-invalid keys.\n // Avoid storing invalid keys in rangeset:\n if (isNaN(diff)) return;\n\n // Caller is trying to add a range where from is greater than to:\n if (diff > 0) throw RangeError();\n \n if (isEmptyRange(target)) return extend(target, { from, to, d: 1 });\n const left = target.l;\n const right = target.r;\n if (cmp(to, target.from) < 0) {\n left\n ? addRange(left, from, to)\n : (target.l = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.to) > 0) {\n right\n ? addRange(right, from, to)\n : (target.r = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n // Now we have some kind of overlap. We will be able to merge the new range into the node or let it be swallowed.\n\n // Grow left?\n if (cmp(from, target.from) < 0) {\n target.from = from;\n target.l = null; // Cut off for now. Re-add later.\n target.d = right ? right.d + 1 : 1;\n }\n // Grow right?\n if (cmp(to, target.to) > 0) {\n target.to = to;\n target.r = null; // Cut off for now. Re-add later.\n target.d = target.l ? target.l.d + 1 : 1;\n }\n const rightWasCutOff = !target.r;\n // Re-add left?\n if (left && !target.l) {\n //Ranges to the left may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, left);\n }\n // Re-add right?\n if (right && rightWasCutOff) {\n //Ranges to the right may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, right);\n }\n}\n\nexport function mergeRanges(target: IntervalTree, newSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n function _addRangeSet(\n target: IntervalTree,\n { from, to, l, r }: IntervalTreeNode | {from: IndexableType, to: IndexableType, l?: undefined, r?: undefined}\n ) {\n addRange(target, from, to);\n if (l) _addRangeSet(target, l);\n if (r) _addRangeSet(target, r);\n }\n\n if(!isEmptyRange(newSet)) _addRangeSet(target, newSet);\n}\n\nexport function rangesOverlap(\n rangeSet1: IntervalTree,\n rangeSet2: IntervalTree\n): boolean {\n // Start iterating other from scratch.\n const i1 = getRangeSetIterator(rangeSet2);\n let nextResult1 = i1.next();\n if (nextResult1.done) return false;\n let a = nextResult1.value;\n\n // Start iterating this from start of other\n const i2 = getRangeSetIterator(rangeSet1);\n let nextResult2 = i2.next(a.from); // Start from beginning of other range\n let b = nextResult2.value;\n\n while (!nextResult1.done && !nextResult2.done) {\n if (cmp(b!.from, a.to) <= 0 && cmp(b!.to, a.from) >= 0) return true;\n cmp(a.from, b!.from) < 0\n ? (a = (nextResult1 = i1.next(b!.from)).value!) // a is behind. forward it to beginning of next b-range\n : (b = (nextResult2 = i2.next(a.from)).value); // b is behind. forward it to beginning of next a-range\n }\n return false;\n}\n\ntype RangeSetIteratorState =\n | {\n up?: RangeSetIteratorState;\n n: IntervalTreeNode;\n s: 0 | 1 | 2 | 3;\n }\n | undefined\n | null;\nexport function getRangeSetIterator(\n node: EmptyRange | IntervalTreeNode\n): Generator {\n let state: RangeSetIteratorState = isEmptyRange(node) ? null : { s: 0, n: node };\n\n return {\n next(key?) {\n const keyProvided = arguments.length > 0;\n while (state) {\n switch (state.s) {\n case 0:\n // Initial state for node.\n // Fast forward to leftmost node.\n state.s = 1;\n if (keyProvided) {\n while (state.n.l && cmp(key, state.n.from) < 0)\n state = { up: state, n: state.n.l, s: 1 };\n } else {\n while (state.n.l) state = { up: state, n: state.n.l, s: 1 };\n }\n // intentionally fall into case 1:\n case 1:\n // We're on a node where it's left part is already handled or does not exist.\n state.s = 2;\n if (!keyProvided || cmp(key, state.n.to) <= 0)\n return { value: state.n, done: false };\n case 2:\n // We've emitted our node and should continue with the right part or let parent take over from it's state 1\n if (state.n.r) {\n state.s = 3; // So when child is done, we know we're done.\n state = { up: state, n: state.n.r, s: 0 };\n continue; // Will fall in to case 0 with fast forward to left leaf of this subtree.\n }\n // intentionally fall into case 3:\n case 3:\n state = state.up;\n }\n }\n return { done: true };\n },\n } as Generator;\n}\n\nfunction rebalance(target: IntervalTreeNode) {\n const diff = (target.r?.d || 0) - (target.l?.d || 0);\n const r = diff > 1 ? \"r\" : diff < -1 ? \"l\" : \"\";\n if (r) {\n\n // Rotate (https://en.wikipedia.org/wiki/Tree_rotation)\n //\n // \n // [OLDROOT]\n // [OLDROOT.L] [NEWROOT]\n // [NEWROOT.L] [NEWROOT.R]\n //\n // Is going to become:\n //\n // \n // [NEWROOT]\n // [OLDROOT] [NEWROOT.R]\n // [OLDROOT.L] [NEWROOT.L] \n\n // * clone now has the props of OLDROOT\n // Plan:\n // * target must be given the props of NEWROOT\n // * target[l] must point to a new OLDROOT\n // * target[r] must point to NEWROOT.R\n // * OLDROOT[r] must point to NEWROOT.L\n const l = r === \"r\" ? \"l\" : \"r\"; // Support both left/right rotation\n const rootClone = { ...target };\n // We're gonna copy props from target's right node into target so that target will\n // have same range as old target[r] (instead of changing pointers, we copy values.\n // that way we do not need to adjust pointers in parents).\n const oldRootRight = target[r]; \n target.from = oldRootRight.from;\n target.to = oldRootRight.to;\n target[r] = oldRootRight[r];\n rootClone[r] = oldRootRight[l];\n target[l] = rootClone;\n rootClone.d = computeDepth(rootClone);\n }\n target.d = computeDepth(target);\n}\n\nfunction computeDepth({ r, l }: Pick) {\n return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;\n}\n","import { cloneSimpleObjectTree, deepClone, keys, objectIsEmpty } from \"../functions/utils\";\nimport { mergeRanges, RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\n\nexport function extendObservabilitySet(\n target: ObservabilitySet,\n newSet: ObservabilitySet\n): ObservabilitySet {\n keys(newSet).forEach(part => {\n if (target[part]) mergeRanges(target[part], newSet[part]);\n else target[part] = cloneSimpleObjectTree(newSet[part]); // Somewhat faster\n });\n return target;\n}\n","import { rangesOverlap } from '../helpers/rangeset';\nimport { ObservabilitySet } from '../public/types/db-events';\n\nexport function obsSetsOverlap(os1: ObservabilitySet, os2: ObservabilitySet) {\n return os1.all || os2.all || Object.keys(os1).some(\n (key) => os2[key] && rangesOverlap(os2[key], os1[key])\n );\n}\n","import { type GlobalQueryCache } from \"../../public/types/cache\";\n\nexport const cache: GlobalQueryCache = {}\n","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport { extendObservabilitySet } from '../extend-observability-set';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { cache } from './cache';\n\nlet unsignaledParts: ObservabilitySet = {};\nlet isTaskEnqueued = false;\n\nexport function signalSubscribersLazily(part: ObservabilitySet, optimistic = false) {\n extendObservabilitySet(unsignaledParts, part);\n if (!isTaskEnqueued) {\n isTaskEnqueued = true;\n setTimeout(() => {\n isTaskEnqueued = false;\n const parts = unsignaledParts;\n unsignaledParts = {};\n signalSubscribersNow(parts, false);\n }, 0);\n }\n}\n\nexport function signalSubscribersNow(\n updatedParts: ObservabilitySet,\n deleteAffectedCacheEntries = false\n) {\n const queriesToSignal = new Set<() => void>();\n if (updatedParts.all) {\n // Signal all subscribers to requery.\n for (const tblCache of Object.values(cache)) {\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n } else {\n for (const key in updatedParts) {\n const parts = /^idb\\:\\/\\/(.*)\\/(.*)\\//.exec(key);\n if (parts) {\n const [, dbName, tableName] = parts;\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (tblCache)\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n }\n }\n // Now when affected cache entries are removed, signal collected subscribers to requery.\n queriesToSignal.forEach((requery) => requery());\n}\n\nfunction collectTableSubscribers(\n tblCache: TblQueryCache,\n updatedParts: ObservabilitySet,\n outQueriesToSignal: Set<() => void>,\n deleteAffectedCacheEntries: boolean\n) {\n const updatedEntryLists: [string, CacheEntry[]][] = [];\n for (const [indexName, entries] of Object.entries(tblCache.queries.query)) {\n const filteredEntries: CacheEntry[] = [];\n for (const entry of entries) {\n if (obsSetsOverlap(updatedParts, entry.obsSet)) {\n // This query is affected by the mutation. Remove it from cache\n // and signal all subscribers to requery.\n entry.subscribers.forEach((requery) => outQueriesToSignal.add(requery));\n } else if (deleteAffectedCacheEntries) {\n filteredEntries.push(entry);\n }\n }\n // Collect cache entries to be updated\n if (deleteAffectedCacheEntries)\n updatedEntryLists.push([indexName, filteredEntries]);\n }\n if (deleteAffectedCacheEntries) {\n for (const [indexName, filteredEntries] of updatedEntryLists) {\n tblCache.queries.query[indexName] = filteredEntries;\n }\n }\n}\n","import { Dexie } from './dexie';\nimport * as Debug from '../../helpers/debug';\nimport { rejection } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { eventRejectHandler, preventDefault } from '../../functions/event-wrappers';\nimport Promise, { wrap } from '../../helpers/promise';\nimport { connections } from '../../globals/constants';\nimport { runUpgraders, readGlobalSchema, adjustToExistingIndexNames, verifyInstalledSchema, patchCurrentVersion } from '../version/schema-helpers';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { _onDatabaseCreated } from '../../helpers/database-enumerator';\nimport { vip } from './vip';\nimport { promisableChain, nop } from '../../functions/chaining-functions';\nimport { generateMiddlewareStacks } from './generate-middleware-stacks';\nimport { slice } from '../../functions/utils';\nimport safari14Workaround from 'safari-14-idb-fix';\nimport { type ObservabilitySet } from '../../public/types/db-events';\nimport { RangeSet } from '../../helpers/rangeset';\nimport { DEXIE_STORAGE_MUTATED_EVENT_NAME, globalEvents } from '../../globals/global-events';\nimport { signalSubscribersNow } from '../../live-query/cache/signalSubscribers';\n\nexport function dexieOpen (db: Dexie) {\n const state = db._state;\n const {indexedDB} = db._deps;\n if (state.isBeingOpened || db.idbdb)\n return state.dbReadyPromise.then(() => state.dbOpenError ?\n rejection (state.dbOpenError) :\n db);\n state.isBeingOpened = true;\n state.dbOpenError = null;\n state.openComplete = false;\n const openCanceller = state.openCanceller;\n let nativeVerToOpen = Math.round(db.verno * 10);\n let schemaPatchMode = false;\n\n function throwIfCancelled() {\n // If state.openCanceller object reference is replaced, it means db.close() has been called,\n // meaning this open flow should be cancelled.\n if (state.openCanceller !== openCanceller) throw new exceptions.DatabaseClosed('db.open() was cancelled');\n }\n \n // Function pointers to call when the core opening process completes.\n let resolveDbReady = state.dbReadyResolve,\n // upgradeTransaction to abort on failure.\n upgradeTransaction: (IDBTransaction | null) = null,\n wasCreated = false;\n\n const tryOpenDB = () => new Promise((resolve, reject) => {\n throwIfCancelled();\n // If no API, throw!\n if (!indexedDB) throw new exceptions.MissingAPI();\n const dbName = db.name;\n \n const req = state.autoSchema || !nativeVerToOpen ?\n indexedDB.open(dbName) :\n indexedDB.open(dbName, nativeVerToOpen);\n if (!req) throw new exceptions.MissingAPI(); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134\n req.onerror = eventRejectHandler(reject);\n req.onblocked = wrap(db._fireOnBlocked);\n req.onupgradeneeded = wrap (e => {\n upgradeTransaction = req.transaction;\n if (state.autoSchema && !db._options.allowEmptyDB) { // Unless an addon has specified db._allowEmptyDB, lets make the call fail.\n // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases.\n // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we\n // do not create a new database by accident here.\n req.onerror = preventDefault; // Prohibit onabort error from firing before we're done!\n upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.)\n // Close database and delete it.\n req.result.close();\n const delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here!\n delreq.onsuccess = delreq.onerror = wrap(() => {\n reject (new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`));\n });\n } else {\n upgradeTransaction.onerror = eventRejectHandler(reject);\n const oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix.\n wasCreated = oldVer < 1;\n db.idbdb = req.result;\n if (schemaPatchMode) {\n patchCurrentVersion(db, upgradeTransaction);\n }\n runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n }\n }, reject);\n \n req.onsuccess = wrap (() => {\n // Core opening procedure complete. Now let's just record some stuff.\n upgradeTransaction = null;\n const idbdb = db.idbdb = req.result;\n\n const objectStoreNames = slice(idbdb.objectStoreNames);\n if (objectStoreNames.length > 0) try {\n const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n if (state.autoSchema) readGlobalSchema(db, idbdb, tmpTrans);\n else {\n adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) {\n console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this.`);\n idbdb.close();\n nativeVerToOpen = idbdb.version + 1;\n schemaPatchMode = true;\n return resolve (tryOpenDB()); // Try again with new version (nativeVerToOpen\n }\n }\n generateMiddlewareStacks(db, tmpTrans);\n } catch (e) {\n // Safari 8 may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120.\n // BUGBUG: It will bail out anyway as of Dexie 3.\n // Should we support Safari 8 anymore? Believe all\n // Dexie users use the shim for that platform anyway?!\n // If removing Safari 8 support, go ahead and remove the safariMultiStoreFix() function\n // as well as absurd upgrade version quirk for Safari.\n }\n \n connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari.\n \n idbdb.onversionchange = wrap(ev => {\n state.vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari)\n db.on(\"versionchange\").fire(ev);\n });\n \n idbdb.onclose = wrap(ev => {\n db.on(\"close\").fire(ev);\n });\n\n if (wasCreated) _onDatabaseCreated(db._deps, dbName);\n\n resolve();\n\n }, reject);\n }).catch(err => {\n switch (err?.name) {\n case \"UnknownError\":\n if (state.PR1398_maxLoop > 0) {\n // Bug in Chrome after clearing site data\n // https://github.com/dexie/Dexie.js/issues/543#issuecomment-1795736695\n state.PR1398_maxLoop--;\n console.warn('Dexie: Workaround for Chrome UnknownError on open()');\n return tryOpenDB();\n }\n break;\n case \"VersionError\":\n if (nativeVerToOpen > 0) {\n nativeVerToOpen = 0;\n return tryOpenDB();\n }\n break;\n }\n return Promise.reject(err);\n });\n \n // safari14Workaround = Workaround by jakearchibald for new nasty bug in safari 14.\n return Promise.race([\n openCanceller,\n (typeof navigator === 'undefined' ? Promise.resolve() : safari14Workaround()).then(tryOpenDB)\n ]).then(() => {\n // Before finally resolving the dbReadyPromise and this promise,\n // call and await all on('ready') subscribers:\n // Dexie.vip() makes subscribers able to use the database while being opened.\n // This is a must since these subscribers take part of the opening procedure.\n throwIfCancelled();\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>db.on.ready.fire(db.vip))).then(function fireRemainders() {\n if (state.onReadyBeingFired.length > 0) {\n // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed.\n let remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>remainders(db.vip))).then(fireRemainders)\n }\n });\n }).finally(()=>{\n if (state.openCanceller === openCanceller) {\n // Only modify state if not cancelled in the mean time.\n state.onReadyBeingFired = null;\n state.isBeingOpened = false;\n }\n }).catch(err => {\n state.dbOpenError = err; // Record the error. It will be used to reject further promises of db operations.\n try {\n // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit.\n upgradeTransaction && upgradeTransaction.abort();\n } catch { }\n if (openCanceller === state.openCanceller) {\n // Still in the same open flow - The error reason was not due to external call to db.close().\n // Make sure to call db.close() to finalize resources.\n db._close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh.\n }\n return rejection (err);\n }).finally(()=>{\n state.openComplete = true;\n resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters.\n }).then(()=>{\n if (wasCreated) {\n // Propagate full range on primary keys and indexes on all tables now that the DB is ready and opened,\n // and all upgraders and on('ready') subscribers have run.\n const everything: ObservabilitySet = {};\n db.tables.forEach(table => {\n table.schema.indexes.forEach(idx => {\n if (idx.name) everything[`idb://${db.name}/${table.name}/${idx.name}`] = new RangeSet(-Infinity, [[[]]]);\n });\n everything[`idb://${db.name}/${table.name}/`] = everything[`idb://${db.name}/${table.name}/:dels`] = new RangeSet(-Infinity, [[[]]]);\n });\n // Database was created. If another tab had it open when it was deleted and reopened, that tab must be updated now.\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything);\n // Wipe the cache and trigger optimistic queries:\n signalSubscribersNow(everything, true);\n }\n // Resolve the db.open() with the db instance.\n return db;\n });\n}\n","import { isArray } from '../functions/utils';\n\nexport function awaitIterator (iterator: Iterator) {\n var callNext = result => iterator.next(result),\n doThrow = error => iterator.throw(error),\n onSuccess = step(callNext),\n onError = step(doThrow);\n\n function step(getNext: (any)=>any) {\n return (val?) => {\n var next = getNext(val),\n value = next.value;\n\n return next.done ? value :\n (!value || typeof value.then !== 'function' ?\n isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :\n value.then(onSuccess, onError));\n };\n }\n\n return step(callNext)();\n}\n","import { TransactionMode } from '../../public/types/transaction-mode';\nimport { errnames, exceptions } from '../../errors';\nimport { flatten, isAsyncFunction } from '../../functions/utils';\nimport { Dexie } from './dexie';\nimport { Transaction } from '../transaction';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise, {\n PSD,\n NativePromise,\n decrementExpectedAwaits,\n rejection,\n incrementExpectedAwaits\n} from '../../helpers/promise';\n\nexport function extractTransactionArgs(mode: TransactionMode, _tableArgs_, scopeFunc) {\n // Let table arguments be all arguments between mode and last argument.\n var i = arguments.length;\n if (i < 2) throw new exceptions.InvalidArgument(\"Too few arguments\");\n // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments)\n // and clone arguments except the first one into local var 'args'.\n var args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments.\n scopeFunc = args.pop();\n var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays.\n return [mode, tables, scopeFunc];\n}\n\nexport function enterTransactionScope(\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n parentTransaction: Transaction | undefined,\n scopeFunc: ()=>PromiseLike | any\n) {\n return Promise.resolve().then(() => {\n // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction().\n const transless = PSD.transless || PSD;\n // Our transaction.\n //return new Promise((resolve, reject) => {\n const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n trans.explicit = true;\n // Let the transaction instance be part of a Promise-specific data (PSD) value.\n const zoneProps = {\n trans: trans,\n transless: transless\n };\n\n if (parentTransaction) {\n // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing)\n trans.idbtrans = parentTransaction.idbtrans;\n } else {\n try {\n trans.create(); // Create the native transaction so that complete() or error() will trigger even if no operation is made upon it.\n // @ts-ignore Mark the idbtrans object with \"_explicit\". DBCore middleware won't have access to Dexie trans but will need to have this info.\n trans.idbtrans._explicit = true;\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(() => enterTransactionScope(\n db,\n mode,\n storeNames,\n null,\n scopeFunc\n ));\n }\n return rejection(ex);\n }\n }\n\n // Support for native async await.\n const scopeFuncIsAsync = isAsyncFunction(scopeFunc);\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n\n let returnValue;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = scopeFunc.call(trans, trans);\n if (returnValue) {\n if (scopeFuncIsAsync) {\n // scopeFunc is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n } else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {\n // scopeFunc returned an iterator with throw-support. Handle yield as await.\n returnValue = awaitIterator(returnValue);\n }\n }\n }, zoneProps);\n return (returnValue && typeof returnValue.then === 'function' ?\n // Promise returned. User uses promise-style transactions.\n Promise.resolve(returnValue).then(x => trans.active ?\n x // Transaction still active. Continue.\n : rejection(new exceptions.PrematureCommit(\n \"Transaction committed too early. See http://bit.ly/2kdckMn\")))\n // No promise returned. Wait for all outstanding promises before continuing. \n : promiseFollowed.then(() => returnValue)\n ).then(x => {\n // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion:\n if (parentTransaction) trans._resolve();\n // wait for trans._completion\n // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves)\n return trans._completion.then(() => x);\n }).catch(e => {\n trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc!\n return rejection(e);\n });\n });\n}\n","import {\n DBCore,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryRequest,\n DBCoreRangeType,\n DBCoreOpenCursorRequest,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreTable,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { getKeyExtractor } from './get-key-extractor';\nimport { getKeyPathAlias } from './dbcore-indexeddb';\nimport { Middleware } from '../public/types/middleware';\n\ninterface VirtualIndex extends DBCoreIndex {\n /** True if this index is virtual, i.e. represents a compound index internally,\n * but makes it act as as having a subset of its keyPaths.\n */\n isVirtual: boolean;\n\n /** Number of keypaths that this index comprises. Can be 0..N.\n * Note: This is the length of the *virtual index*, not the real index.\n */\n keyLength: number;\n\n /** Number of popped keypaths from the real index.\n */\n keyTail: number;\n\n /** LowLevelIndex represents the actual IndexedDB index behind it */\n lowLevelIndex: DBCoreIndex;\n}\n\n// Move into some util:\nexport function pad (a: any | any[], value: any, count: number) {\n const result = isArray(a) ? a.slice() : [a];\n for (let i=0; i 0;\n const virtualIndex = {\n ...lowLevelIndex,\n name: isVirtual\n ? `${keyPathAlias}(virtual-from:${lowLevelIndex.name})`\n : lowLevelIndex.name,\n lowLevelIndex,\n isVirtual,\n keyTail,\n keyLength,\n extractKey: getKeyExtractor(keyPath),\n unique: !isVirtual && lowLevelIndex.unique\n };\n indexList.push(virtualIndex);\n if (!virtualIndex.isPrimaryKey) {\n allVirtualIndexes.push(virtualIndex);\n }\n if (keyLength > 1) {\n const virtualKeyPath = keyLength === 2 ?\n keyPath[0] : // This is a compound [a, b]. Add a virtual normal index a.\n keyPath.slice(0, keyLength - 1); // This is compound [a,b,c]. Add virtual compound [a,b].\n addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n }\n indexList.sort((a,b) => a.keyTail - b.keyTail); // Shortest keyTail is the best one (represents real index)\n return virtualIndex;\n }\n \n const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n indexLookup[\":id\"] = [primaryKey];\n for (const index of schema.indexes) {\n addVirtualIndexes(index.keyPath, 0, index);\n }\n \n function findBestIndex(keyPath: null | string | string[]): VirtualIndex {\n const result = indexLookup[getKeyPathAlias(keyPath)];\n return result && result[0];\n }\n \n function translateRange (range: DBCoreKeyRange, keyTail: number): DBCoreKeyRange {\n return {\n type: range.type === DBCoreRangeType.Equal ?\n DBCoreRangeType.Range :\n range.type,\n lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),\n lowerOpen: true, // doesn't matter true or false\n upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),\n upperOpen: true // doesn't matter true or false\n };\n }\n \n function translateRequest (req: DBCoreQueryRequest): DBCoreQueryRequest;\n function translateRequest (req: DBCoreOpenCursorRequest): DBCoreOpenCursorRequest;\n function translateRequest (req: DBCoreCountRequest): DBCoreCountRequest {\n const index = req.query.index as VirtualIndex;\n return index.isVirtual ? {\n ...req,\n query: {\n index: index.lowLevelIndex,\n range: translateRange(req.query.range, index.keyTail)\n }\n } : req;\n }\n \n const result: DBCoreTable = {\n ...table,\n schema: {\n ...schema,\n primaryKey,\n indexes: allVirtualIndexes,\n getIndexByKeyPath: findBestIndex\n },\n\n count(req) {\n return table.count(translateRequest(req));\n }, \n \n query(req) {\n return table.query(translateRequest(req));\n },\n \n openCursor(req) {\n const {keyTail, isVirtual, keyLength} = (req.query.index as VirtualIndex);\n if (!isVirtual) return table.openCursor(req);\n \n function createVirtualCursor(cursor: DBCoreCursor) : DBCoreCursor {\n function _continue (key?: any) {\n key != null ?\n cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :\n req.unique ?\n cursor.continue(\n cursor.key.slice(0, keyLength)\n .concat(req.reverse\n ? down.MIN_KEY\n : down.MAX_KEY, keyTail)\n ) :\n cursor.continue()\n }\n const virtualCursor = Object.create(cursor, {\n continue: {value: _continue},\n continuePrimaryKey: {\n value(key: any, primaryKey: any) {\n cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n }\n },\n primaryKey: {\n get() {\n return cursor.primaryKey;\n }\n },\n key: {\n get() {\n const key = cursor.key as any[]; // A virtual cursor always operates on compound key\n return keyLength === 1 ?\n key[0] : // Cursor.key should not be an array.\n key.slice(0, keyLength); // Cursor.key should be first part of array.\n }\n },\n value: {\n get() {\n return cursor.value;\n }\n }\n });\n return virtualCursor;\n }\n \n return table.openCursor(translateRequest(req))\n .then(cursor => cursor && createVirtualCursor(cursor));\n }\n };\n return result;\n }\n }\n}\n\nexport const virtualIndexMiddleware : Middleware = {\n stack: \"dbcore\",\n name: \"VirtualIndexMiddleware\",\n level: 1,\n create: createVirtualIndexMiddleware\n};\n\n","import { keys, hasOwn, toStringTag } from './utils';\n\nexport function getObjectDiff(a: any, b: any, rv?: any, prfx?: string) {\n // Compares objects a and b and produces a diff object.\n rv = rv || {};\n prfx = prfx || '';\n keys(a).forEach((prop) => {\n if (!hasOwn(b, prop)) {\n // Property removed\n rv[prfx + prop] = undefined;\n } else {\n var ap = a[prop],\n bp = b[prop];\n if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {\n const apTypeName = toStringTag(ap);\n const bpTypeName = toStringTag(bp);\n\n if (apTypeName !== bpTypeName) {\n rv[prfx + prop] = b[prop]; // Property changed to other type\n } else if (apTypeName === 'Object') {\n // Pojo objects (not Date, ArrayBuffer, Array etc). Go deep.\n getObjectDiff(ap, bp, rv, prfx + prop + '.');\n } else if (ap !== bp) {\n // Values differ.\n // Could have checked if Date, arrays or binary types have same\n // content here but I think that would be a suboptimation.\n // Prefer simplicity.\n rv[prfx + prop] = b[prop];\n }\n } else if (ap !== bp) rv[prfx + prop] = b[prop]; // Primitive value changed\n }\n });\n keys(b).forEach((prop) => {\n if (!hasOwn(a, prop)) {\n rv[prfx + prop] = b[prop]; // Property added\n }\n });\n return rv;\n}\n","import {\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreIndex,\n DBCoreTable,\n} from \"../public/types/dbcore\";\n\nexport function getEffectiveKeys (\n primaryKey: DBCoreIndex,\n req: (Pick & {keys?: any[]}) | Pick)\n{\n //const {outbound} = primaryKey;\n if (req.type === 'delete') return req.keys;\n return req.keys || req.values.map(primaryKey.extractKey)\n}\n","import {\n DBCore,\n DBCoreTable,\n DBCoreMutateResponse,\n DBCoreDeleteRangeRequest,\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreTransaction,\n DBCoreKeyRange\n} from \"../public/types/dbcore\";\nimport { nop } from '../functions/chaining-functions';\nimport { hasOwn, setByKeyPath } from '../functions/utils';\nimport { getObjectDiff } from \"../functions/get-object-diff\";\nimport { PSD } from '../helpers/promise';\n//import { LockableTableMiddleware } from '../dbcore/lockable-table-middleware';\nimport { getEffectiveKeys } from '../dbcore/get-effective-keys';\nimport { Middleware } from '../public/types/middleware';\nimport { Transaction } from '../classes/transaction';\n\nexport const hooksMiddleware: Middleware = {\n stack: \"dbcore\",\n name: \"HooksMiddleware\",\n level: 2,\n create: (downCore: DBCore) => ({\n ...downCore,\n table(tableName: string) {\n const downTable = downCore.table(tableName);\n const {primaryKey} = downTable.schema;\n \n const tableMiddleware: DBCoreTable = {\n ...downTable,\n mutate(req):Promise {\n const dxTrans = PSD.trans as Transaction;\n // Hooks can be transaction-bound. Need to grab them from transaction.table and not\n // db.table!\n const {deleting, creating, updating} = dxTrans.table(tableName).hook;\n switch (req.type) {\n case 'add':\n if (creating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'put':\n if (creating.fire === nop && updating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'delete':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'deleteRange':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>deleteRange(req), true);\n }\n // Any of the breaks above happened (no hooks) - do the default:\n return downTable.mutate(req);\n\n\n function addPutOrDelete(req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest): Promise {\n const dxTrans = PSD.trans;\n const keys = req.keys || getEffectiveKeys(primaryKey, req);\n if (!keys) throw new Error(\"Keys missing\");\n // Clone Request and set keys arg\n req = req.type === 'add' || req.type === 'put' ?\n {...req, keys} :\n {...req};\n if (req.type !== 'delete') req.values = [...req.values];\n if (req.keys) req.keys = [...req.keys];\n \n return getExistingValues(downTable, req, keys).then (existingValues => {\n const contexts = keys.map((key, i) => {\n const existingValue = existingValues[i];\n const ctx = { onerror: null, onsuccess: null };\n if (req.type === 'delete') {\n // delete operation\n deleting.fire.call(ctx, key, existingValue, dxTrans);\n } else if (req.type === 'add' || existingValue === undefined) {\n // The add() or put() resulted in a create\n const generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);\n if (key == null && generatedPrimaryKey != null) {\n key = generatedPrimaryKey;\n req.keys[i] = key;\n if (!primaryKey.outbound) {\n setByKeyPath(req.values[i], primaryKey.keyPath, key);\n }\n }\n } else {\n // The put() operation resulted in an update\n const objectDiff = getObjectDiff(existingValue, req.values[i]);\n const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n if (additionalChanges) {\n const requestedValue = req.values[i];\n Object.keys(additionalChanges).forEach(keyPath => {\n if (hasOwn(requestedValue, keyPath)) {\n // keyPath is already present as a literal property of the object\n requestedValue[keyPath] = additionalChanges[keyPath];\n } else {\n // keyPath represents a new or existing path into the object\n setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]);\n }\n });\n }\n }\n return ctx;\n });\n return downTable.mutate(req).then(({failures, results, numFailures, lastResult}) => {\n for (let i=0; i {\n contexts.forEach(ctx => ctx.onerror && ctx.onerror(error));\n return Promise.reject(error);\n });\n });\n }\n \n function deleteRange(req: DBCoreDeleteRangeRequest): Promise {\n return deleteNextChunk(req.trans, req.range, 10000);\n }\n \n function deleteNextChunk(trans: DBCoreTransaction, range: DBCoreKeyRange, limit: number) {\n // Query what keys in the DB within the given range\n return downTable.query({trans, values: false, query: {index: primaryKey, range}, limit})\n .then(({result}) => {\n // Given a set of keys, bulk delete those using the same procedure as in addPutOrDelete().\n // This will make sure that deleting hook is called.\n return addPutOrDelete({type: 'delete', keys: result, trans}).then(res => {\n if (res.numFailures > 0) return Promise.reject(res.failures[0]);\n if (result.length < limit) {\n return {failures: [], numFailures: 0, lastResult: undefined} as DBCoreMutateResponse;\n } else {\n return deleteNextChunk(trans, {...range, lower: result[result.length - 1], lowerOpen: true}, limit);\n }\n });\n })\n }\n }\n };\n //const {lock, lockableMiddleware} = LockableTableMiddleware(tableMiddleware);\n\n return tableMiddleware;\n },\n }) as DBCore\n};\n\nfunction getExistingValues(\n table: DBCoreTable,\n req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest,\n effectiveKeys: any[]\n) {\n return req.type === \"add\"\n ? Promise.resolve([])\n : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: \"immutable\" });\n}\n","import { deepClone } from \"../functions/utils\";\nimport { DBCore } from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport Promise from \"../helpers/promise\";\nimport { cmp } from '../functions/cmp';\n\nexport function getFromTransactionCache(\n keys: readonly any[],\n cache: { keys: any[]; values: any[] } | undefined | null,\n clone?: boolean\n) {\n try {\n if (!cache) return null;\n if (cache.keys.length < keys.length) return null;\n const result: any[] = [];\n // Compare if the exact same order of keys was retrieved in same transaction:\n // Allow some cached keys to be omitted from provided set of keys\n // Use case: 1. getMany(keys) 2. update a subset of those 3. call put with the updated ones ==> middlewares should be able to find old values\n for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) {\n if (cmp(cache.keys[i], keys[j]) !== 0) continue;\n result.push(clone ? deepClone(cache.values[i]) : cache.values[i]);\n ++j;\n }\n // If got all keys caller was looking for, return result.\n return result.length === keys.length ? result : null;\n } catch {\n return null;\n }\n}\n\nexport const cacheExistingValuesMiddleware: Middleware = {\n stack: \"dbcore\",\n level: -1,\n create: (core) => {\n return {\n table: (tableName) => {\n const table = core.table(tableName);\n return {\n ...table,\n getMany: (req) => {\n if (!req.cache) {\n return table.getMany(req);\n }\n const cachedResult = getFromTransactionCache(\n req.keys,\n req.trans[\"_cache\"],\n req.cache === \"clone\"\n );\n if (cachedResult) {\n return Promise.resolve(cachedResult);\n }\n return table.getMany(req).then((res) => {\n req.trans[\"_cache\"] = {\n keys: req.keys,\n values: req.cache === \"clone\" ? deepClone(res) : res,\n };\n return res;\n });\n },\n mutate: (req) => {\n // Invalidate cache on any mutate except \"add\" which can't change existing values:\n if (req.type !== \"add\") req.trans[\"_cache\"] = null;\n return table.mutate(req);\n },\n };\n },\n };\n },\n};\n","import { DBCore, DBCoreTable } from '../../public/types/dbcore';\nimport { LiveQueryContext } from '../live-query';\n\nexport function isCachableContext(ctx: LiveQueryContext, table: DBCoreTable) {\n return (\n ctx.trans.mode === 'readonly' &&\n !!ctx.subscr &&\n !ctx.trans.explicit &&\n ctx.trans.db._options.cache !== 'disabled' &&\n !table.schema.primaryKey.outbound\n );\n}\n\n","import { DBCoreCountRequest, DBCoreGetManyRequest, DBCoreGetRequest, DBCoreOpenCursorRequest, DBCoreQueryRequest } from '../../public/types/dbcore';\n\n\nexport function isCachableRequest(type: string, req: Partial) {\n switch (type) {\n case 'query':\n return req.values && !req.unique;\n case 'get':\n return false;\n case 'getMany':\n return false;\n case 'count':\n return false;\n case 'openCursor':\n return false;\n }\n}\n","import { LiveQueryContext } from \".\";\nimport { getFromTransactionCache } from \"../dbcore/cache-existing-values-middleware\";\nimport { getEffectiveKeys } from \"../dbcore/get-effective-keys\";\nimport { exceptions } from \"../errors\";\nimport { cmp } from \"../functions/cmp\";\nimport { isArray, keys } from \"../functions/utils\";\nimport { PSD } from \"../helpers/promise\";\nimport { RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport {\n DBCore,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreGetManyRequest,\n DBCoreGetRequest,\n DBCoreIndex,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreQueryResponse,\n DBCoreTable,\n DBCoreTableSchema,\n DBCoreTransaction,\n} from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport { isCachableContext } from \"./cache/is-cachable-context\";\nimport { isCachableRequest } from \"./cache/is-cachable-request\";\nimport { extendObservabilitySet } from \"./extend-observability-set\";\n\nexport const observabilityMiddleware: Middleware = {\n stack: \"dbcore\",\n level: 0,\n name: \"Observability\",\n create: (core) => {\n const dbName = core.schema.name;\n const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);\n\n return {\n ...core,\n transaction: (stores, mode, options) => {\n if (PSD.subscr && mode !== 'readonly') {\n throw new exceptions.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${(PSD as LiveQueryContext).querier}`);\n }\n return core.transaction(stores, mode, options);\n },\n table: (tableName) => {\n const table = core.table(tableName);\n const { schema } = table;\n const { primaryKey, indexes } = schema;\n const { extractKey, outbound } = primaryKey;\n const indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(\n (index) => index.compound && (index.keyPath as string[]).includes(primaryKey.keyPath as string)\n );\n const tableClone: DBCoreTable = {\n ...table,\n mutate: (req) => {\n const trans = req.trans as DBCoreTransaction & {\n mutatedParts?: ObservabilitySet;\n };\n const mutatedParts = req.mutatedParts || (req.mutatedParts = {});\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (mutatedParts[part] ||\n (mutatedParts[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n\n const { type } = req;\n let [keys, newObjs] =\n req.type === \"deleteRange\"\n ? [req.range] // keys will be an DBCoreKeyRange object - transformed later on to a [from,to]-style range.\n : req.type === \"delete\"\n ? [req.keys] // keys known already here. newObjs will be undefined.\n : req.values.length < 50\n ? [getEffectiveKeys(primaryKey, req).filter(id => id), req.values] // keys except autoIncremented - they will be added later on.\n : []; // keys and newObjs will both be undefined - changeSpec will become true (changed for entire table)\n\n const oldCache = req.trans[\"_cache\"];\n\n // Add the mutated table and optionally keys to the mutatedTables set on the transaction.\n // Used by subscribers to txcommit event and for Collection.prototype.subscribe().\n if (isArray(keys)) {\n // keys is an array - delete, add or put of less than 50 rows.\n // Individual keys (add put or delete)\n pkRangeSet.addKeys(keys);\n // Only get oldObjs if they have been cached recently\n // (This applies to Collection.modify() only, but also if updating/deleting hooks have subscribers)\n const oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null;\n\n // Supply detailed values per index for both old and new objects:\n if (!oldObjs) {\n // add, delete or put and we don't know old values.\n // Indicate this in the \":dels\" part, for the sake of count() and primaryKeys() queries only!\n delsRangeSet.addKeys(keys);\n }\n if (oldObjs || newObjs) {\n // No matter if knowning oldObjs or not, track the indices if it's a put, add or delete.\n trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);\n }\n } else if (keys) {\n // keys is a DBCoreKeyRange object. Transform it to [from,to]-style range.\n // As we can't know deleted index ranges, mark index-based subscriptions must trigger.\n const range = { from: keys.lower, to: keys.upper };\n delsRangeSet.add(range);\n // deleteRange. keys is a DBCoreKeyRange objects. Transform it to [from,to]-style range.\n pkRangeSet.add(range);\n } else {\n // Too many requests to record the details without slowing down write performance.\n // Let's just record a generic large range on primary key, the virtual :dels index and\n // all secondary indices:\n pkRangeSet.add(FULL_RANGE);\n delsRangeSet.add(FULL_RANGE);\n schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE));\n }\n\n return table.mutate(req).then((res) => {\n // Merge the mutated parts from the request into the transaction's mutatedParts\n // now when the request went fine.\n if (keys && (req.type === 'add' || req.type === 'put')) {\n // Less than 50 requests (keys truthy) (otherwise we've added full range anyway)\n // autoincrement means we might not have got all keys until now\n pkRangeSet.addKeys(res.results);\n if (indexesWithAutoIncPK) {\n // Dexie Issue 1946:\n // If an auto-incremented primary key is part of a compound index,\n // we need to compute the resulting value of that index after inserting\n // the rows.\n indexesWithAutoIncPK.forEach(idx => {\n // Extract values of this compound index where primary key is not yet set:\n const idxVals = req.values.map(v => idx.extractKey(v));\n // Find the position of the primary key in the index:\n const pkPos = (idx.keyPath as string[]).findIndex(prop => prop === primaryKey.keyPath);\n // Update idxVals with the resulting primary keys to complete the index value:\n res.results!.forEach(pk => idxVals[pkPos] = pk);\n // Add the updated index to the rangeset:\n getRangeSet(idx.name).addKeys(idxVals);\n });\n }\n }\n trans.mutatedParts = extendObservabilitySet (\n trans.mutatedParts || {},\n mutatedParts\n );\n return res;\n });\n },\n };\n\n const getRange: (req: any) => [DBCoreIndex, RangeSet] = ({\n query: { index, range },\n }:\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest) => [\n index,\n new RangeSet(range.lower ?? core.MIN_KEY, range.upper ?? core.MAX_KEY),\n ];\n\n const readSubscribers: {[method in\n Exclude]: \n (req: any) => [DBCoreIndex, RangeSet]\n } = {\n get: (req) => [primaryKey, new RangeSet(req.key)],\n getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)],\n count: getRange,\n query: getRange,\n openCursor: getRange,\n }\n\n keys(readSubscribers).forEach((method: 'get' | 'getMany' | 'count' | 'query' | 'openCursor') => {\n tableClone[method] = function (\n req:\n | DBCoreGetRequest\n | DBCoreGetManyRequest\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest\n ) {\n const { subscr } = PSD as LiveQueryContext;\n const isLiveQuery = !!subscr;\n let cachable = isCachableContext(PSD as LiveQueryContext, table) && isCachableRequest(method, req);\n const obsSet = cachable\n ? req.obsSet = {} // Implicit read transaction - track changes for this query only for the request's duration\n : subscr; // Explicit read transaction - track changes across entire live query\n\n if (isLiveQuery) {\n // Current zone want's to track all queries so they can be subscribed to.\n // (The query is executed within a \"liveQuery\" zone)\n // Check whether the query applies to a certain set of ranges:\n // Track what we should be observing:\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (obsSet[part] ||\n (obsSet[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const [queriedIndex, queriedRanges] = readSubscribers[method](req);\n // A generic rule here: queried ranges should always be subscribed to.\n if (method === 'query' && queriedIndex.isPrimaryKey && !(req as DBCoreQueryRequest).values) {\n // A pure primay-key based Collection where only .primaryKeys() is requested. Don't wakeup on other changes than added or deleted primary keys within queried range.\n delsRangeSet.add(queriedRanges);\n } else {\n getRangeSet(queriedIndex.name || \"\").add(queriedRanges);\n }\n if (!queriedIndex.isPrimaryKey) {\n // Only count(), query() and openCursor() operates on secondary indices.\n // Since put(), delete() and deleteRange() mutations may happen without knowing oldObjs,\n // the mutate() method will be missing what secondary indices that are being deleted from\n // the subscribed range. We are working around this issue by recording all the resulting\n // primary keys from the queries. This only works for those kinds of queries where we can\n // derive the primary key from the result.\n // In this block we are accomplishing this using various strategies depending on the properties\n // of the query result.\n\n if (method === \"count\") {\n // We've got a problem! Delete and put mutations happen without known the oldObjs.\n // Those mutation could change the count.\n // Solution: Dedicated \":dels\" url represends a subscription to all mutations without oldObjs\n // (specially triggered in the mutators put(), delete() and deleteRange() when they don't know oldObject)\n delsRangeSet.add(FULL_RANGE);\n } else {\n // openCursor() or query()\n\n // Prepare a keysPromise in case the we're doing an IDBIndex.getAll() on a store with outbound keys.\n const keysPromise =\n method === \"query\" &&\n outbound &&\n (req as DBCoreQueryRequest).values &&\n table.query({\n ...(req as DBCoreQueryRequest),\n values: false,\n });\n\n return table[method].apply(this, arguments).then((res) => {\n if (method === \"query\") {\n if (outbound && (req as DBCoreQueryRequest).values) {\n // If keys are outbound, we can't use extractKey to map what keys to observe.\n // We've queried an index (like 'dateTime') on an outbound table\n // and retrieve a list of objects\n // from who we cannot know their primary keys.\n // \"Luckily\" though, we've prepared the keysPromise to assist us in exact this condition.\n return keysPromise.then(\n ({ result: resultingKeys }: DBCoreQueryResponse) => {\n pkRangeSet.addKeys(resultingKeys);\n return res;\n }\n );\n }\n // query() inbound values, keys or outbound keys. Secondary indexes only since\n // for primary keys we would only add results within the already registered range.\n const pKeys = (req as DBCoreQueryRequest).values\n ? (res as DBCoreQueryResponse).result.map(extractKey)\n : (res as DBCoreQueryResponse).result;\n if ((req as DBCoreQueryRequest).values) {\n // Subscribe to any mutation made on the returned keys,\n // so that we detect both deletions and updated properties.\n pkRangeSet.addKeys(pKeys);\n } else {\n // Subscribe only to mutations on the returned keys\n // in case the mutator was unable to know oldObjs.\n // If it has oldObj, the mutator won't put anything in \":dels\" because\n // it can more fine-grained put the exact removed and added index value in the correct\n // index range that we subscribe to in the queried range sets.\n // We don't load values so a change on a property outside our index will not\n // require us to re-execute the query.\n delsRangeSet.addKeys(pKeys);\n }\n } else if (method === \"openCursor\") {\n // Caller requests a cursor.\n // For the same reason as when method===\"query\", we only need to observe\n // those keys whose values are possibly used or rendered - which could\n // only happen on keys where they get the cursor's key, primaryKey or value.\n const cursor: DBCoreCursor | null = res;\n const wantValues = (req as DBCoreOpenCursorRequest).values;\n return (\n cursor &&\n Object.create(cursor, {\n key: {\n get() {\n delsRangeSet.addKey(cursor.primaryKey);\n return cursor.key;\n },\n },\n primaryKey: {\n get() {\n const pkey = cursor.primaryKey;\n delsRangeSet.addKey(pkey);\n return pkey;\n },\n },\n value: {\n get() {\n wantValues && pkRangeSet.addKey(cursor.primaryKey);\n return cursor.value;\n },\n },\n })\n );\n }\n return res;\n });\n }\n }\n }\n return table[method].apply(this, arguments);\n };\n });\n return tableClone;\n },\n };\n },\n};\n\nfunction trackAffectedIndexes(\n getRangeSet: (index: string) => RangeSet,\n schema: DBCoreTableSchema,\n oldObjs: readonly any[] | undefined,\n newObjs: readonly any[] | undefined\n) {\n function addAffectedIndex(ix: DBCoreIndex) {\n const rangeSet = getRangeSet(ix.name || \"\");\n function extractKey(obj: any) {\n return obj != null ? ix.extractKey(obj) : null;\n }\n const addKeyOrKeys = (key: any) => ix.multiEntry && isArray(key)\n // multiEntry and the old property was an array - add each array entry to the rangeSet:\n ? key.forEach(key => rangeSet.addKey(key))\n // Not multiEntry or the old property was not an array - add each array entry to the rangeSet:\n : rangeSet.addKey(key);\n\n (oldObjs || newObjs).forEach((_, i) => {\n const oldKey = oldObjs && extractKey(oldObjs[i]);\n const newKey = newObjs && extractKey(newObjs[i]);\n if (cmp(oldKey, newKey) !== 0) {\n // The index has changed. Add both old and new value of the index.\n if (oldKey != null) addKeyOrKeys(oldKey); // If oldKey is invalid key, addKey() will be a noop.\n if (newKey != null) addKeyOrKeys(newKey); // If newKey is invalid key, addKey() will be a noop.\n }\n });\n }\n schema.indexes.forEach(addAffectedIndex);\n}\n","import { delArrayItem, isArray } from '../../functions/utils';\nimport { TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreMutateRequest,\n DBCoreMutateResponse,\n} from '../../public/types/dbcore';\n\nexport function adjustOptimisticFromFailures(\n tblCache: TblQueryCache,\n req: DBCoreMutateRequest,\n res: DBCoreMutateResponse\n): DBCoreMutateRequest {\n if (res.numFailures === 0) return req;\n if (req.type === 'deleteRange') {\n // numFailures > 0 means the deleteRange operation failed in its whole.\n return null;\n }\n\n const numBulkOps = req.keys\n ? req.keys.length\n : 'values' in req && req.values\n ? req.values.length\n : 1;\n if (res.numFailures === numBulkOps) {\n // Same number of failures as the number of ops. This means that all ops failed.\n return null;\n }\n\n const clone: DBCoreMutateRequest = { ...req };\n\n if (isArray(clone.keys)) {\n clone.keys = clone.keys.filter((_, i) => !(i in res.failures));\n }\n if ('values' in clone && isArray(clone.values)) {\n clone.values = clone.values.filter((_, i) => !(i in res.failures));\n }\n return clone;\n}\n","import { cmp } from '../../functions/cmp';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function isAboveLower(key: IndexableType, range: DBCoreKeyRange) {\n return range.lower === undefined\n ? true // lower is less than anything because it is undefined\n : range.lowerOpen\n ? cmp(key, range.lower) > 0 // lowerOpen: Exclude lower bound\n : cmp(key, range.lower) >= 0; // !lowerOpen: Include lower bound\n}\n\nexport function isBelowUpper(key: IndexableType, range: DBCoreKeyRange) {\n return range.upper === undefined\n ? true // upper is greater than anything because it is undefined\n : range.upperOpen\n ? cmp(key, range.upper) < 0 // upperOpen: Exclude upper bound\n : cmp(key, range.upper) <= 0; // !upperOpen: Include upper bound\n}\n\nexport function isWithinRange(key: IndexableType, range: DBCoreKeyRange) {\n return isAboveLower(key, range) && isBelowUpper(key, range);\n}\n","import { cmp } from '../../functions/cmp';\nimport { deepClone, isArray } from '../../functions/utils';\nimport { RangeSet, rangesOverlap } from '../../helpers/rangeset';\nimport { CacheEntry } from '../../public/types/cache';\nimport {\n DBCoreIndex,\n DBCoreMutateRequest,\n DBCoreQueryRequest,\n DBCoreTable,\n} from '../../public/types/dbcore';\nimport { isWithinRange } from './is-within-range';\n\nexport function applyOptimisticOps(\n result: any[],\n req: DBCoreQueryRequest,\n ops: DBCoreMutateRequest[] | undefined,\n table: DBCoreTable,\n cacheEntry: CacheEntry,\n immutable: boolean\n): any[] {\n if (!ops || ops.length === 0) return result;\n const index = req.query.index;\n const { multiEntry } = index;\n const queryRange = req.query.range;\n const primaryKey = table.schema.primaryKey;\n const extractPrimKey = primaryKey.extractKey!;\n const extractIndex = index.extractKey!;\n const extractLowLevelIndex = (index.lowLevelIndex || index).extractKey!;\n\n let finalResult = ops.reduce((result, op) => {\n let modifedResult = result;\n const includedValues =\n op.type === 'add' || op.type === 'put'\n ? op.values.filter((v) => {\n const key = extractIndex(v);\n return multiEntry && isArray(key) // multiEntry index work like plain index unless key is array\n ? key.some((k) => isWithinRange(k, queryRange)) // multiEntry and array key\n : isWithinRange(key, queryRange); // multiEntry but not array key\n }).map(v => {\n v = deepClone(v);// v might come from user so we can't just freeze it.\n if (immutable) Object.freeze(v);\n return v;\n })\n : [];\n switch (op.type) {\n case 'add':\n modifedResult = result.concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'put':\n const keySet = new RangeSet().addKeys(\n op.values.map((v) => extractPrimKey(v))\n );\n modifedResult = result\n .filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keySet);\n })\n .concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'delete':\n const keysToDelete = new RangeSet().addKeys(op.keys);\n modifedResult = result.filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keysToDelete);\n });\n\n break;\n case 'deleteRange':\n const range = op.range;\n modifedResult = result.filter((item) => !isWithinRange(extractPrimKey(item), range));\n break;\n }\n return modifedResult;\n }, result);\n\n // If no changes were made, we can return the original result.\n if (finalResult === result) return result;\n\n // Sort the result on sortIndex:\n finalResult.sort((a, b) =>\n cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) ||\n cmp(extractPrimKey(a), extractPrimKey(b))\n );\n\n // If we have a limit we need to respect it:\n if (req.limit && req.limit < Infinity) {\n if (finalResult.length > req.limit) {\n finalResult.length = req.limit; // Cut of any extras after sorting correctly.\n } else if (result.length === req.limit && finalResult.length < req.limit) {\n // We're missing some items because of the limit. We need to add them back.\n // The easiest way is to mark the cache entry as dirty, which will cause\n // it to be requeried after the write-transaction successfully completes.\n cacheEntry.dirty = true;\n }\n }\n return immutable ? Object.freeze(finalResult) as any[] : finalResult;\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function areRangesEqual(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n cmp(r1.lower, r2.lower) === 0 &&\n cmp(r1.upper, r2.upper) === 0 &&\n !!r1.lowerOpen === !!r2.lowerOpen &&\n !!r1.upperOpen === !!r2.upperOpen\n );\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function compareLowers(lower1: any, lower2: any, lowerOpen1: boolean, lowerOpen2: boolean) {\n if (lower1 === undefined) return lower2 !== undefined ? -1 : 0;\n if (lower2 === undefined) return 1; // since lower1 !== undefined\n const c = cmp(lower1, lower2);\n if (c === 0) {\n if (lowerOpen1 && lowerOpen2) return 0;\n if (lowerOpen1) return 1\n if (lowerOpen2) return -1;\n }\n return c;\n}\n\nexport function compareUppers(upper1: any, upper2: any, upperOpen1: boolean, upperOpen2: boolean) {\n if (upper1 === undefined) return upper2 !== undefined ? 1 : 0;\n if (upper2 === undefined) return -1; // since upper1 !== undefined\n const c = cmp(upper1, upper2);\n if (c === 0) {\n if (upperOpen1 && upperOpen2) return 0;\n if (upperOpen1) return -1\n if (upperOpen2) return 1;\n }\n return c;\n}\n\nexport function isSuperRange(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 &&\n compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0\n );\n}","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreCountRequest,\n DBCoreQueryRequest,\n} from '../../public/types/dbcore';\nimport { areRangesEqual } from './are-ranges-equal';\nimport { cache } from './cache';\nimport { isSuperRange } from './is-super-range';\n\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query',\n req: DBCoreQueryRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'count',\n req: DBCoreCountRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query' | 'count',\n req: Partial & Partial\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]] {\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return [];\n const queries = tblCache.queries[type];\n if (!queries) return [null, false, tblCache, null];\n const indexName = req.query ? req.query.index.name : null;\n const entries = queries[indexName || ''];\n if (!entries) return [null, false, tblCache, null];\n\n switch (type) {\n case 'query':\n const equalEntry = entries.find(\n (entry) =>\n (entry.req as DBCoreQueryRequest).limit === req.limit &&\n (entry.req as DBCoreQueryRequest).values === req.values &&\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n if (equalEntry)\n return [\n equalEntry,\n true, // exact match\n tblCache,\n entries,\n ];\n const superEntry = entries.find((entry) => {\n const limit = 'limit' in entry.req ? entry.req.limit : Infinity;\n return (\n limit >= req.limit &&\n (req.values ? (entry.req as DBCoreQueryRequest).values : true) &&\n isSuperRange(entry.req.query.range, req.query.range)\n );\n });\n return [superEntry, false, tblCache, entries];\n case 'count':\n const countQuery = entries.find((entry) =>\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n return [countQuery, !!countQuery, tblCache, entries];\n }\n}\n","import { delArrayItem } from \"../../functions/utils\";\nimport { CacheEntry } from \"../../public/types/cache\";\n\nexport function subscribeToCacheEntry(cacheEntry: CacheEntry, container: CacheEntry[], requery: ()=>void, signal: AbortSignal) {\n cacheEntry.subscribers.add(requery);\n signal.addEventListener(\"abort\", () => {\n cacheEntry.subscribers.delete(requery);\n if (cacheEntry.subscribers.size === 0) {\n enqueForDeletion(cacheEntry, container);\n }\n });\n}\n\n\nfunction enqueForDeletion(cacheEntry: CacheEntry, container: CacheEntry[]) {\n setTimeout(() => {\n if (cacheEntry.subscribers.size === 0) { // Still empty (no new subscribers readded after grace time)\n delArrayItem(container, cacheEntry);\n }\n }, 3000);\n}\n","import { LiveQueryContext } from '..';\nimport type { Transaction } from '../../classes/transaction';\nimport { getEffectiveKeys } from '../../dbcore/get-effective-keys';\nimport { deepClone, delArrayItem, setByKeyPath } from '../../functions/utils';\nimport DexiePromise, { PSD } from '../../helpers/promise';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport {\n DBCore, DBCoreMutateRequest, DBCoreMutateResponse, DBCoreQueryRequest,\n DBCoreQueryResponse\n} from '../../public/types/dbcore';\nimport { Middleware } from '../../public/types/middleware';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { adjustOptimisticFromFailures } from './adjust-optimistic-request-from-failures';\nimport { applyOptimisticOps } from './apply-optimistic-ops';\nimport { cache } from './cache';\nimport { findCompatibleQuery } from './find-compatible-query';\nimport { isCachableContext } from './is-cachable-context';\nimport { isCachableRequest } from './is-cachable-request';\nimport { signalSubscribersLazily } from './signalSubscribers';\nimport { subscribeToCacheEntry } from './subscribe-cachentry';\n\nexport const cacheMiddleware: Middleware = {\n stack: 'dbcore',\n level: 0,\n name: 'Cache',\n create: (core) => {\n const dbName = core.schema.name;\n const coreMW: DBCore = {\n ...core,\n transaction: (stores, mode, options) => {\n const idbtrans = core.transaction(\n stores,\n mode,\n options\n ) as IDBTransaction & {\n mutatedParts?: ObservabilitySet;\n _explicit?: boolean;\n };\n // Maintain TblQueryCache.ops array when transactions commit or abort\n if (mode === 'readwrite') {\n const ac = new AbortController();\n const { signal } = ac;\n const endTransaction = (wasCommitted: boolean) => () => {\n ac.abort();\n if (mode === 'readwrite') {\n // Collect which subscribers to notify:\n const affectedSubscribers = new Set<()=>void>();\n\n // Go through all tables in transaction and check if they have any optimistic updates\n for (const storeName of stores) {\n const tblCache = cache[`idb://${dbName}/${storeName}`];\n if (tblCache) {\n const table = core.table(storeName);\n // Pick optimistic ops that are part of this transaction\n const ops = tblCache.optimisticOps.filter(\n (op) => op.trans === idbtrans\n );\n // Transaction was marked as _explicit in enterTransactionScope(), transaction-helpers.ts.\n if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) {\n // Invalidate all queries that overlap with the mutated parts and signal their subscribers\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) {\n delArrayItem(entries, entry); // Remove the entry from the cache so it can be refreshed\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n } else if (ops.length > 0) {\n // Remove them from the optimisticOps array\n tblCache.optimisticOps = tblCache.optimisticOps.filter(\n (op) => op.trans !== idbtrans\n );\n // Commit or abort the optimistic updates\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (\n entry.res != null && // if entry.promise but not entry.res, we're fine. Query will resume now and get the result.\n idbtrans.mutatedParts/* &&\n obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)*/\n ) {\n if (wasCommitted && !entry.dirty) {\n const freezeResults = Object.isFrozen(entry.res);\n const modRes = applyOptimisticOps(\n entry.res as any[],\n entry.req,\n ops,\n table,\n entry,\n freezeResults\n );\n if (entry.dirty) {\n // Found out at this point that the entry is dirty - not to rely on!\n delArrayItem(entries, entry);\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n } else if (modRes !== entry.res) {\n entry.res = modRes;\n // Update promise\n entry.promise = DexiePromise.resolve({result: modRes} satisfies DBCoreQueryResponse);\n \n // No need to notify subscribers. They already have this value.\n // We have just updated the value of the cache without having to\n // requery the database - because we know the result for this\n // query based on computing the operations and applying them\n // to the previous result.\n }\n } else {\n if (entry.dirty) {\n // If the entry is dirty we need to get rid of it so that\n // a new entry will be created when the query is run again.\n delArrayItem(entries, entry);\n }\n // If we're not committing, we need to notify subscribers that the\n // optimistic updates are no longer valid.\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n }\n }\n }\n }\n affectedSubscribers.forEach((requery) => requery());\n }\n };\n idbtrans.addEventListener('abort', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('error', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('complete', endTransaction(true), {\n signal,\n });\n }\n return idbtrans;\n },\n table(tableName: string) {\n const downTable = core.table(tableName);\n const primKey = downTable.schema.primaryKey;\n const tableMW = {\n ...downTable,\n mutate(req: DBCoreMutateRequest): Promise {\n const trans = PSD.trans as Transaction;\n if (\n primKey.outbound || // Non-inbound tables are harded to apply optimistic updates on because we can't know primary key of results\n trans.db._options.cache === 'disabled' || // User has opted-out from caching\n trans.explicit // It's an explicit write transaction being made. Don't affect cache until transaction commits.\n ) {\n // Just forward the request to the core.\n return downTable.mutate(req);\n }\n // Find the TblQueryCache for this table:\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return downTable.mutate(req);\n\n const promise = downTable.mutate(req);\n if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(key => key == null))) {\n // There are some autoIncremented keys not set yet. Need to wait for completion before we can reliably enqueue the operation.\n // (or there are too many objects so we lazy out to avoid performance bottleneck for large bulk inserts)\n promise.then((res) => { // We need to extract result keys and generate cloned values with the keys set (so that applyOptimisticOps can work)\n // But we have a problem! The req.mutatedParts is still not complete so we have to actively add the keys to the unsignaledParts set manually.\n const reqWithResolvedKeys = {\n ...req,\n values: req.values.map((value, i) => {\n const valueWithKey = primKey.keyPath?.includes('.')\n ? deepClone(value)\n : {\n ...value,\n };\n setByKeyPath(valueWithKey, primKey.keyPath, res.results![i]);\n return valueWithKey;\n })\n };\n const adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res);\n tblCache.optimisticOps.push(adjustedReq);\n // Signal subscribers after the observability middleware has complemented req.mutatedParts with the new keys.\n // We must queue the task so that we get the req.mutatedParts updated by observability middleware first.\n // If we refactor the dependency between observability middleware and this middleware we might not need to queue the task.\n queueMicrotask(()=>req.mutatedParts && signalSubscribersLazily(req.mutatedParts)); // Reason for double laziness: in user awaits put and then does another put, signal once.\n });\n } else {\n // Enque the operation immediately\n tblCache.optimisticOps.push(req);\n // Signal subscribers that there are mutated parts\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts);\n promise.then((res) => {\n if (res.numFailures > 0) {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n const adjustedReq = adjustOptimisticFromFailures(tblCache, req, res);\n if (adjustedReq) {\n tblCache.optimisticOps.push(adjustedReq);\n }\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n }\n });\n promise.catch(()=> {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n });\n }\n return promise;\n },\n query(req: DBCoreQueryRequest): Promise {\n if (!isCachableContext(PSD, downTable) || !isCachableRequest(\"query\", req)) return downTable.query(req);\n const freezeResults =\n (PSD as LiveQueryContext).trans?.db._options.cache === 'immutable';\n const { requery, signal } = PSD as LiveQueryContext;\n let [cacheEntry, exactMatch, tblCache, container] =\n findCompatibleQuery(dbName, tableName, 'query', req);\n if (cacheEntry && exactMatch) {\n cacheEntry.obsSet = req.obsSet!; // So that optimistic result is monitored.\n // How? - because observability-middleware will track result where optimistic\n // mutations are applied and record it in the cacheEntry.\n // TODO: CHANGE THIS! The difference is resultKeys only.\n // Wanted behavior:\n // * cacheEntry obsSet should represent the obsSet without optimistic updates (so it can be checked when merging ops in tx commit)\n // * cacheEntry optimisticObsSet should represent the obsSet with current optimistic updates. It should be updated when adding an op\n // by adding the primary keys of the put/add/delete operation to the set.\n // * observability-middleware should stop recording req.obsSet when a cache entry exact match is found because it won't be used anyway.\n // I'm thinking of merging observability-middleware with cache-middleware into one single middleware because the dependencies are too\n // tight between them.\n } else {\n // --> TODO here: If not exact match, check if we have a superset to extract\n // the data from.\n\n // No cached result found. We need to query the database and cache the result.\n const promise = downTable.query(req).then((res) => {\n // Freeze or clone results\n const result = res.result;\n if (cacheEntry) cacheEntry.res = result;\n if (freezeResults) {\n // For performance reasons don't deep freeze.\n // Only freeze the top-level array and its items.\n // This is good enough to teach users that the result must be treated as immutable\n // without enforcing it recursively on the entire result (which is not even possible\n // for things like Date objects and typed arrays)\n for (let i = 0, l = result.length; i < l; ++i) {\n Object.freeze(result[i]);\n }\n Object.freeze(result);\n } else {\n // If not frozen, we need to clone the result to avoid user mutating the cache\n // When we do this, user's must feel conformable with the fact that the result\n // can be mutated deeply - user is not expected to have any respect for immutability.\n res.result = deepClone(result);\n }\n return res;\n }).catch(error => {\n // In case the query operation failed, we need to remove it from the cache\n // so that subsequent calls does not get the same error but re-evaluate\n // the query.\n if (container && cacheEntry) delArrayItem(container, cacheEntry);\n return Promise.reject(error);\n });\n cacheEntry = {\n obsSet: req.obsSet!,\n promise,\n subscribers: new Set(),\n type: 'query',\n req,\n dirty: false,\n };\n if (container) {\n container.push(cacheEntry);\n } else {\n container = [cacheEntry];\n if (!tblCache) {\n tblCache = cache[`idb://${dbName}/${tableName}`] = {\n queries: {\n query: {},\n count: {},\n },\n objs: new Map(),\n optimisticOps: [],\n unsignaledParts: {}\n };\n }\n tblCache.queries.query[req.query.index.name || ''] = container;\n }\n }\n subscribeToCacheEntry(cacheEntry, container!, requery, signal);\n return cacheEntry.promise.then((res: DBCoreQueryResponse) => {\n return {\n result: applyOptimisticOps(\n res.result,\n req,\n tblCache?.optimisticOps,\n downTable,\n cacheEntry!,\n freezeResults\n ) as any[], // readonly any[]\n };\n });\n },\n };\n return tableMW;\n },\n };\n return coreMW;\n },\n};\n\n\n","import { type Dexie } from \"../classes/dexie\";\nimport { type Table } from \"../classes/table\";\nimport { type Transaction } from \"../classes/transaction\";\n\nexport function vipify(\n target: T,\n vipDb: Dexie\n): T {\n return new Proxy(target, {\n get (target, prop, receiver) {\n // The \"db\" prop of the table or transaction is the only one we need to\n // override. The rest of the props can be accessed from the original\n // object.\n if (prop === 'db') return vipDb;\n return Reflect.get(target, prop, receiver);\n }\n });\n}\n","// Import types from the public API\nimport { Dexie as IDexie } from \"../../public/types/dexie\";\nimport { DexieOptions, DexieConstructor } from \"../../public/types/dexie-constructor\";\nimport { DbEvents } from \"../../public/types/db-events\";\n//import { PromiseExtended, PromiseExtendedConstructor } from '../../public/types/promise-extended';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from \"../../public/types/table-schema\";\nimport { DbSchema } from '../../public/types/db-schema';\n\n// Internal imports\nimport { Table, TableConstructor, createTableConstructor } from \"../table\";\nimport { Collection, CollectionConstructor, createCollectionConstructor } from '../collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { WhereClauseConstructor, createWhereClauseConstructor } from '../where-clause/where-clause-constructor';\nimport { Transaction } from '../transaction';\nimport { TransactionConstructor, createTransactionConstructor } from '../transaction/transaction-constructor';\nimport { Version } from \"../version/version\";\nimport { VersionConstructor, createVersionConstructor } from '../version/version-constructor';\n\n// Other imports...\nimport { DexieEventSet } from '../../public/types/dexie-event-set';\nimport { DexieExceptionClasses } from '../../public/types/errors';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\nimport Promise, { PSD, globalPSD } from '../../helpers/promise';\nimport { extend, override, keys, hasOwn } from '../../functions/utils';\nimport Events from '../../helpers/Events';\nimport { maxString, connections, READONLY, READWRITE } from '../../globals/constants';\nimport { getMaxKey } from '../../functions/quirks';\nimport { exceptions } from '../../errors';\nimport { lowerVersionFirst } from '../version/schema-helpers';\nimport { dexieOpen } from './dexie-open';\nimport { wrap } from '../../helpers/promise';\nimport { _onDatabaseDeleted } from '../../helpers/database-enumerator';\nimport { eventRejectHandler } from '../../functions/event-wrappers';\nimport { extractTransactionArgs, enterTransactionScope } from './transaction-helpers';\nimport { TransactionMode } from '../../public/types/transaction-mode';\nimport { rejection } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { DBCore } from '../../public/types/dbcore';\nimport { Middleware, DexieStacks } from '../../public/types/middleware';\nimport { virtualIndexMiddleware } from '../../dbcore/virtual-index-middleware';\nimport { hooksMiddleware } from '../../hooks/hooks-middleware';\nimport { IndexableType } from '../../public';\nimport { observabilityMiddleware } from '../../live-query/observability-middleware';\nimport { cacheExistingValuesMiddleware } from '../../dbcore/cache-existing-values-middleware';\nimport { cacheMiddleware } from \"../../live-query/cache/cache-middleware\";\nimport { vipify } from \"../../helpers/vipify\";\n\nexport interface DbReadyState {\n dbOpenError: any;\n isBeingOpened: boolean;\n onReadyBeingFired: undefined | Function[];\n openComplete: boolean;\n dbReadyResolve: () => void;\n dbReadyPromise: Promise;\n cancelOpen: (reason?: Error) => void;\n openCanceller: Promise & { _stackHolder?: Error };\n autoSchema: boolean;\n vcFired?: boolean;\n PR1398_maxLoop?: number;\n autoOpen?: boolean;\n}\n\nexport class Dexie implements IDexie {\n _options: DexieOptions;\n _state: DbReadyState;\n _versions: Version[];\n _storeNames: string[];\n _deps: DexieDOMDependencies;\n _allTables: { [name: string]: Table; };\n _createTransaction: (this: Dexie, mode: IDBTransactionMode, storeNames: ArrayLike, dbschema: { [tableName: string]: TableSchema; }, parentTransaction?: Transaction) => Transaction;\n _dbSchema: { [tableName: string]: TableSchema; };\n _hasGetAll?: boolean;\n _maxKey: IndexableType;\n _fireOnBlocked: (ev: Event) => void;\n _middlewares: {[StackName in keyof DexieStacks]?: Middleware[]} = {};\n _vip?: boolean;\n _novip: Dexie;// db._novip is to escape to orig db from db.vip.\n core: DBCore;\n\n name: string;\n verno: number = 0;\n idbdb: IDBDatabase | null;\n vip: Dexie;\n on: DbEvents;\n\n Table: TableConstructor;\n WhereClause: WhereClauseConstructor;\n Collection: CollectionConstructor;\n Version: VersionConstructor;\n Transaction: TransactionConstructor;\n static disableBfCache?: boolean;\n\n constructor(name: string, options?: DexieOptions) {\n const deps = (Dexie as any as DexieConstructor).dependencies;\n this._options = options = {\n // Default Options\n addons: (Dexie as any as DexieConstructor).addons, // Pick statically registered addons by default\n autoOpen: true, // Don't require db.open() explicitely.\n // Default DOM dependency implementations from static prop.\n indexedDB: deps.indexedDB, // Backend IndexedDB api. Default to browser env.\n IDBKeyRange: deps.IDBKeyRange, // Backend IDBKeyRange api. Default to browser env.\n cache: 'cloned', // Default to cloned for backward compatibility. For best performance and least memory consumption use 'immutable'.\n ...options\n }; \n this._deps = {\n indexedDB: options.indexedDB as IDBFactory,\n IDBKeyRange: options.IDBKeyRange as typeof IDBKeyRange\n };\n const {\n addons,\n } = options;\n this._dbSchema = {};\n this._versions = [];\n this._storeNames = [];\n this._allTables = {};\n this.idbdb = null;\n this._novip = this;\n const state: DbReadyState = {\n dbOpenError: null,\n isBeingOpened: false,\n onReadyBeingFired: null,\n openComplete: false,\n dbReadyResolve: nop,\n dbReadyPromise: null as Promise,\n cancelOpen: nop,\n openCanceller: null as Promise,\n autoSchema: true,\n PR1398_maxLoop: 3,\n autoOpen: options.autoOpen,\n };\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n this._state = state;\n this.name = name;\n this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", \"close\", { ready: [promisableChain, nop] }) as DbEvents;\n this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => {\n return (subscriber, bSticky) => {\n (Dexie as any as DexieConstructor).vip(() => {\n const state = this._state;\n if (state.openComplete) {\n // Database already open. Call subscriber asap.\n if (!state.dbOpenError) Promise.resolve().then(subscriber);\n // bSticky: Also subscribe to future open sucesses (after close / reopen) \n if (bSticky) subscribe(subscriber);\n } else if (state.onReadyBeingFired) {\n // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected\n state.onReadyBeingFired.push(subscriber);\n if (bSticky) subscribe(subscriber);\n } else {\n // Database not yet open. Subscribe to it.\n subscribe(subscriber);\n // If bSticky is falsy, make sure to unsubscribe subscriber when fired once.\n const db = this;\n if (!bSticky) subscribe(function unsubscribe() {\n db.on.ready.unsubscribe(subscriber);\n db.on.ready.unsubscribe(unsubscribe);\n });\n }\n });\n }\n });\n\n // Create derived classes bound to this instance of Dexie:\n this.Collection = createCollectionConstructor(this);\n this.Table = createTableConstructor(this);\n this.Transaction = createTransactionConstructor(this);\n this.Version = createVersionConstructor(this);\n this.WhereClause = createWhereClauseConstructor(this);\n\n // Default subscribers to \"versionchange\" and \"blocked\".\n // Can be overridden by custom handlers. If custom handlers return false, these default\n // behaviours will be prevented.\n this.on(\"versionchange\", ev => {\n // Default behavior for versionchange event is to close database connection.\n // Caller can override this behavior by doing db.on(\"versionchange\", function(){ return false; });\n // Let's not block the other window from making it's delete() or open() call.\n // NOTE! This event is never fired in IE,Edge or Safari.\n if (ev.newVersion > 0)\n console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`);\n else\n console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`);\n this.close({disableAutoOpen: false});\n // In many web applications, it would be recommended to force window.reload()\n // when this event occurs. To do that, subscribe to the versionchange event\n // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion)\n // The reason for this is that your current web app obviously has old schema code that needs\n // to be updated. Another window got a newer version of the app and needs to upgrade DB but\n // your window is blocking it unless we close it here.\n });\n this.on(\"blocked\", ev => {\n if (!ev.newVersion || ev.newVersion < ev.oldVersion)\n console.warn(`Dexie.delete('${this.name}') was blocked`);\n else\n console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`);\n });\n\n this._maxKey = getMaxKey(options.IDBKeyRange as typeof IDBKeyRange);\n\n this._createTransaction = (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n parentTransaction?: Transaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction);\n\n this._fireOnBlocked = ev => {\n this.on(\"blocked\").fire(ev);\n // Workaround (not fully*) for missing \"versionchange\" event in IE,Edge and Safari:\n connections\n .filter(c => c.name === this.name && c !== this && !c._state.vcFired)\n .map(c => c.on(\"versionchange\").fire(ev));\n }\n\n // Default middlewares:\n this.use(cacheExistingValuesMiddleware);\n this.use(cacheMiddleware);\n this.use(observabilityMiddleware);\n this.use(virtualIndexMiddleware);\n this.use(hooksMiddleware);\n\n const vipDB = new Proxy(this, {\n get: (_, prop, receiver) => {\n if (prop === '_vip') return true;\n if (prop === 'table') return (tableName: string) => vipify(this.table(tableName), vipDB);\n const rv = Reflect.get(_, prop, receiver);\n if (rv instanceof Table) return vipify(rv, vipDB);\n if (prop === 'tables') return (rv as Table[]).map(t => vipify(t, vipDB));\n if (prop === '_createTransaction') return function() {\n const tx: Transaction = (rv as typeof this._createTransaction).apply(this, arguments);\n return vipify(tx, vipDB);\n }\n return rv;\n }\n });\n this.vip = vipDB;\n\n // Call each addon:\n addons.forEach(addon => addon(this));\n }\n\n version(versionNumber: number): Version {\n if (isNaN(versionNumber) || versionNumber < 0.1) throw new exceptions.Type(`Given version is not a positive number`);\n versionNumber = Math.round(versionNumber * 10) / 10;\n if (this.idbdb || this._state.isBeingOpened)\n throw new exceptions.Schema(\"Cannot add version when database is open\");\n this.verno = Math.max(this.verno, versionNumber);\n const versions = this._versions;\n var versionInstance = versions.filter(\n v => v._cfg.version === versionNumber)[0];\n if (versionInstance) return versionInstance;\n versionInstance = new this.Version(versionNumber);\n versions.push(versionInstance);\n versions.sort(lowerVersionFirst);\n versionInstance.stores({}); // Derive earlier schemas by default.\n // Disable autoschema mode, as at least one version is specified.\n this._state.autoSchema = false;\n return versionInstance;\n }\n\n _whenReady(fn: () => Promise): Promise {\n return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new Promise((resolve, reject) => {\n if (this._state.openComplete) {\n // idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return reject(new exceptions.DatabaseClosed(this._state.dbOpenError));\n }\n if (!this._state.isBeingOpened) {\n if (!this._state.autoOpen) {\n reject(new exceptions.DatabaseClosed());\n return;\n }\n this.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n this._state.dbReadyPromise.then(resolve, reject);\n }).then(fn);\n }\n\n use({stack, create, level, name}: Middleware): this {\n if (name) this.unuse({stack, name}); // Be able to replace existing middleware.\n const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n middlewares.push({stack, create, level: level == null ? 10 : level, name});\n middlewares.sort((a, b) => a.level - b.level);\n // Todo update db.core and db.tables...core ? Or should be expect this to have effect\n // only after next open()?\n return this;\n }\n\n unuse({stack, create}: Middleware<{stack: keyof DexieStacks}>): this;\n unuse({stack, name}: {stack: keyof DexieStacks, name: string}): this;\n unuse({stack, name, create}: {stack: keyof DexieStacks, name?: string, create?: Function}) {\n if (stack && this._middlewares[stack]) {\n this._middlewares[stack] = this._middlewares[stack].filter(mw =>\n create ? mw.create !== create : // Given middleware has a create method. Match that exactly.\n name ? mw.name !== name : // Given middleware spec \n false);\n }\n return this;\n }\n\n open() {\n return usePSD(\n globalPSD, // Enforce global scope here since db.open() can be part of a live query or transaction scope\n () => dexieOpen(this)\n );\n }\n\n _close(): void {\n const state = this._state;\n const idx = connections.indexOf(this);\n if (idx >= 0) connections.splice(idx, 1);\n if (this.idbdb) {\n try { this.idbdb.close(); } catch (e) { }\n this.idbdb = null;\n } \n // Reset dbReadyPromise promise:\n if (!state.isBeingOpened) {\n // Only if not being opened, reset these promises.\n // Otherwise, keep them so existing promise consumers will resolve when db\n // db is reopened later on, in case closing for purpose reopening, using {disableAutoOpen: false}.\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n }\n }\n\n close({disableAutoOpen} = {disableAutoOpen: true}): void {\n const state = this._state;\n if (disableAutoOpen) {\n if (state.isBeingOpened) {\n // cancel before the call to this._close() because this._close() will recreate dbReadyPromise and openCanceller.\n state.cancelOpen(new exceptions.DatabaseClosed());\n }\n this._close();\n state.autoOpen = false;\n state.dbOpenError = new exceptions.DatabaseClosed();\n } else {\n this._close();\n state.autoOpen = this._options.autoOpen ||\n state.isBeingOpened; // If an open call is ongoing, that same promise will resolve when db is reopend.\n state.openComplete = false;\n state.dbOpenError = null;\n }\n }\n\n delete(closeOptions = {disableAutoOpen: true}): Promise {\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n const hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; \n const state = this._state;\n return new Promise((resolve, reject) => {\n const doDelete = () => {\n this.close(closeOptions);\n var req = this._deps.indexedDB.deleteDatabase(this.name);\n req.onsuccess = wrap(() => {\n _onDatabaseDeleted(this._deps, this.name);\n resolve();\n });\n req.onerror = eventRejectHandler(reject);\n req.onblocked = this._fireOnBlocked;\n }\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n if (hasInvalidArguments) throw new exceptions.InvalidArgument(\"Invalid closeOptions argument to db.delete()\");\n if (state.isBeingOpened) {\n state.dbReadyPromise.then(doDelete);\n } else {\n doDelete();\n }\n });\n }\n\n backendDB() {\n return this.idbdb;\n }\n\n isOpen() {\n return this.idbdb !== null;\n }\n\n hasBeenClosed() {\n const dbOpenError = this._state.dbOpenError;\n return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n }\n\n hasFailed() {\n return this._state.dbOpenError !== null;\n }\n\n dynamicallyOpened() {\n return this._state.autoSchema;\n }\n\n get tables () {\n return keys(this._allTables).map(name => this._allTables[name]);\n }\n\n transaction(): Promise {\n const args = extractTransactionArgs.apply(this, arguments);\n return this._transaction.apply(this, args);\n }\n\n _transaction(mode: TransactionMode, tables: Array, scopeFunc: Function) {\n let parentTransaction = PSD.trans as Transaction | undefined;\n // Check if parent transactions is bound to this db instance, and if caller wants to reuse it\n if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) parentTransaction = null;\n const onlyIfCompatible = mode.indexOf('?') !== -1;\n mode = mode.replace('!', '').replace('?', '') as TransactionMode; // Ok. Will change arguments[0] as well but we wont touch arguments henceforth.\n let idbMode: IDBTransactionMode,\n storeNames;\n\n try {\n //\n // Get storeNames from arguments. Either through given table instances, or through given table names.\n //\n storeNames = tables.map(table => {\n var storeName = table instanceof this.Table ? table.name : table;\n if (typeof storeName !== 'string') throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n return storeName;\n });\n\n //\n // Resolve mode. Allow shortcuts \"r\" and \"rw\".\n //\n if (mode == \"r\" || mode === READONLY)\n idbMode = READONLY;\n else if (mode == \"rw\" || mode == READWRITE)\n idbMode = READWRITE;\n else\n throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n\n if (parentTransaction) {\n // Basic checks\n if (parentTransaction.mode === READONLY && idbMode === READWRITE) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n }\n if (parentTransaction) {\n storeNames.forEach(storeName => {\n if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Table \" + storeName +\n \" not included in parent transaction.\");\n }\n });\n }\n if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n // '?' mode should not keep using an inactive transaction.\n parentTransaction = null;\n }\n }\n } catch (e) {\n return parentTransaction ?\n parentTransaction._promise(null, (_, reject) => {reject(e);}) :\n rejection (e);\n }\n // If this is a sub-transaction, lock the parent and then launch the sub-transaction.\n const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);\n return (parentTransaction ?\n parentTransaction._promise(idbMode, enterTransaction, \"lock\") :\n PSD.trans ?\n // no parent transaction despite PSD.trans exists. Make sure also\n // that the zone we create is not a sub-zone of current, because\n // Promise.follow() should not wait for it if so.\n usePSD(PSD.transless, ()=>this._whenReady(enterTransaction)) :\n this._whenReady (enterTransaction));\n }\n\n table(tableName: string): Table;\n table(tableName: string): ITable;\n table(tableName: string): Table {\n if (!hasOwn(this._allTables, tableName)) {\n throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); }\n return this._allTables[tableName];\n }\n}\n","import {\n Observable as IObservable,\n Observer,\n Subscription,\n} from \"../../public/types/observable\";\n\nconst symbolObservable: typeof Symbol.observable =\n typeof Symbol !== \"undefined\" && \"observable\" in Symbol\n ? Symbol.observable\n : \"@@observable\" as any;\n\nexport class Observable implements IObservable {\n private _subscribe: (observer: Observer) => Subscription;\n hasValue?: ()=>boolean;\n getValue?: ()=>T;\n\n constructor(subscribe: (observer: Observer) => Subscription) {\n this._subscribe = subscribe;\n }\n\n subscribe(\n onNext?: ((value: T) => void) | null,\n onError?: ((error: any) => void) | null,\n onComplete?: (() => void) | null\n ): Subscription;\n subscribe(observer?: Observer | null): Subscription;\n subscribe(x?: any, error?: any, complete?: any): Subscription {\n return this._subscribe(\n !x || typeof x === \"function\" ? { next: x, error, complete } : x\n );\n }\n\n [symbolObservable]() {\n return this;\n }\n}\n","import { _global } from '../../globals/global';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\n\nexport let domDeps: DexieDOMDependencies\n\ntry {\n domDeps = {\n // Required:\n indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n };\n} catch (e) {\n domDeps = { indexedDB: null, IDBKeyRange: null };\n}\n","import { _global, isAsyncFunction, keys, objectIsEmpty } from '../functions/utils';\nimport {\n globalEvents,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport {\n beginMicroTickScope,\n decrementExpectedAwaits,\n endMicroTickScope,\n execInGlobalContext,\n incrementExpectedAwaits,\n NativePromise,\n newScope,\n PSD,\n usePSD,\n} from '../helpers/promise';\nimport { ObservabilitySet } from '../public/types/db-events';\nimport {\n Observable as IObservable,\n Subscription,\n} from '../public/types/observable';\nimport { Observable } from '../classes/observable/observable';\nimport { extendObservabilitySet } from './extend-observability-set';\nimport { rangesOverlap } from '../helpers/rangeset';\nimport { domDeps } from '../classes/dexie/dexie-dom-dependencies';\nimport { Transaction } from '../classes/transaction';\nimport { obsSetsOverlap } from './obs-sets-overlap';\n\nexport interface LiveQueryContext {\n subscr: ObservabilitySet;\n signal: AbortSignal;\n requery: () => void;\n trans: null | Transaction;\n querier: Function; // For debugging purposes and Error messages\n}\n\nexport function liveQuery(querier: () => T | Promise): IObservable {\n let hasValue = false;\n let currentValue: T;\n const observable = new Observable((observer) => {\n const scopeFuncIsAsync = isAsyncFunction(querier);\n function execute(ctx: LiveQueryContext) {\n const wasRootExec = beginMicroTickScope(); // Performance: Avoid starting a new microtick scope within the async context.\n try {\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n let rv = newScope(querier, ctx);\n if (scopeFuncIsAsync) {\n // Make sure to set rv = rv.finally in order to wait to after decrementExpectedAwaits() has been called.\n // This fixes zone leaking issue that the liveQuery zone can leak to observer's next microtask.\n rv = (rv as Promise).finally(decrementExpectedAwaits);\n }\n return rv;\n } finally {\n wasRootExec && endMicroTickScope(); // Given that we created the microtick scope, we must also end it.\n }\n }\n\n let closed = false;\n let abortController: AbortController;\n\n let accumMuts: ObservabilitySet = {};\n let currentObs: ObservabilitySet = {};\n\n const subscription: Subscription = {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n if (closed) return;\n closed = true;\n if (abortController) abortController.abort();\n if (startedListening) globalEvents.storagemutated.unsubscribe(mutationListener);\n },\n };\n\n observer.start && observer.start(subscription); // https://github.com/tc39/proposal-observable\n\n let startedListening = false;\n\n const doQuery = () => execInGlobalContext(_doQuery);\n\n function shouldNotify() {\n return obsSetsOverlap(currentObs, accumMuts);\n }\n\n const mutationListener = (parts: ObservabilitySet) => {\n extendObservabilitySet(accumMuts, parts);\n if (shouldNotify()) {\n doQuery();\n }\n };\n\n const _doQuery = () => {\n if (\n closed || // closed - don't run!\n !domDeps.indexedDB) // SSR in sveltekit, nextjs etc\n {\n return;\n }\n accumMuts = {};\n const subscr: ObservabilitySet = {};\n // Abort signal fill three purposes:\n // 1. Abort the query if the observable is unsubscribed.\n // 2. Abort the query if a new query is made before the previous one has completed.\n // 3. For cached queries to know if they should remain in memory or could be enqued for being freed up.\n // (they will remain in memory for a short time and if noone needs them again, they will eventually be freed up)\n if (abortController) abortController.abort(); // Cancel previous query. Last query will be cancelled on unsubscribe().\n abortController = new AbortController();\n \n const ctx: LiveQueryContext = {\n subscr,\n signal: abortController.signal,\n requery: doQuery,\n querier,\n trans: null // Make the scope transactionless (don't reuse transaction from outer scope of the caller of subscribe())\n }\n const ret = execute(ctx);\n Promise.resolve(ret).then(\n (result) => {\n hasValue = true;\n currentValue = result;\n if (closed || ctx.signal.aborted) {\n // closed - no subscriber anymore.\n // signal.aborted - new query was made before this one completed and\n // the querier might have catched AbortError and return successful result.\n // If so, we should not rely in that result because we know we have aborted\n // this run, which means there's another run going on that will handle accumMuts\n // and we must not base currentObs on the half-baked subscr.\n return;\n }\n accumMuts = {};\n // Update what we are subscribing for based on this last run:\n currentObs = subscr;\n if (!objectIsEmpty(currentObs) && !startedListening) {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);\n startedListening = true;\n }\n execInGlobalContext(()=>!closed && observer.next && observer.next(result));\n },\n (err) => {\n hasValue = false;\n if (!['DatabaseClosedError', 'AbortError'].includes(err?.name)) {\n if (!closed) execInGlobalContext(()=>{\n if (closed) return;\n observer.error && observer.error(err);\n });\n }\n }\n );\n };\n\n // Use setTimeot here to guarantee execution in a private macro task before and\n // after. The helper executeInGlobalContext(_doQuery) is not enough here because\n // caller of `subscribe()` could be anything, such as a frontend framework that will\n // continue in the same tick after subscribe() is called and call other\n // eftects, that could involve dexie operations such as writing to the DB.\n // If that happens, the private zone echoes from a live query tast started here\n // could still be ongoing when the other operations start and make them inherit\n // the async context from a live query.\n setTimeout(doQuery, 0);\n return subscription;\n });\n observable.hasValue = () => hasValue;\n observable.getValue = () => currentValue;\n return observable;\n}\n","import { Dexie as _Dexie } from './dexie';\nimport { _global } from '../../globals/global';\nimport { props, derive, extend, override, getByKeyPath, setByKeyPath, delByKeyPath, shallowClone, deepClone, asap } from '../../functions/utils';\nimport { getObjectDiff } from \"../../functions/get-object-diff\";\nimport { fullNameExceptions } from '../../errors';\nimport { DexieConstructor } from '../../public/types/dexie-constructor';\nimport { getDatabaseNames } from '../../helpers/database-enumerator';\nimport { PSD } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { newScope } from '../../helpers/promise';\nimport { rejection } from '../../helpers/promise';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { dexieStackFrameFilter, minKey, connections, DEXIE_VERSION } from '../../globals/constants';\nimport Events from '../../helpers/Events';\nimport { exceptions } from '../../errors';\nimport { errnames } from '../../errors';\nimport { getMaxKey } from '../../functions/quirks';\nimport { vip } from './vip';\nimport { globalEvents } from '../../globals/global-events';\nimport { liveQuery } from '../../live-query/live-query';\nimport { extendObservabilitySet } from '../../live-query/extend-observability-set';\nimport { domDeps } from './dexie-dom-dependencies';\nimport { cmp } from '../../functions/cmp';\nimport { cache } from '../../live-query/cache/cache';\n\n/* (Dexie) is an instance of DexieConstructor, as defined in public/types/dexie-constructor.d.ts\n* (new Dexie()) is an instance of Dexie, as defined in public/types/dexie.d.ts\n* \n* Why we're doing this?\n\n* Because we've choosen to define the public Dexie API using a DexieConstructor interface\n* rather than declaring a class. On that interface, all static props are defined.\n* In practice, class Dexie's constructor implements DexieConstructor and all member props\n* are defined in interface Dexie. We could say, it's a typescript limitation of not being\n* able to define a static interface that forces us to do the cast below.\n*/\nconst Dexie = _Dexie as any as DexieConstructor;\n\n//\n// Set all static methods and properties onto Dexie:\n// \nprops(Dexie, {\n\n // Dexie.BulkError = class BulkError {...};\n // Dexie.XXXError = class XXXError {...};\n ...fullNameExceptions,\n\n //\n // Static delete() method.\n //\n delete(databaseName: string) {\n const db = new Dexie(databaseName, {addons: []});\n return db.delete();\n },\n\n //\n // Static exists() method.\n //\n exists(name: string) {\n return new Dexie(name, { addons: [] }).open().then(db => {\n db.close();\n return true;\n }).catch('NoSuchDatabaseError', () => false);\n },\n\n //\n // Static method for retrieving a list of all existing databases at current host.\n //\n getDatabaseNames(cb) {\n try {\n return getDatabaseNames(Dexie.dependencies).then(cb);\n } catch {\n return rejection(new exceptions.MissingAPI());\n }\n },\n\n /** @deprecated */\n defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return Class;\n },\n\n ignoreTransaction(scopeFunc) {\n // In case caller is within a transaction but needs to create a separate transaction.\n // Example of usage:\n //\n // Let's say we have a logger function in our app. Other application-logic should be unaware of the\n // logger function and not need to include the 'logentries' table in all transaction it performs.\n // The logging should always be done in a separate transaction and not be dependant on the current\n // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction.\n //\n // Dexie.ignoreTransaction(function() {\n // db.logentries.add(newLogEntry);\n // });\n //\n // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction\n // in current Promise-scope.\n //\n // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an\n // API for this because\n // 1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout().\n // 2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate().\n // 3) setImmediate() is not supported in the ES standard.\n // 4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough.\n return PSD.trans ?\n usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional.\n scopeFunc(); // No need to change scope because there is no ongoing transaction.\n },\n\n vip,\n\n async: function (generatorFn: Function) {\n return function () {\n try {\n var rv = awaitIterator(generatorFn.apply(this, arguments));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n };\n },\n\n spawn: function (generatorFn, args, thiz) {\n try {\n var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n },\n\n // Dexie.currentTransaction property\n currentTransaction: {\n get: () => PSD.trans || null\n },\n\n waitFor: function (promiseOrFunction, optionalTimeout) {\n // If a function is provided, invoke it and pass the returning value to Transaction.waitFor()\n const promise = Promise.resolve(\n typeof promiseOrFunction === 'function' ?\n Dexie.ignoreTransaction(promiseOrFunction) :\n promiseOrFunction)\n .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required. \n\n // Run given promise on current transaction. If no current transaction, just return a Dexie promise based\n // on given value.\n return PSD.trans ?\n PSD.trans.waitFor(promise) :\n promise;\n },\n\n // Export our Promise implementation since it can be handy as a standalone Promise implementation\n Promise: Promise,\n\n // Dexie.debug proptery:\n // Dexie.debug = false\n // Dexie.debug = true\n // Dexie.debug = \"dexie\" - don't hide dexie's stack frames.\n debug: {\n get: () => Debug.debug,\n set: value => {\n Debug.setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter);\n }\n },\n\n // Export our derive/extend/override methodology\n derive: derive, // Deprecate?\n extend: extend, // Deprecate?\n props: props,\n override: override, // Deprecate?\n // Export our Events() function - can be handy as a toolkit\n Events: Events,\n on: globalEvents,\n liveQuery,\n extendObservabilitySet,\n // Utilities\n getByKeyPath: getByKeyPath,\n setByKeyPath: setByKeyPath,\n delByKeyPath: delByKeyPath,\n shallowClone: shallowClone,\n deepClone: deepClone,\n getObjectDiff: getObjectDiff,\n cmp,\n asap: asap,\n //maxKey: new Dexie('',{addons:[]})._maxKey,\n minKey: minKey,\n // Addon registry\n addons: [],\n // Global DB connection list\n connections: connections,\n\n //MultiModifyError: exceptions.Modify, // Obsolete!\n errnames: errnames,\n\n // Export other static classes\n //IndexSpec: IndexSpec, Obsolete!\n //TableSchema: TableSchema, Obsolete!\n\n //\n // Dependencies\n //\n // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included.\n //\n // In node.js, however, these properties must be set \"manually\" before instansiating a new Dexie().\n // For node.js, you need to require indexeddb-js or similar and then set these deps.\n //\n dependencies: domDeps,\n cache,\n\n // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc.\n semVer: DEXIE_VERSION,\n version: DEXIE_VERSION.split('.')\n .map(n => parseInt(n))\n .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))),\n\n // https://github.com/dfahlander/Dexie.js/issues/186\n // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return\n // x.default. Workaround: Set Dexie.default = Dexie.\n // default: Dexie, // Commented because solved in index-umd.ts instead.\n // Make it possible to import {Dexie} (non-default import)\n // Reason 1: May switch to that in future.\n // Reason 2: We declare it both default and named exported in d.ts to make it possible\n // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely\n // exporting the symbol, not just default exporting)\n // Dexie: Dexie // Commented because solved in index-umd.ts instead.\n});\n\nDexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange);\n","import { globalEvents, DEXIE_STORAGE_MUTATED_EVENT_NAME, STORAGE_MUTATED_DOM_EVENT_NAME } from '../globals/global-events';\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport { signalSubscribersNow } from './cache/signalSubscribers';\n\nif (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => {\n if (!propagatingLocally) {\n let event: CustomEvent;\n event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, {\n detail: updatedParts\n });\n propagatingLocally = true;\n dispatchEvent(event);\n propagatingLocally = false;\n }\n });\n addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({detail}: CustomEvent) => {\n if (!propagatingLocally) {\n propagateLocally(detail);\n }\n });\n}\n\n/** Called from listeners to BroadcastChannel and DOM event to\n * propagate the event locally into dexie's storagemutated event\n * and invalidate cached queries.\n * \n * This function is only called when the event is not originating\n * from this same Dexie module - either from another redundant dexie import\n * or from a foreign tab or worker. That's why we need to invalidate\n * the cache when this happens.\n */\nexport function propagateLocally(updateParts: ObservabilitySet) {\n let wasMe = propagatingLocally;\n try {\n propagatingLocally = true;\n // Fire the \"storagemutated\" event.\n globalEvents.storagemutated.fire(updateParts);\n // Invalidate cached queries and signal subscribers to requery.\n signalSubscribersNow(updateParts, true);\n } finally {\n propagatingLocally = wasMe;\n }\n}\n\nexport let propagatingLocally = false;\n","import {\n globalEvents,\n STORAGE_MUTATED_DOM_EVENT_NAME,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport { propagateLocally, propagatingLocally } from './propagate-locally';\n\nexport let bc: BroadcastChannel;\n\nexport let createBC = ()=>{};\n\nif (typeof BroadcastChannel !== 'undefined') {\n createBC = () => {\n bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME);\n bc.onmessage = ev => ev.data && propagateLocally(ev.data);\n }\n createBC();\n\n /**\n * The Node.js BroadcastChannel will prevent the node process from exiting\n * if the BroadcastChannel is not closed.\n * Therefore we have to call unref() which allows the process to finish\n * properly even when the BroadcastChannel is never closed.\n * @link https://nodejs.org/api/worker_threads.html#broadcastchannelunref\n * @link https://github.com/dexie/Dexie.js/pull/1576\n */\n if (typeof (bc as any).unref === 'function') {\n (bc as any).unref();\n }\n \n //\n // Propagate local changes to remote tabs, windows and workers via BroadcastChannel\n //\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n if (!propagatingLocally) {\n bc.postMessage(changedParts);\n }\n });\n}\n","import { Dexie } from \"./classes/dexie\";\nimport { connections } from \"./globals/constants\";\nimport { debug } from \"./helpers/debug\";\nimport { RangeSet } from \"./helpers/rangeset\";\nimport { bc, createBC } from \"./live-query/enable-broadcast\";\nimport { propagateLocally } from \"./live-query/propagate-locally\";\n\n\nif (typeof addEventListener !== 'undefined') {\n addEventListener('pagehide', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pagehide');\n bc?.close();\n for (const db of connections) {\n db.close({disableAutoOpen: false});\n }\n }\n });\n addEventListener('pageshow', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pageshow');\n createBC();\n propagateLocally({all: new RangeSet(-Infinity, [[]])}); // Trigger all queries to requery\n }\n });\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function add(value: number | BigInt | Array) {\n return new PropModification({add: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function remove(value: number | BigInt | Array) {\n return new PropModification({remove: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function replacePrefix(a: string, b:string) {\n return new PropModification({replacePrefix: [a, b]});\n}\n","import { Dexie } from './classes/dexie';\nimport { DexieConstructor } from './public/types/dexie-constructor';\nimport { DexiePromise } from './helpers/promise';\nimport { mapError } from './errors';\nimport * as Debug from './helpers/debug';\nimport { dexieStackFrameFilter } from './globals/constants';\n\n// Generate all static properties such as Dexie.maxKey etc\n// (implement interface DexieConstructor):\nimport './classes/dexie/dexie-static-props';\nimport './live-query/enable-broadcast';\nimport './support-bfcache';\nimport { liveQuery } from './live-query/live-query';\nimport { Entity } from './classes/entity/Entity';\nimport { cmp } from './functions/cmp';\nimport { PropModification, PropModSymbol } from './helpers/prop-modification';\nimport { replacePrefix, add, remove } from './functions/propmods';\n\n\n// Set rejectionMapper of DexiePromise so that it generally tries to map\n// DOMErrors and DOMExceptions to a DexieError instance with same name but with\n// async stack support and with a prototypal inheritance from DexieError and Error.\n// of Map DOMErrors and DOMExceptions to corresponding Dexie errors.\nDexiePromise.rejectionMapper = mapError;\n\n// Let the async stack filter focus on app code and filter away frames from dexie.min.js:\nDebug.setDebug(Debug.debug, dexieStackFrameFilter);\n\nexport { RangeSet, mergeRanges, rangesOverlap } from \"./helpers/rangeset\";\nexport { Dexie, liveQuery }; // Comply with public/index.d.ts.\nexport { Entity };\nexport { cmp };\nexport { PropModSymbol, PropModification, replacePrefix, add, remove };\nexport default Dexie;\n"],"names":["asap","_a","Promise","Dexie","safari14Workaround","_Dexie","Debug.debug","Debug.setDebug"],"mappings":"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"} \ No newline at end of file diff --git a/src/assets/dexie/dist/modern/dexie.min.mjs b/src/assets/dexie/dist/modern/dexie.min.mjs new file mode 100644 index 000000000..5b3a35ac6 --- /dev/null +++ b/src/assets/dexie/dist/modern/dexie.min.mjs @@ -0,0 +1,2 @@ +const e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,t=Object.keys,n=Array.isArray;function r(e,n){return"object"!=typeof n||t(n).forEach((function(t){e[t]=n[t]})),e}"undefined"==typeof Promise||e.Promise||(e.Promise=Promise);const s=Object.getPrototypeOf,i={}.hasOwnProperty;function o(e,t){return i.call(e,t)}function a(e,n){"function"==typeof n&&(n=n(s(e))),("undefined"==typeof Reflect?t:Reflect.ownKeys)(n).forEach((t=>{l(e,t,n[t])}))}const u=Object.defineProperty;function l(e,t,n,s){u(e,t,r(n&&o(n,"get")&&"function"==typeof n.get?{get:n.get,set:n.set,configurable:!0}:{value:n,configurable:!0,writable:!0},s))}function c(e){return{from:function(t){return e.prototype=Object.create(t.prototype),l(e.prototype,"constructor",e),{extend:a.bind(null,e.prototype)}}}}const h=Object.getOwnPropertyDescriptor;function d(e,t){let n;return h(e,t)||(n=s(e))&&d(n,t)}const f=[].slice;function p(e,t,n){return f.call(e,t,n)}function y(e,t){return t(e)}function m(e){if(!e)throw new Error("Assertion Failed")}function b(t){e.setImmediate?setImmediate(t):setTimeout(t,0)}function g(e,t){if("string"==typeof t&&o(e,t))return e[t];if(!t)return e;if("string"!=typeof t){for(var n=[],r=0,s=t.length;r["Int","Uint","Float"].map((t=>t+e+"Array")))))).filter((t=>e[t])),O=new Set(k.map((t=>e[t])));function P(e){const t={};for(const n in e)if(o(e,n)){const r=e[n];t[n]=!r||"object"!=typeof r||O.has(r.constructor)?r:P(r)}return t}let E=null;function K(e){E=new WeakMap;const t=S(e);return E=null,t}function S(e){if(!e||"object"!=typeof e)return e;let t=E.get(e);if(t)return t;if(n(e)){t=[],E.set(e,t);for(var r=0,i=e.length;r=0&&e.splice(n,1),n>=0}const T={};function I(e){var t,r,s,i;if(1===arguments.length){if(n(e))return e.slice();if(this===T&&"string"==typeof e)return[e];if(i=D(e)){for(r=[];!(s=i.next()).done;)r.push(s.value);return r}if(null==e)return[e];if("number"==typeof(t=e.length)){for(r=new Array(t);t--;)r[t]=e[t];return r}return[e]}for(t=arguments.length,r=new Array(t);t--;)r[t]=arguments[t];return r}const B="undefined"!=typeof Symbol?e=>"AsyncFunction"===e[Symbol.toStringTag]:()=>!1;var R=["Unknown","Constraint","Data","TransactionInactive","ReadOnly","Version","NotFound","InvalidState","InvalidAccess","Abort","Timeout","QuotaExceeded","Syntax","DataClone"],$=["Modify","Bulk","OpenFailed","VersionChange","Schema","Upgrade","InvalidTable","MissingAPI","NoSuchDatabase","InvalidArgument","SubTransaction","Unsupported","Internal","DatabaseClosed","PrematureCommit","ForeignAwait"].concat(R),F={VersionChanged:"Database version changed by other database connection",DatabaseClosed:"Database has been closed",Abort:"Transaction aborted",TransactionInactive:"Transaction has already completed or failed",MissingAPI:"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb"};function N(e,t){this.name=e,this.message=t}function M(e,t){return e+". Errors: "+Object.keys(t).map((e=>t[e].toString())).filter(((e,t,n)=>n.indexOf(e)===t)).join("\n")}function L(e,t,n,r){this.failures=t,this.failedKeys=r,this.successCount=n,this.message=M(e,t)}function U(e,t){this.name="BulkError",this.failures=Object.keys(t).map((e=>t[e])),this.failuresByPos=t,this.message=M(e,this.failures)}c(N).from(Error).extend({toString:function(){return this.name+": "+this.message}}),c(L).from(N),c(U).from(N);var V=$.reduce(((e,t)=>(e[t]=t+"Error",e)),{});const z=N;var W=$.reduce(((e,t)=>{var n=t+"Error";function r(e,r){this.name=n,e?"string"==typeof e?(this.message=`${e}${r?"\n "+r:""}`,this.inner=r||null):"object"==typeof e&&(this.message=`${e.name} ${e.message}`,this.inner=e):(this.message=F[t]||n,this.inner=null)}return c(r).from(z),e[t]=r,e}),{});W.Syntax=SyntaxError,W.Type=TypeError,W.Range=RangeError;var Y=R.reduce(((e,t)=>(e[t+"Error"]=W[t],e)),{});var G=$.reduce(((e,t)=>(-1===["Syntax","Type","Range"].indexOf(t)&&(e[t+"Error"]=W[t]),e)),{});function Q(){}function X(e){return e}function H(e,t){return null==e||e===X?t:function(n){return t(e(n))}}function J(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function Z(e,t){return e===Q?t:function(){var n=e.apply(this,arguments);void 0!==n&&(arguments[0]=n);var r=this.onsuccess,s=this.onerror;this.onsuccess=null,this.onerror=null;var i=t.apply(this,arguments);return r&&(this.onsuccess=this.onsuccess?J(r,this.onsuccess):r),s&&(this.onerror=this.onerror?J(s,this.onerror):s),void 0!==i?i:n}}function ee(e,t){return e===Q?t:function(){e.apply(this,arguments);var n=this.onsuccess,r=this.onerror;this.onsuccess=this.onerror=null,t.apply(this,arguments),n&&(this.onsuccess=this.onsuccess?J(n,this.onsuccess):n),r&&(this.onerror=this.onerror?J(r,this.onerror):r)}}function te(e,t){return e===Q?t:function(n){var s=e.apply(this,arguments);r(n,s);var i=this.onsuccess,o=this.onerror;this.onsuccess=null,this.onerror=null;var a=t.apply(this,arguments);return i&&(this.onsuccess=this.onsuccess?J(i,this.onsuccess):i),o&&(this.onerror=this.onerror?J(o,this.onerror):o),void 0===s?void 0===a?void 0:a:r(s,a)}}function ne(e,t){return e===Q?t:function(){return!1!==t.apply(this,arguments)&&e.apply(this,arguments)}}function re(e,t){return e===Q?t:function(){var n=e.apply(this,arguments);if(n&&"function"==typeof n.then){for(var r=this,s=arguments.length,i=new Array(s);s--;)i[s]=arguments[s];return n.then((function(){return t.apply(r,i)}))}return t.apply(this,arguments)}}G.ModifyError=L,G.DexieError=N,G.BulkError=U;var se="undefined"!=typeof location&&/^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);function ie(e,t){se=e}var oe={};const[ae,ue,le]="undefined"==typeof Promise?[]:(()=>{let e=Promise.resolve();if("undefined"==typeof crypto||!crypto.subtle)return[e,s(e),e];const t=crypto.subtle.digest("SHA-512",new Uint8Array([0]));return[t,s(t),e]})(),ce=ue&&ue.then,he=ae&&ae.constructor,de=!!le;var fe=function(e,t){_e.push([e,t]),ye&&(queueMicrotask(De),ye=!1)},pe=!0,ye=!0,me=[],be=[],ge=X,ve={id:"global",global:!0,ref:0,unhandleds:[],onunhandled:Q,pgp:!1,env:{},finalize:Q},we=ve,_e=[],xe=0,ke=[];function Oe(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");this._listeners=[],this._lib=!1;var t=this._PSD=we;if("function"!=typeof e){if(e!==oe)throw new TypeError("Not a function");return this._state=arguments[1],this._value=arguments[2],void(!1===this._state&&Se(this,this._value))}this._state=null,this._value=null,++t.ref,Ke(this,e)}const Pe={get:function(){var e=we,t=Le;function n(n,r){var s=!e.global&&(e!==we||t!==Le);const i=s&&!We();var o=new Oe(((t,o)=>{Ae(this,new Ee(Ze(n,e,s,i),Ze(r,e,s,i),t,o,e))}));return this._consoleTask&&(o._consoleTask=this._consoleTask),o}return n.prototype=oe,n},set:function(e){l(this,"then",e&&e.prototype===oe?Pe:{get:function(){return e},set:Pe.set})}};function Ee(e,t,n,r,s){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r,this.psd=s}function Ke(e,t){try{t((t=>{if(null===e._state){if(t===e)throw new TypeError("A promise cannot be resolved with itself.");var n=e._lib&&qe();t&&"function"==typeof t.then?Ke(e,((e,n)=>{t instanceof Oe?t._then(e,n):t.then(e,n)})):(e._state=!0,e._value=t,Ce(e)),n&&Te()}}),Se.bind(null,e))}catch(t){Se(e,t)}}function Se(e,t){if(be.push(t),null===e._state){var n=e._lib&&qe();t=ge(t),e._state=!1,e._value=t,function(e){me.some((t=>t._value===e._value))||me.push(e)}(e),Ce(e),n&&Te()}}function Ce(e){var t=e._listeners;e._listeners=[];for(var n=0,r=t.length;n{0==--xe&&Ie()}),[]))}function Ae(e,t){if(null!==e._state){var n=e._state?t.onFulfilled:t.onRejected;if(null===n)return(e._state?t.resolve:t.reject)(e._value);++t.psd.ref,++xe,fe(je,[n,e,t])}else e._listeners.push(t)}function je(e,t,n){try{var r,s=t._value;!t._state&&be.length&&(be=[]),r=se&&t._consoleTask?t._consoleTask.run((()=>e(s))):e(s),t._state||-1!==be.indexOf(s)||function(e){var t=me.length;for(;t;)if(me[--t]._value===e._value)return void me.splice(t,1)}(t),n.resolve(r)}catch(e){n.reject(e)}finally{0==--xe&&Ie(),--n.psd.ref||n.psd.finalize()}}function De(){Je(ve,(()=>{qe()&&Te()}))}function qe(){var e=pe;return pe=!1,ye=!1,e}function Te(){var e,t,n;do{for(;_e.length>0;)for(e=_e,_e=[],n=e.length,t=0;t0);pe=!0,ye=!0}function Ie(){var e=me;me=[],e.forEach((e=>{e._PSD.onunhandled.call(null,e._value,e)}));for(var t=ke.slice(0),n=t.length;n;)t[--n]()}function Be(e){return new Oe(oe,!1,e)}function Re(e,t){var n=we;return function(){var r=qe(),s=we;try{return Xe(n,!0),e.apply(this,arguments)}catch(e){t&&t(e)}finally{Xe(s,!1),r&&Te()}}}a(Oe.prototype,{then:Pe,_then:function(e,t){Ae(this,new Ee(null,null,e,t,we))},catch:function(e){if(1===arguments.length)return this.then(null,e);var t=arguments[0],n=arguments[1];return"function"==typeof t?this.then(null,(e=>e instanceof t?n(e):Be(e))):this.then(null,(e=>e&&e.name===t?n(e):Be(e)))},finally:function(e){return this.then((t=>Oe.resolve(e()).then((()=>t))),(t=>Oe.resolve(e()).then((()=>Be(t)))))},timeout:function(e,t){return e<1/0?new Oe(((n,r)=>{var s=setTimeout((()=>r(new W.Timeout(t))),e);this.then(n,r).finally(clearTimeout.bind(null,s))})):this}}),"undefined"!=typeof Symbol&&Symbol.toStringTag&&l(Oe.prototype,Symbol.toStringTag,"Dexie.Promise"),ve.env=He(),a(Oe,{all:function(){var e=I.apply(null,arguments).map(Ye);return new Oe((function(t,n){0===e.length&&t([]);var r=e.length;e.forEach(((s,i)=>Oe.resolve(s).then((n=>{e[i]=n,--r||t(e)}),n)))}))},resolve:e=>e instanceof Oe?e:e&&"function"==typeof e.then?new Oe(((t,n)=>{e.then(t,n)})):new Oe(oe,!0,e),reject:Be,race:function(){var e=I.apply(null,arguments).map(Ye);return new Oe(((t,n)=>{e.map((e=>Oe.resolve(e).then(t,n)))}))},PSD:{get:()=>we,set:e=>we=e},totalEchoes:{get:()=>Le},newPSD:Ve,usePSD:Je,scheduler:{get:()=>fe,set:e=>{fe=e}},rejectionMapper:{get:()=>ge,set:e=>{ge=e}},follow:(e,t)=>new Oe(((n,r)=>Ve(((t,n)=>{var r=we;r.unhandleds=[],r.onunhandled=n,r.finalize=J((function(){!function(e){function t(){e(),ke.splice(ke.indexOf(t),1)}ke.push(t),++xe,fe((()=>{0==--xe&&Ie()}),[])}((()=>{0===this.unhandleds.length?t():n(this.unhandleds[0])}))}),r.finalize),e()}),t,n,r)))}),he&&(he.allSettled&&l(Oe,"allSettled",(function(){const e=I.apply(null,arguments).map(Ye);return new Oe((t=>{0===e.length&&t([]);let n=e.length;const r=new Array(n);e.forEach(((e,s)=>Oe.resolve(e).then((e=>r[s]={status:"fulfilled",value:e}),(e=>r[s]={status:"rejected",reason:e})).then((()=>--n||t(r)))))}))})),he.any&&"undefined"!=typeof AggregateError&&l(Oe,"any",(function(){const e=I.apply(null,arguments).map(Ye);return new Oe(((t,n)=>{0===e.length&&n(new AggregateError([]));let r=e.length;const s=new Array(r);e.forEach(((e,i)=>Oe.resolve(e).then((e=>t(e)),(e=>{s[i]=e,--r||n(new AggregateError(s))}))))}))})));const $e={awaits:0,echoes:0,id:0};var Fe=0,Ne=[],Me=0,Le=0,Ue=0;function Ve(e,t,n,s){var i=we,o=Object.create(i);o.parent=i,o.ref=0,o.global=!1,o.id=++Ue,ve.env,o.env=de?{Promise:Oe,PromiseProp:{value:Oe,configurable:!0,writable:!0},all:Oe.all,race:Oe.race,allSettled:Oe.allSettled,any:Oe.any,resolve:Oe.resolve,reject:Oe.reject}:{},t&&r(o,t),++i.ref,o.finalize=function(){--this.parent.ref||this.parent.finalize()};var a=Je(o,e,n,s);return 0===o.ref&&o.finalize(),a}function ze(){return $e.id||($e.id=++Fe),++$e.awaits,$e.echoes+=100,$e.id}function We(){return!!$e.awaits&&(0==--$e.awaits&&($e.id=0),$e.echoes=100*$e.awaits,!0)}function Ye(e){return $e.echoes&&e&&e.constructor===he?(ze(),e.then((e=>(We(),e)),(e=>(We(),tt(e))))):e}function Ge(e){++Le,$e.echoes&&0!=--$e.echoes||($e.echoes=$e.awaits=$e.id=0),Ne.push(we),Xe(e,!0)}function Qe(){var e=Ne[Ne.length-1];Ne.pop(),Xe(e,!1)}function Xe(t,n){var r=we;if((n?!$e.echoes||Me++&&t===we:!Me||--Me&&t===we)||queueMicrotask(n?Ge.bind(null,t):Qe),t!==we&&(we=t,r===ve&&(ve.env=He()),de)){var s=ve.env.Promise,i=t.env;(r.global||t.global)&&(Object.defineProperty(e,"Promise",i.PromiseProp),s.all=i.all,s.race=i.race,s.resolve=i.resolve,s.reject=i.reject,i.allSettled&&(s.allSettled=i.allSettled),i.any&&(s.any=i.any))}}function He(){var t=e.Promise;return de?{Promise:t,PromiseProp:Object.getOwnPropertyDescriptor(e,"Promise"),all:t.all,race:t.race,allSettled:t.allSettled,any:t.any,resolve:t.resolve,reject:t.reject}:{}}function Je(e,t,n,r,s){var i=we;try{return Xe(e,!0),t(n,r,s)}finally{Xe(i,!1)}}function Ze(e,t,n,r){return"function"!=typeof e?e:function(){var s=we;n&&ze(),Xe(t,!0);try{return e.apply(this,arguments)}finally{Xe(s,!1),r&&queueMicrotask(We)}}}function et(e){Promise===he&&0===$e.echoes?0===Me?e():enqueueNativeMicroTask(e):setTimeout(e,0)}-1===(""+ce).indexOf("[native code]")&&(ze=We=Q);var tt=Oe.reject;function nt(e,t,n,r){if(e.idbdb&&(e._state.openComplete||we.letThrough||e._vip)){var s=e._createTransaction(t,n,e._dbSchema);try{s.create(),e._state.PR1398_maxLoop=3}catch(s){return s.name===V.InvalidState&&e.isOpen()&&--e._state.PR1398_maxLoop>0?(console.warn("Dexie: Need to reopen db"),e.close({disableAutoOpen:!1}),e.open().then((()=>nt(e,t,n,r)))):tt(s)}return s._promise(t,((e,t)=>Ve((()=>(we.trans=s,r(e,t,s)))))).then((e=>{if("readwrite"===t)try{s.idbtrans.commit()}catch{}return"readonly"===t?e:s._completion.then((()=>e))}))}if(e._state.openComplete)return tt(new W.DatabaseClosed(e._state.dbOpenError));if(!e._state.isBeingOpened){if(!e._state.autoOpen)return tt(new W.DatabaseClosed);e.open().catch(Q)}return e._state.dbReadyPromise.then((()=>nt(e,t,n,r)))}const rt=String.fromCharCode(65535),st="Invalid key provided. Keys must be of type string, number, Date or Array.",it=[];function ot(e,t){return e?t?function(){return e.apply(this,arguments)&&t.apply(this,arguments)}:e:t}const at={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function ut(e){return"string"!=typeof e||/\./.test(e)?e=>e:t=>(void 0===t[e]&&e in t&&delete(t=K(t))[e],t)}function lt(){throw W.Type()}function ct(e,t){try{const n=ht(e),r=ht(t);if(n!==r)return"Array"===n?1:"Array"===r?-1:"binary"===n?1:"binary"===r?-1:"string"===n?1:"string"===r?-1:"Date"===n?1:"Date"!==r?NaN:-1;switch(n){case"number":case"Date":case"string":return e>t?1:er._promise(e,o,n)),{trans:r,transless:we.transless||we}):nt(this.db,e,[this.name],o);return i&&(t._consoleTask=i,t=t.catch((e=>(console.trace(e),tt(e))))),t}finally{a&&Te()}}get(e,t){return e&&e.constructor===Object?this.where(e).first(t):null==e?tt(new W.Type("Invalid argument to Table.get()")):this._trans("readonly",(t=>this.core.get({trans:t,key:e}).then((e=>this.hook.reading.fire(e))))).then(t)}where(e){if("string"==typeof e)return new this.db.WhereClause(this,e);if(n(e))return new this.db.WhereClause(this,`[${e.join("+")}]`);const r=t(e);if(1===r.length)return this.where(r[0]).equals(e[r[0]]);const s=this.schema.indexes.concat(this.schema.primKey).filter((e=>{if(e.compound&&r.every((t=>e.keyPath.indexOf(t)>=0))){for(let t=0;te.keyPath.length-t.keyPath.length))[0];if(s&&this.db._maxKey!==rt){const t=s.keyPath.slice(0,r.length);return this.where(t).equals(t.map((t=>e[t])))}!s&&se&&console.warn(`The query ${JSON.stringify(e)} on ${this.name} would benefit from a compound index [${r.join("+")}]`);const{idxByName:i}=this.schema,o=this.db._deps.indexedDB;function a(e,t){return 0===o.cmp(e,t)}const[u,l]=r.reduce((([t,r],s)=>{const o=i[s],u=e[s];return[t||o,t||!o?ot(r,o&&o.multi?e=>{const t=g(e,s);return n(t)&&t.some((e=>a(u,e)))}:e=>a(u,g(e,s))):r]}),[null,null]);return u?this.where(u.name).equals(e[u.keyPath]).filter(l):s?this.filter(l):this.where(r).equals("")}filter(e){return this.toCollection().and(e)}count(e){return this.toCollection().count(e)}offset(e){return this.toCollection().offset(e)}limit(e){return this.toCollection().limit(e)}each(e){return this.toCollection().each(e)}toArray(e){return this.toCollection().toArray(e)}toCollection(){return new this.db.Collection(new this.db.WhereClause(this))}orderBy(e){return new this.db.Collection(new this.db.WhereClause(this,n(e)?`[${e.join("+")}]`:e))}reverse(){return this.toCollection().reverse()}mapToClass(e){const{db:t,name:n}=this;this.schema.mappedClass=e,e.prototype instanceof lt&&(e=class extends e{get db(){return t}table(){return n}});const r=new Set;for(let t=e.prototype;t;t=s(t))Object.getOwnPropertyNames(t).forEach((e=>r.add(e)));const i=t=>{if(!t)return t;const n=Object.create(e.prototype);for(let e in t)if(!r.has(e))try{n[e]=t[e]}catch(e){}return n};return this.schema.readHook&&this.hook.reading.unsubscribe(this.schema.readHook),this.schema.readHook=i,this.hook("reading",i),e}defineClass(){return this.mapToClass((function(e){r(this,e)}))}add(e,t){const{auto:n,keyPath:r}=this.schema.primKey;let s=e;return r&&n&&(s=ut(r)(e)),this._trans("readwrite",(e=>this.core.mutate({trans:e,type:"add",keys:null!=t?[t]:null,values:[s]}))).then((e=>e.numFailures?Oe.reject(e.failures[0]):e.lastResult)).then((t=>{if(r)try{v(e,r,t)}catch(e){}return t}))}update(e,t){if("object"!=typeof e||n(e))return this.where(":id").equals(e).modify(t);{const n=g(e,this.schema.primKey.keyPath);return void 0===n?tt(new W.InvalidArgument("Given object does not contain its primary key")):this.where(":id").equals(n).modify(t)}}put(e,t){const{auto:n,keyPath:r}=this.schema.primKey;let s=e;return r&&n&&(s=ut(r)(e)),this._trans("readwrite",(e=>this.core.mutate({trans:e,type:"put",values:[s],keys:null!=t?[t]:null}))).then((e=>e.numFailures?Oe.reject(e.failures[0]):e.lastResult)).then((t=>{if(r)try{v(e,r,t)}catch(e){}return t}))}delete(e){return this._trans("readwrite",(t=>this.core.mutate({trans:t,type:"delete",keys:[e]}))).then((e=>e.numFailures?Oe.reject(e.failures[0]):void 0))}clear(){return this._trans("readwrite",(e=>this.core.mutate({trans:e,type:"deleteRange",range:at}))).then((e=>e.numFailures?Oe.reject(e.failures[0]):void 0))}bulkGet(e){return this._trans("readonly",(t=>this.core.getMany({keys:e,trans:t}).then((e=>e.map((e=>this.hook.reading.fire(e)))))))}bulkAdd(e,t,n){const r=Array.isArray(t)?t:void 0,s=(n=n||(r?void 0:t))?n.allKeys:void 0;return this._trans("readwrite",(t=>{const{auto:n,keyPath:i}=this.schema.primKey;if(i&&r)throw new W.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys");if(r&&r.length!==e.length)throw new W.InvalidArgument("Arguments objects and keys must have the same length");const o=e.length;let a=i&&n?e.map(ut(i)):e;return this.core.mutate({trans:t,type:"add",keys:r,values:a,wantResults:s}).then((({numFailures:e,results:t,lastResult:n,failures:r})=>{if(0===e)return s?t:n;throw new U(`${this.name}.bulkAdd(): ${e} of ${o} operations failed`,r)}))}))}bulkPut(e,t,n){const r=Array.isArray(t)?t:void 0,s=(n=n||(r?void 0:t))?n.allKeys:void 0;return this._trans("readwrite",(t=>{const{auto:n,keyPath:i}=this.schema.primKey;if(i&&r)throw new W.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys");if(r&&r.length!==e.length)throw new W.InvalidArgument("Arguments objects and keys must have the same length");const o=e.length;let a=i&&n?e.map(ut(i)):e;return this.core.mutate({trans:t,type:"put",keys:r,values:a,wantResults:s}).then((({numFailures:e,results:t,lastResult:n,failures:r})=>{if(0===e)return s?t:n;throw new U(`${this.name}.bulkPut(): ${e} of ${o} operations failed`,r)}))}))}bulkUpdate(e){const t=this.core,n=e.map((e=>e.key)),r=e.map((e=>e.changes)),s=[];return this._trans("readwrite",(i=>t.getMany({trans:i,keys:n,cache:"clone"}).then((o=>{const a=[],u=[];e.forEach((({key:e,changes:t},n)=>{const r=o[n];if(r){for(const n of Object.keys(t)){const s=t[n];if(n===this.schema.primKey.keyPath){if(0!==ct(s,e))throw new W.Constraint("Cannot update primary key in bulkUpdate()")}else v(r,n,s)}s.push(n),a.push(e),u.push(r)}}));const l=a.length;return t.mutate({trans:i,type:"put",keys:a,values:u,updates:{keys:n,changeSpecs:r}}).then((({numFailures:e,failures:t})=>{if(0===e)return l;for(const e of Object.keys(t)){const n=s[Number(e)];if(null!=n){const r=t[e];delete t[e],t[n]=r}}throw new U(`${this.name}.bulkUpdate(): ${e} of ${l} operations failed`,t)}))}))))}bulkDelete(e){const t=e.length;return this._trans("readwrite",(t=>this.core.mutate({trans:t,type:"delete",keys:e}))).then((({numFailures:e,lastResult:n,failures:r})=>{if(0===e)return n;throw new U(`${this.name}.bulkDelete(): ${e} of ${t} operations failed`,r)}))}}function pt(e){var r={},s=function(t,n){if(n){for(var s=arguments.length,i=new Array(s-1);--s;)i[s-1]=arguments[s];return r[t].subscribe.apply(null,i),e}if("string"==typeof t)return r[t]};s.addEventType=a;for(var i=1,o=arguments.length;iot(r(),t()):t,e.justLimit=n&&!r}function vt(e,t){if(e.isPrimKey)return t.primaryKey;const n=t.getIndexByKeyPath(e.index);if(!n)throw new W.Schema("KeyPath "+e.index+" on object store "+t.name+" is not indexed");return n}function wt(e,t,n){const r=vt(e,t.schema);return t.openCursor({trans:n,values:!e.keysOnly,reverse:"prev"===e.dir,unique:!!e.unique,query:{index:r,range:e.range}})}function _t(e,t,n,r){const s=e.replayFilter?ot(e.filter,e.replayFilter()):e.filter;if(e.or){const i={},a=(e,n,r)=>{if(!s||s(n,r,(e=>n.stop(e)),(e=>n.fail(e)))){var a=n.primaryKey,u=""+a;"[object ArrayBuffer]"===u&&(u=""+new Uint8Array(a)),o(i,u)||(i[u]=!0,t(e,n,r))}};return Promise.all([e.or._iterate(a,n),xt(wt(e,r,n),e.algorithm,a,!e.keysOnly&&e.valueMapper)])}return xt(wt(e,r,n),ot(e.algorithm,s),t,!e.keysOnly&&e.valueMapper)}function xt(e,t,n,r){var s=Re(r?(e,t,s)=>n(r(e),t,s):n);return e.then((e=>{if(e)return e.start((()=>{var n=()=>e.continue();t&&!t(e,(e=>n=e),(t=>{e.stop(t),n=Q}),(t=>{e.fail(t),n=Q}))||s(e.value,e,(e=>n=e)),n()}))}))}const kt=Symbol();class Ot{execute(e){if(void 0!==this.add){const t=this.add;if(n(t))return[...n(e)?e:[],...t].sort();if("number"==typeof t)return(Number(e)||0)+t;if("bigint"==typeof t)try{return BigInt(e)+t}catch{return BigInt(0)+t}throw new TypeError(`Invalid term ${t}`)}if(void 0!==this.remove){const t=this.remove;if(n(t))return n(e)?e.filter((e=>!t.includes(e))).sort():[];if("number"==typeof t)return Number(e)-t;if("bigint"==typeof t)try{return BigInt(e)-t}catch{return BigInt(0)-t}throw new TypeError(`Invalid subtrahend ${t}`)}const t=this.replacePrefix?.[0];return t&&"string"==typeof e&&e.startsWith(t)?this.replacePrefix[1]+e.substring(t.length):e}constructor(e){Object.assign(this,e)}}class Pt{_read(e,t){var n=this._ctx;return n.error?n.table._trans(null,tt.bind(null,n.error)):n.table._trans("readonly",e).then(t)}_write(e){var t=this._ctx;return t.error?t.table._trans(null,tt.bind(null,t.error)):t.table._trans("readwrite",e,"locked")}_addAlgorithm(e){var t=this._ctx;t.algorithm=ot(t.algorithm,e)}_iterate(e,t){return _t(this._ctx,e,t,this._ctx.table.core)}clone(e){var t=Object.create(this.constructor.prototype),n=Object.create(this._ctx);return e&&r(n,e),t._ctx=n,t}raw(){return this._ctx.valueMapper=null,this}each(e){var t=this._ctx;return this._read((n=>_t(t,e,n,t.table.core)))}count(e){return this._read((e=>{const t=this._ctx,n=t.table.core;if(mt(t,!0))return n.count({trans:e,query:{index:vt(t,n.schema),range:t.range}}).then((e=>Math.min(e,t.limit)));var r=0;return _t(t,(()=>(++r,!1)),e,n).then((()=>r))})).then(e)}sortBy(e,t){const n=e.split(".").reverse(),r=n[0],s=n.length-1;function i(e,t){return t?i(e[n[t]],t-1):e[r]}var o="next"===this._ctx.dir?1:-1;function a(e,t){var n=i(e,s),r=i(t,s);return nr?o:0}return this.toArray((function(e){return e.sort(a)})).then(t)}toArray(e){return this._read((e=>{var t=this._ctx;if("next"===t.dir&&mt(t,!0)&&t.limit>0){const{valueMapper:n}=t,r=vt(t,t.table.core.schema);return t.table.core.query({trans:e,limit:t.limit,values:!0,query:{index:r,range:t.range}}).then((({result:e})=>n?e.map(n):e))}{const n=[];return _t(t,(e=>n.push(e)),e,t.table.core).then((()=>n))}}),e)}offset(e){var t=this._ctx;return e<=0||(t.offset+=e,mt(t)?gt(t,(()=>{var t=e;return(e,n)=>0===t||(1===t?(--t,!1):(n((()=>{e.advance(t),t=0})),!1))})):gt(t,(()=>{var t=e;return()=>--t<0}))),this}limit(e){return this._ctx.limit=Math.min(this._ctx.limit,e),gt(this._ctx,(()=>{var t=e;return function(e,n,r){return--t<=0&&n(r),t>=0}}),!0),this}until(e,t){return bt(this._ctx,(function(n,r,s){return!e(n.value)||(r(s),t)})),this}first(e){return this.limit(1).toArray((function(e){return e[0]})).then(e)}last(e){return this.reverse().first(e)}filter(e){var t,n;return bt(this._ctx,(function(t){return e(t.value)})),t=this._ctx,n=e,t.isMatch=ot(t.isMatch,n),this}and(e){return this.filter(e)}or(e){return new this.db.WhereClause(this._ctx.table,e,this)}reverse(){return this._ctx.dir="prev"===this._ctx.dir?"next":"prev",this._ondirectionchange&&this._ondirectionchange(this._ctx.dir),this}desc(){return this.reverse()}eachKey(e){var t=this._ctx;return t.keysOnly=!t.isMatch,this.each((function(t,n){e(n.key,n)}))}eachUniqueKey(e){return this._ctx.unique="unique",this.eachKey(e)}eachPrimaryKey(e){var t=this._ctx;return t.keysOnly=!t.isMatch,this.each((function(t,n){e(n.primaryKey,n)}))}keys(e){var t=this._ctx;t.keysOnly=!t.isMatch;var n=[];return this.each((function(e,t){n.push(t.key)})).then((function(){return n})).then(e)}primaryKeys(e){var t=this._ctx;if("next"===t.dir&&mt(t,!0)&&t.limit>0)return this._read((e=>{var n=vt(t,t.table.core.schema);return t.table.core.query({trans:e,values:!1,limit:t.limit,query:{index:n,range:t.range}})})).then((({result:e})=>e)).then(e);t.keysOnly=!t.isMatch;var n=[];return this.each((function(e,t){n.push(t.primaryKey)})).then((function(){return n})).then(e)}uniqueKeys(e){return this._ctx.unique="unique",this.keys(e)}firstKey(e){return this.limit(1).keys((function(e){return e[0]})).then(e)}lastKey(e){return this.reverse().firstKey(e)}distinct(){var e=this._ctx,t=e.index&&e.table.schema.idxByName[e.index];if(!t||!t.multi)return this;var n={};return bt(this._ctx,(function(e){var t=e.primaryKey.toString(),r=o(n,t);return n[t]=!0,!r})),this}modify(e){var n=this._ctx;return this._write((r=>{var s;if("function"==typeof e)s=e;else{var i=t(e),o=i.length;s=function(t){let n=!1;for(let r=0;r{const{failures:r,numFailures:s}=n;d+=e-s;for(let e of t(r))h.push(r[e])};return this.clone().primaryKeys().then((t=>{const i=mt(n)&&n.limit===1/0&&("function"!=typeof e||e===Et)&&{index:n.index,range:n.range},o=n=>{const h=Math.min(c,t.length-n);return a.getMany({trans:r,keys:t.slice(n,n+h),cache:"immutable"}).then((d=>{const f=[],y=[],m=u?[]:null,b=[];for(let e=0;e0&&a.mutate({trans:r,type:"add",values:f}).then((e=>{for(let t in e.failures)b.splice(parseInt(t),1);p(f.length,e)}))).then((()=>(y.length>0||i&&"object"==typeof e)&&a.mutate({trans:r,type:"put",keys:m,values:y,criteria:i,changeSpec:"function"!=typeof e&&e,isAdditionalChunk:n>0}).then((e=>p(y.length,e))))).then((()=>(b.length>0||i&&e===Et)&&a.mutate({trans:r,type:"delete",keys:b,criteria:i,isAdditionalChunk:n>0}).then((e=>p(b.length,e))))).then((()=>t.length>n+h&&o(n+c)))}))};return o(0).then((()=>{if(h.length>0)throw new L("Error modifying one or more objects",h,d,f);return t.length}))}))}))}delete(){var e=this._ctx,t=e.range;return mt(e)&&(e.isPrimKey||3===t.type)?this._write((n=>{const{primaryKey:r}=e.table.core.schema,s=t;return e.table.core.count({trans:n,query:{index:r,range:s}}).then((t=>e.table.core.mutate({trans:n,type:"deleteRange",range:s}).then((({failures:e,lastResult:n,results:r,numFailures:s})=>{if(s)throw new L("Could not delete some values",Object.keys(e).map((t=>e[t])),t-s);return t-s}))))})):this.modify(Et)}}const Et=(e,t)=>t.value=null;function Kt(e,t){return et?-1:e===t?0:1}function Ct(e,t,n){var r=e instanceof It?new e.Collection(e):e;return r._ctx.error=n?new n(t):new TypeError(t),r}function At(e){return new e.Collection(e,(()=>Tt(""))).limit(0)}function jt(e,t,n,r,s,i){for(var o=Math.min(e.length,r.length),a=-1,u=0;u=0?e.substr(0,a)+t[a]+n.substr(a+1):null;s(e[u],l)<0&&(a=u)}return o"string"==typeof e)))return Ct(e,"String expected.");function d(e){s=function(e){return"next"===e?e=>e.toUpperCase():e=>e.toLowerCase()}(e),i=function(e){return"next"===e?e=>e.toLowerCase():e=>e.toUpperCase()}(e),o="next"===e?Kt:St;var t=n.map((function(e){return{lower:i(e),upper:s(e)}})).sort((function(e,t){return o(e.lower,t.lower)}));a=t.map((function(e){return e.upper})),u=t.map((function(e){return e.lower})),l=e,c="next"===e?"":r}d("next");var f=new e.Collection(e,(()=>qt(a[0],u[h-1]+r)));f._ondirectionchange=function(e){d(e)};var p=0;return f._addAlgorithm((function(e,n,r){var s=e.key;if("string"!=typeof s)return!1;var d=i(s);if(t(d,u,p))return!0;for(var f=null,y=p;y0)&&(f=m)}return n(null!==f?function(){e.continue(f+c)}:r),!1})),f}function qt(e,t,n,r){return{type:2,lower:e,upper:t,lowerOpen:n,upperOpen:r}}function Tt(e){return{type:1,lower:e,upper:e}}class It{get Collection(){return this._ctx.table.db.Collection}between(e,t,n,r){n=!1!==n,r=!0===r;try{return this._cmp(e,t)>0||0===this._cmp(e,t)&&(n||r)&&(!n||!r)?At(this):new this.Collection(this,(()=>qt(e,t,!n,!r)))}catch(e){return Ct(this,st)}}equals(e){return null==e?Ct(this,st):new this.Collection(this,(()=>Tt(e)))}above(e){return null==e?Ct(this,st):new this.Collection(this,(()=>qt(e,void 0,!0)))}aboveOrEqual(e){return null==e?Ct(this,st):new this.Collection(this,(()=>qt(e,void 0,!1)))}below(e){return null==e?Ct(this,st):new this.Collection(this,(()=>qt(void 0,e,!1,!0)))}belowOrEqual(e){return null==e?Ct(this,st):new this.Collection(this,(()=>qt(void 0,e)))}startsWith(e){return"string"!=typeof e?Ct(this,"String expected."):this.between(e,e+rt,!0,!0)}startsWithIgnoreCase(e){return""===e?this.startsWith(e):Dt(this,((e,t)=>0===e.indexOf(t[0])),[e],rt)}equalsIgnoreCase(e){return Dt(this,((e,t)=>e===t[0]),[e],"")}anyOfIgnoreCase(){var e=I.apply(T,arguments);return 0===e.length?At(this):Dt(this,((e,t)=>-1!==t.indexOf(e)),e,"")}startsWithAnyOfIgnoreCase(){var e=I.apply(T,arguments);return 0===e.length?At(this):Dt(this,((e,t)=>t.some((t=>0===e.indexOf(t)))),e,rt)}anyOf(){const e=I.apply(T,arguments);let t=this._cmp;try{e.sort(t)}catch(e){return Ct(this,st)}if(0===e.length)return At(this);const n=new this.Collection(this,(()=>qt(e[0],e[e.length-1])));n._ondirectionchange=n=>{t="next"===n?this._ascending:this._descending,e.sort(t)};let r=0;return n._addAlgorithm(((n,s,i)=>{const o=n.key;for(;t(o,e[r])>0;)if(++r,r===e.length)return s(i),!1;return 0===t(o,e[r])||(s((()=>{n.continue(e[r])})),!1)})),n}notEqual(e){return this.inAnyRange([[-(1/0),e],[e,this.db._maxKey]],{includeLowers:!1,includeUppers:!1})}noneOf(){const e=I.apply(T,arguments);if(0===e.length)return new this.Collection(this);try{e.sort(this._ascending)}catch(e){return Ct(this,st)}const t=e.reduce(((e,t)=>e?e.concat([[e[e.length-1][1],t]]):[[-(1/0),t]]),null);return t.push([e[e.length-1],this.db._maxKey]),this.inAnyRange(t,{includeLowers:!1,includeUppers:!1})}inAnyRange(e,t){const n=this._cmp,r=this._ascending,s=this._descending,i=this._min,o=this._max;if(0===e.length)return At(this);if(!e.every((e=>void 0!==e[0]&&void 0!==e[1]&&r(e[0],e[1])<=0)))return Ct(this,"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower",W.InvalidArgument);const a=!t||!1!==t.includeLowers,u=t&&!0===t.includeUppers;let l,c=r;function h(e,t){return c(e[0],t[0])}try{l=e.reduce((function(e,t){let r=0,s=e.length;for(;r0){s[0]=i(s[0],t[0]),s[1]=o(s[1],t[1]);break}}return r===s&&e.push(t),e}),[]),l.sort(h)}catch(e){return Ct(this,st)}let d=0;const f=u?e=>r(e,l[d][1])>0:e=>r(e,l[d][1])>=0,p=a?e=>s(e,l[d][0])>0:e=>s(e,l[d][0])>=0;let y=f;const m=new this.Collection(this,(()=>qt(l[0][0],l[l.length-1][1],!a,!u)));return m._ondirectionchange=e=>{"next"===e?(y=f,c=r):(y=p,c=s),l.sort(h)},m._addAlgorithm(((e,t,n)=>{for(var s=e.key;y(s);)if(++d,d===l.length)return t(n),!1;return!!function(e){return!f(e)&&!p(e)}(s)||(0===this._cmp(s,l[d][1])||0===this._cmp(s,l[d][0])||t((()=>{c===r?e.continue(l[d][0]):e.continue(l[d][1])})),!1)})),m}startsWithAnyOf(){const e=I.apply(T,arguments);return e.every((e=>"string"==typeof e))?0===e.length?At(this):this.inAnyRange(e.map((e=>[e,e+rt]))):Ct(this,"startsWithAnyOf() only works with strings")}}function Bt(e){return Re((function(t){return Rt(t),e(t.target.error),!1}))}function Rt(e){e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault()}const $t=pt(null,"storagemutated");class Ft{_lock(){return m(!we.global),++this._reculock,1!==this._reculock||we.global||(we.lockOwnerFor=this),this}_unlock(){if(m(!we.global),0==--this._reculock)for(we.global||(we.lockOwnerFor=null);this._blockedFuncs.length>0&&!this._locked();){var e=this._blockedFuncs.shift();try{Je(e[1],e[0])}catch(e){}}return this}_locked(){return this._reculock&&we.lockOwnerFor!==this}create(e){if(!this.mode)return this;const t=this.db.idbdb,n=this.db._state.dbOpenError;if(m(!this.idbtrans),!e&&!t)switch(n&&n.name){case"DatabaseClosedError":throw new W.DatabaseClosed(n);case"MissingAPIError":throw new W.MissingAPI(n.message,n);default:throw new W.OpenFailed(n)}if(!this.active)throw new W.TransactionInactive;return m(null===this._completion._state),(e=this.idbtrans=e||(this.db.core?this.db.core.transaction(this.storeNames,this.mode,{durability:this.chromeTransactionDurability}):t.transaction(this.storeNames,this.mode,{durability:this.chromeTransactionDurability}))).onerror=Re((t=>{Rt(t),this._reject(e.error)})),e.onabort=Re((t=>{Rt(t),this.active&&this._reject(new W.Abort(e.error)),this.active=!1,this.on("abort").fire(t)})),e.oncomplete=Re((()=>{this.active=!1,this._resolve(),"mutatedParts"in e&&$t.storagemutated.fire(e.mutatedParts)})),this}_promise(e,t,n){if("readwrite"===e&&"readwrite"!==this.mode)return tt(new W.ReadOnly("Transaction is readonly"));if(!this.active)return tt(new W.TransactionInactive);if(this._locked())return new Oe(((r,s)=>{this._blockedFuncs.push([()=>{this._promise(e,t,n).then(r,s)},we])}));if(n)return Ve((()=>{var e=new Oe(((e,n)=>{this._lock();const r=t(e,n,this);r&&r.then&&r.then(e,n)}));return e.finally((()=>this._unlock())),e._lib=!0,e}));var r=new Oe(((e,n)=>{var r=t(e,n,this);r&&r.then&&r.then(e,n)}));return r._lib=!0,r}_root(){return this.parent?this.parent._root():this}waitFor(e){var t=this._root();const n=Oe.resolve(e);if(t._waitingFor)t._waitingFor=t._waitingFor.then((()=>n));else{t._waitingFor=n,t._waitingQueue=[];var r=t.idbtrans.objectStore(t.storeNames[0]);!function e(){for(++t._spinCount;t._waitingQueue.length;)t._waitingQueue.shift()();t._waitingFor&&(r.get(-1/0).onsuccess=e)}()}var s=t._waitingFor;return new Oe(((e,r)=>{n.then((n=>t._waitingQueue.push(Re(e.bind(null,n)))),(e=>t._waitingQueue.push(Re(r.bind(null,e))))).finally((()=>{t._waitingFor===s&&(t._waitingFor=null)}))}))}abort(){this.active&&(this.active=!1,this.idbtrans&&this.idbtrans.abort(),this._reject(new W.Abort))}table(e){const t=this._memoizedTables||(this._memoizedTables={});if(o(t,e))return t[e];const n=this.schema[e];if(!n)throw new W.NotFound("Table "+e+" not part of transaction");const r=new this.db.Table(e,n,this);return r.core=this.db.core.table(e),t[e]=r,r}}function Nt(e,t,n,r,s,i,o){return{name:e,keyPath:t,unique:n,multi:r,auto:s,compound:i,src:(n&&!o?"&":"")+(r?"*":"")+(s?"++":"")+Mt(t)}}function Mt(e){return"string"==typeof e?e:e?"["+[].join.call(e,"+")+"]":""}function Lt(e,t,n){return{name:e,primKey:t,indexes:n,mappedClass:null,idxByName:(r=n,s=e=>[e.name,e],r.reduce(((e,t,n)=>{var r=s(t,n);return r&&(e[r[0]]=r[1]),e}),{}))};var r,s}let Ut=e=>{try{return e.only([[]]),Ut=()=>[[]],[[]]}catch(e){return Ut=()=>rt,rt}};function Vt(e){return null==e?()=>{}:"string"==typeof e?function(e){return 1===e.split(".").length?t=>t[e]:t=>g(t,e)}(e):t=>g(t,e)}function zt(e){return[].slice.call(e)}let Wt=0;function Yt(e){return null==e?":id":"string"==typeof e?e:`[${e.join("+")}]`}function Gt(e,t,r){function s(e){if(3===e.type)return null;if(4===e.type)throw new Error("Cannot convert never type to IDBKeyRange");const{lower:n,upper:r,lowerOpen:s,upperOpen:i}=e;return void 0===n?void 0===r?null:t.upperBound(r,!!i):void 0===r?t.lowerBound(n,!!s):t.bound(n,r,!!s,!!i)}const{schema:i,hasGetAll:o}=function(e,t){const r=zt(e.objectStoreNames);return{schema:{name:e.name,tables:r.map((e=>t.objectStore(e))).map((e=>{const{keyPath:t,autoIncrement:r}=e,s=n(t),i=null==t,o={},a={name:e.name,primaryKey:{name:null,isPrimaryKey:!0,outbound:i,compound:s,keyPath:t,autoIncrement:r,unique:!0,extractKey:Vt(t)},indexes:zt(e.indexNames).map((t=>e.index(t))).map((e=>{const{name:t,unique:r,multiEntry:s,keyPath:i}=e,a={name:t,compound:n(i),keyPath:i,unique:r,multiEntry:s,extractKey:Vt(i)};return o[Yt(i)]=a,a})),getIndexByKeyPath:e=>o[Yt(e)]};return o[":id"]=a.primaryKey,null!=t&&(o[Yt(t)]=a.primaryKey),a}))},hasGetAll:r.length>0&&"getAll"in t.objectStore(r[0])&&!("undefined"!=typeof navigator&&/Safari/.test(navigator.userAgent)&&!/(Chrome\/|Edge\/)/.test(navigator.userAgent)&&[].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1]<604)}}(e,r),a=i.tables.map((e=>function(e){const t=e.name;return{name:t,schema:e,mutate:function({trans:e,type:n,keys:r,values:i,range:o}){return new Promise(((a,u)=>{a=Re(a);const l=e.objectStore(t),c=null==l.keyPath,h="put"===n||"add"===n;if(!h&&"delete"!==n&&"deleteRange"!==n)throw new Error("Invalid operation type: "+n);const{length:d}=r||i||{length:1};if(r&&i&&r.length!==i.length)throw new Error("Given keys array must have same length as given values array.");if(0===d)return a({numFailures:0,failures:{},results:[],lastResult:void 0});let f;const p=[],y=[];let m=0;const b=e=>{++m,Rt(e)};if("deleteRange"===n){if(4===o.type)return a({numFailures:m,failures:y,results:[],lastResult:void 0});3===o.type?p.push(f=l.clear()):p.push(f=l.delete(s(o)))}else{const[e,t]=h?c?[i,r]:[i,null]:[r,null];if(h)for(let r=0;r{const t=e.target.result;p.forEach(((e,t)=>null!=e.error&&(y[t]=e.error))),a({numFailures:m,failures:y,results:"delete"===n?r:p.map((e=>e.result)),lastResult:t})};f.onerror=e=>{b(e),g(e)},f.onsuccess=g}))},getMany:({trans:e,keys:n})=>new Promise(((r,s)=>{r=Re(r);const i=e.objectStore(t),o=n.length,a=new Array(o);let u,l=0,c=0;const h=e=>{const t=e.target;a[t._pos]=t.result,++c===l&&r(a)},d=Bt(s);for(let e=0;enew Promise(((r,s)=>{r=Re(r);const i=e.objectStore(t).get(n);i.onsuccess=e=>r(e.target.result),i.onerror=Bt(s)})),query:function(e){return n=>new Promise(((r,i)=>{r=Re(r);const{trans:o,values:a,limit:u,query:l}=n,c=u===1/0?void 0:u,{index:h,range:d}=l,f=o.objectStore(t),p=h.isPrimaryKey?f:f.index(h.name),y=s(d);if(0===u)return r({result:[]});if(e){const e=a?p.getAll(y,c):p.getAllKeys(y,c);e.onsuccess=e=>r({result:e.target.result}),e.onerror=Bt(i)}else{let e=0;const t=a||!("openKeyCursor"in p)?p.openCursor(y):p.openKeyCursor(y),n=[];t.onsuccess=s=>{const i=t.result;return i?(n.push(a?i.value:i.primaryKey),++e===u?r({result:n}):void i.continue()):r({result:n})},t.onerror=Bt(i)}}))}(o),openCursor:function({trans:e,values:n,query:r,reverse:i,unique:o}){return new Promise(((a,u)=>{a=Re(a);const{index:l,range:c}=r,h=e.objectStore(t),d=l.isPrimaryKey?h:h.index(l.name),f=i?o?"prevunique":"prev":o?"nextunique":"next",p=n||!("openKeyCursor"in d)?d.openCursor(s(c),f):d.openKeyCursor(s(c),f);p.onerror=Bt(u),p.onsuccess=Re((t=>{const n=p.result;if(!n)return void a(null);n.___id=++Wt,n.done=!1;const r=n.continue.bind(n);let s=n.continuePrimaryKey;s&&(s=s.bind(n));const i=n.advance.bind(n),o=()=>{throw new Error("Cursor not stopped")};n.trans=e,n.stop=n.continue=n.continuePrimaryKey=n.advance=()=>{throw new Error("Cursor not started")},n.fail=Re(u),n.next=function(){let e=1;return this.start((()=>e--?this.continue():this.stop())).then((()=>this))},n.start=e=>{const t=new Promise(((e,t)=>{e=Re(e),p.onerror=Bt(t),n.fail=t,n.stop=t=>{n.stop=n.continue=n.continuePrimaryKey=n.advance=o,e(t)}})),a=()=>{if(p.result)try{e()}catch(e){n.fail(e)}else n.done=!0,n.start=()=>{throw new Error("Cursor behind last entry")},n.stop()};return p.onsuccess=Re((e=>{p.onsuccess=a,a()})),n.continue=r,n.continuePrimaryKey=s,n.advance=i,a(),t},a(n)}),u)}))},count({query:e,trans:n}){const{index:r,range:i}=e;return new Promise(((e,o)=>{const a=n.objectStore(t),u=r.isPrimaryKey?a:a.index(r.name),l=s(i),c=l?u.count(l):u.count();c.onsuccess=Re((t=>e(t.target.result))),c.onerror=Bt(o)}))}}}(e))),u={};return a.forEach((e=>u[e.name]=e)),{stack:"dbcore",transaction:e.transaction.bind(e),table(e){if(!u[e])throw new Error(`Table '${e}' not found`);return u[e]},MIN_KEY:-1/0,MAX_KEY:Ut(t),schema:i}}function Qt(e,t){const n=t.db,r=function(e,t,{IDBKeyRange:n,indexedDB:r},s){const i=function(e,t){return t.reduce(((e,{create:t})=>({...e,...t(e)})),e)}(Gt(t,n,s),e.dbcore);return{dbcore:i}}(e._middlewares,n,e._deps,t);e.core=r.dbcore,e.tables.forEach((t=>{const n=t.name;e.core.schema.tables.some((e=>e.name===n))&&(t.core=e.core.table(n),e[n]instanceof e.Table&&(e[n].core=t.core))}))}function Xt(e,t,n,r){n.forEach((n=>{const s=r[n];t.forEach((t=>{const r=d(t,n);(!r||"value"in r&&void 0===r.value)&&(t===e.Transaction.prototype||t instanceof e.Transaction?l(t,n,{get(){return this.table(n)},set(e){u(this,n,{value:e,writable:!0,configurable:!0,enumerable:!0})}}):t[n]=new e.Table(n,s))}))}))}function Ht(e,t){t.forEach((t=>{for(let n in t)t[n]instanceof e.Table&&delete t[n]}))}function Jt(e,t){return e._cfg.version-t._cfg.version}function Zt(e,n,r,s){const i=e._dbSchema;r.objectStoreNames.contains("$meta")&&!i.$meta&&(i.$meta=Lt("$meta",an("")[0],[]),e._storeNames.push("$meta"));const o=e._createTransaction("readwrite",e._storeNames,i);o.create(r),o._completion.catch(s);const a=o._reject.bind(o),u=we.transless||we;Ve((()=>{if(we.trans=o,we.transless=u,0!==n)return Qt(e,r),function(e,t,n){return t.storeNames.includes("$meta")?t.table("$meta").get("version").then((e=>null!=e?e:n)):Oe.resolve(n)}(0,o,n).then((n=>function(e,n,r,s){const i=[],o=e._versions;let a=e._dbSchema=sn(e,e.idbdb,s);const u=o.filter((e=>e._cfg.version>=n));if(0===u.length)return Oe.resolve();function l(){return i.length?Oe.resolve(i.shift()(r.idbtrans)).then(l):Oe.resolve()}return u.forEach((o=>{i.push((()=>{const i=a,u=o._cfg.dbschema;on(e,i,s),on(e,u,s),a=e._dbSchema=u;const l=en(i,u);l.add.forEach((e=>{tn(s,e[0],e[1].primKey,e[1].indexes)})),l.change.forEach((e=>{if(e.recreate)throw new W.Upgrade("Not yet support for changing primary key");{const t=s.objectStore(e.name);e.add.forEach((e=>rn(t,e))),e.change.forEach((e=>{t.deleteIndex(e.name),rn(t,e)})),e.del.forEach((e=>t.deleteIndex(e)))}}));const c=o._cfg.contentUpgrade;if(c&&o._cfg.version>n){Qt(e,s),r._memoizedTables={};let n=w(u);l.del.forEach((e=>{n[e]=i[e]})),Ht(e,[e.Transaction.prototype]),Xt(e,[e.Transaction.prototype],t(n),n),r.schema=n;const o=B(c);let a;o&&ze();const h=Oe.follow((()=>{if(a=c(r),a&&o){var e=We.bind(null,null);a.then(e,e)}}));return a&&"function"==typeof a.then?Oe.resolve(a):h.then((()=>a))}})),i.push((t=>{!function(e,t){[].slice.call(t.db.objectStoreNames).forEach((n=>null==e[n]&&t.db.deleteObjectStore(n)))}(o._cfg.dbschema,t),Ht(e,[e.Transaction.prototype]),Xt(e,[e.Transaction.prototype],e._storeNames,e._dbSchema),r.schema=e._dbSchema})),i.push((t=>{e.idbdb.objectStoreNames.contains("$meta")&&(Math.ceil(e.idbdb.version/10)===o._cfg.version?(e.idbdb.deleteObjectStore("$meta"),delete e._dbSchema.$meta,e._storeNames=e._storeNames.filter((e=>"$meta"!==e))):t.objectStore("$meta").put(o._cfg.version,"version"))}))})),l().then((()=>{nn(a,s)}))}(e,n,o,r))).catch(a);t(i).forEach((e=>{tn(r,e,i[e].primKey,i[e].indexes)})),Qt(e,r),Oe.follow((()=>e.on.populate.fire(o))).catch(a)}))}function en(e,t){const n={del:[],add:[],change:[]};let r;for(r in e)t[r]||n.del.push(r);for(r in t){const s=e[r],i=t[r];if(s){const e={name:r,def:i,recreate:!1,del:[],add:[],change:[]};if(""+(s.primKey.keyPath||"")!=""+(i.primKey.keyPath||"")||s.primKey.auto!==i.primKey.auto)e.recreate=!0,n.change.push(e);else{const t=s.idxByName,r=i.idxByName;let o;for(o in t)r[o]||e.del.push(o);for(o in r){const n=t[o],s=r[o];n?n.src!==s.src&&e.change.push(s):e.add.push(s)}(e.del.length>0||e.add.length>0||e.change.length>0)&&n.change.push(e)}}else n.add.push([r,i])}return n}function tn(e,t,n,r){const s=e.db.createObjectStore(t,n.keyPath?{keyPath:n.keyPath,autoIncrement:n.auto}:{autoIncrement:n.auto});return r.forEach((e=>rn(s,e))),s}function nn(e,n){t(e).forEach((t=>{n.db.objectStoreNames.contains(t)||(se&&console.debug("Dexie: Creating missing table",t),tn(n,t,e[t].primKey,e[t].indexes))}))}function rn(e,t){e.createIndex(t.name,t.keyPath,{unique:t.unique,multiEntry:t.multi})}function sn(e,t,n){const r={};return p(t.objectStoreNames,0).forEach((e=>{const t=n.objectStore(e);let s=t.keyPath;const i=Nt(Mt(s),s||"",!0,!1,!!t.autoIncrement,s&&"string"!=typeof s,!0),o=[];for(let e=0;e{const r=(e=e.trim()).replace(/([&*]|\+\+)/g,""),s=/^\[/.test(r)?r.match(/^\[(.*)\]$/)[1].split("+"):r;return Nt(r,s||null,/\&/.test(e),/\*/.test(e),/\+\+/.test(e),n(s),0===t)}))}class un{_parseStoresSpec(e,n){t(e).forEach((t=>{if(null!==e[t]){var r=an(e[t]),s=r.shift();if(s.unique=!0,s.multi)throw new W.Schema("Primary key cannot be multi-valued");r.forEach((e=>{if(e.auto)throw new W.Schema("Only primary key can be marked as autoIncrement (++)");if(!e.keyPath)throw new W.Schema("Index must have a name and cannot be an empty string")})),n[t]=Lt(t,s,r)}}))}stores(e){const n=this.db;this._cfg.storesSource=this._cfg.storesSource?r(this._cfg.storesSource,e):e;const s=n._versions,i={};let o={};return s.forEach((e=>{r(i,e._cfg.storesSource),o=e._cfg.dbschema={},e._parseStoresSpec(i,o)})),n._dbSchema=o,Ht(n,[n._allTables,n,n.Transaction.prototype]),Xt(n,[n._allTables,n,n.Transaction.prototype,this._cfg.tables],t(o),o),n._storeNames=t(o),this}upgrade(e){return this._cfg.contentUpgrade=re(this._cfg.contentUpgrade||Q,e),this}}function ln(e,t){let n=e._dbNamesDB;return n||(n=e._dbNamesDB=new Hn("__dbnames",{addons:[],indexedDB:e,IDBKeyRange:t}),n.version(1).stores({dbnames:"name"})),n.table("dbnames")}function cn(e){return e&&"function"==typeof e.databases}function hn(e){return Ve((function(){return we.letThrough=!0,e()}))}function dn(){var e;return!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise((function(t){var n=function(){return indexedDB.databases().finally(t)};e=setInterval(n,100),n()})).finally((function(){return clearInterval(e)})):Promise.resolve()}function fn(e){return!("from"in e)}const pn=function(e,t){if(!this){const t=new pn;return e&&"d"in e&&r(t,e),t}r(this,arguments.length?{d:1,from:e,to:arguments.length>1?t:e}:{d:0})};function yn(e,t,n){const s=ct(t,n);if(isNaN(s))return;if(s>0)throw RangeError();if(fn(e))return r(e,{from:t,to:n,d:1});const i=e.l,o=e.r;if(ct(n,e.from)<0)return i?yn(i,t,n):e.l={from:t,to:n,d:1,l:null,r:null},vn(e);if(ct(t,e.to)>0)return o?yn(o,t,n):e.r={from:t,to:n,d:1,l:null,r:null},vn(e);ct(t,e.from)<0&&(e.from=t,e.l=null,e.d=o?o.d+1:1),ct(n,e.to)>0&&(e.to=n,e.r=null,e.d=e.l?e.l.d+1:1);const a=!e.r;i&&!e.l&&mn(e,i),o&&a&&mn(e,o)}function mn(e,t){fn(t)||function e(t,{from:n,to:r,l:s,r:i}){yn(t,n,r),s&&e(t,s),i&&e(t,i)}(e,t)}function bn(e,t){const n=gn(t);let r=n.next();if(r.done)return!1;let s=r.value;const i=gn(e);let o=i.next(s.from),a=o.value;for(;!r.done&&!o.done;){if(ct(a.from,s.to)<=0&&ct(a.to,s.from)>=0)return!0;ct(s.from,a.from)<0?s=(r=n.next(a.from)).value:a=(o=i.next(s.from)).value}return!1}function gn(e){let t=fn(e)?null:{s:0,n:e};return{next(e){const n=arguments.length>0;for(;t;)switch(t.s){case 0:if(t.s=1,n)for(;t.n.l&&ct(e,t.n.from)<0;)t={up:t,n:t.n.l,s:1};else for(;t.n.l;)t={up:t,n:t.n.l,s:1};case 1:if(t.s=2,!n||ct(e,t.n.to)<=0)return{value:t.n,done:!1};case 2:if(t.n.r){t.s=3,t={up:t,n:t.n.r,s:0};continue}case 3:t=t.up}return{done:!0}}}}function vn(e){const t=(e.r?.d||0)-(e.l?.d||0),n=t>1?"r":t<-1?"l":"";if(n){const t="r"===n?"l":"r",r={...e},s=e[n];e.from=s.from,e.to=s.to,e[n]=s[n],r[n]=s[t],e[t]=r,r.d=wn(r)}e.d=wn(e)}function wn({r:e,l:t}){return(e?t?Math.max(e.d,t.d):e.d:t?t.d:0)+1}function _n(e,n){return t(n).forEach((t=>{e[t]?mn(e[t],n[t]):e[t]=P(n[t])})),e}function xn(e,t){return e.all||t.all||Object.keys(e).some((n=>t[n]&&bn(t[n],e[n])))}a(pn.prototype,{add(e){return mn(this,e),this},addKey(e){return yn(this,e,e),this},addKeys(e){return e.forEach((e=>yn(this,e,e))),this},[j](){return gn(this)}});const kn={};let On={},Pn=!1;function En(e,t=!1){_n(On,e),Pn||(Pn=!0,setTimeout((()=>{Pn=!1;const e=On;On={},Kn(e,!1)}),0))}function Kn(e,t=!1){const n=new Set;if(e.all)for(const r of Object.values(kn))Sn(r,e,n,t);else for(const r in e){const s=/^idb\:\/\/(.*)\/(.*)\//.exec(r);if(s){const[,r,i]=s,o=kn[`idb://${r}/${i}`];o&&Sn(o,e,n,t)}}n.forEach((e=>e()))}function Sn(e,t,n,r){const s=[];for(const[i,o]of Object.entries(e.queries.query)){const e=[];for(const s of o)xn(t,s.obsSet)?s.subscribers.forEach((e=>n.add(e))):r&&e.push(s);r&&s.push([i,e])}if(r)for(const[t,n]of s)e.queries.query[t]=n}function Cn(e){const n=e._state,{indexedDB:r}=e._deps;if(n.isBeingOpened||e.idbdb)return n.dbReadyPromise.then((()=>n.dbOpenError?tt(n.dbOpenError):e));n.isBeingOpened=!0,n.dbOpenError=null,n.openComplete=!1;const s=n.openCanceller;let i=Math.round(10*e.verno),o=!1;function a(){if(n.openCanceller!==s)throw new W.DatabaseClosed("db.open() was cancelled")}let u=n.dbReadyResolve,l=null,c=!1;const h=()=>new Oe(((s,u)=>{if(a(),!r)throw new W.MissingAPI;const d=e.name,f=n.autoSchema||!i?r.open(d):r.open(d,i);if(!f)throw new W.MissingAPI;f.onerror=Bt(u),f.onblocked=Re(e._fireOnBlocked),f.onupgradeneeded=Re((t=>{if(l=f.transaction,n.autoSchema&&!e._options.allowEmptyDB){f.onerror=Rt,l.abort(),f.result.close();const e=r.deleteDatabase(d);e.onsuccess=e.onerror=Re((()=>{u(new W.NoSuchDatabase(`Database ${d} doesnt exist`))}))}else{l.onerror=Bt(u);const n=t.oldVersion>Math.pow(2,62)?0:t.oldVersion;c=n<1,e.idbdb=f.result,o&&function(e,t){nn(e._dbSchema,t),t.db.version%10!=0||t.objectStoreNames.contains("$meta")||t.db.createObjectStore("$meta").add(Math.ceil(t.db.version/10-1),"version");const n=sn(0,e.idbdb,t);on(e,e._dbSchema,t);const r=en(n,e._dbSchema);for(const e of r.change){if(e.change.length||e.recreate)return void console.warn(`Unable to patch indexes of table ${e.name} because it has changes on the type of index or primary key.`);const n=t.objectStore(e.name);e.add.forEach((t=>{se&&console.debug(`Dexie upgrade patch: Creating missing index ${e.name}.${t.src}`),rn(n,t)}))}}(e,l),Zt(e,n/10,l,u)}}),u),f.onsuccess=Re((()=>{l=null;const r=e.idbdb=f.result,a=p(r.objectStoreNames);if(a.length>0)try{const l=r.transaction(1===(u=a).length?u[0]:u,"readonly");if(n.autoSchema)!function(e,n,r){e.verno=n.version/10;const s=e._dbSchema=sn(0,n,r);e._storeNames=p(n.objectStoreNames,0),Xt(e,[e._allTables],t(s),s)}(e,r,l);else if(on(e,e._dbSchema,l),!function(e,t){const n=en(sn(0,e.idbdb,t),e._dbSchema);return!(n.add.length||n.change.some((e=>e.add.length||e.change.length)))}(e,l)&&!o)return console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this."),r.close(),i=r.version+1,o=!0,s(h());Qt(e,l)}catch(e){}var u;it.push(e),r.onversionchange=Re((t=>{n.vcFired=!0,e.on("versionchange").fire(t)})),r.onclose=Re((t=>{e.on("close").fire(t)})),c&&function({indexedDB:e,IDBKeyRange:t},n){!cn(e)&&"__dbnames"!==n&&ln(e,t).put({name:n}).catch(Q)}(e._deps,d),s()}),u)})).catch((e=>{switch(e?.name){case"UnknownError":if(n.PR1398_maxLoop>0)return n.PR1398_maxLoop--,console.warn("Dexie: Workaround for Chrome UnknownError on open()"),h();break;case"VersionError":if(i>0)return i=0,h()}return Oe.reject(e)}));return Oe.race([s,("undefined"==typeof navigator?Oe.resolve():dn()).then(h)]).then((()=>(a(),n.onReadyBeingFired=[],Oe.resolve(hn((()=>e.on.ready.fire(e.vip)))).then((function t(){if(n.onReadyBeingFired.length>0){let r=n.onReadyBeingFired.reduce(re,Q);return n.onReadyBeingFired=[],Oe.resolve(hn((()=>r(e.vip)))).then(t)}}))))).finally((()=>{n.openCanceller===s&&(n.onReadyBeingFired=null,n.isBeingOpened=!1)})).catch((t=>{n.dbOpenError=t;try{l&&l.abort()}catch{}return s===n.openCanceller&&e._close(),tt(t)})).finally((()=>{n.openComplete=!0,u()})).then((()=>{if(c){const t={};e.tables.forEach((n=>{n.schema.indexes.forEach((r=>{r.name&&(t[`idb://${e.name}/${n.name}/${r.name}`]=new pn(-1/0,[[[]]]))})),t[`idb://${e.name}/${n.name}/`]=t[`idb://${e.name}/${n.name}/:dels`]=new pn(-1/0,[[[]]])})),$t("storagemutated").fire(t),Kn(t,!0)}return e}))}function An(e){var t=t=>e.next(t),r=i(t),s=i((t=>e.throw(t)));function i(e){return t=>{var i=e(t),o=i.value;return i.done?o:o&&"function"==typeof o.then?o.then(r,s):n(o)?Promise.all(o).then(r,s):r(o)}}return i(t)()}function jn(e,t,n){var r=arguments.length;if(r<2)throw new W.InvalidArgument("Too few arguments");for(var s=new Array(r-1);--r;)s[r-1]=arguments[r];n=s.pop();var i=x(s);return[e,i,n]}function Dn(e,t,n,r,s){return Oe.resolve().then((()=>{const i=we.transless||we,o=e._createTransaction(t,n,e._dbSchema,r);o.explicit=!0;const a={trans:o,transless:i};if(r)o.idbtrans=r.idbtrans;else try{o.create(),o.idbtrans._explicit=!0,e._state.PR1398_maxLoop=3}catch(r){return r.name===V.InvalidState&&e.isOpen()&&--e._state.PR1398_maxLoop>0?(console.warn("Dexie: Need to reopen db"),e.close({disableAutoOpen:!1}),e.open().then((()=>Dn(e,t,n,null,s)))):tt(r)}const u=B(s);let l;u&&ze();const c=Oe.follow((()=>{if(l=s.call(o,o),l)if(u){var e=We.bind(null,null);l.then(e,e)}else"function"==typeof l.next&&"function"==typeof l.throw&&(l=An(l))}),a);return(l&&"function"==typeof l.then?Oe.resolve(l).then((e=>o.active?e:tt(new W.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")))):c.then((()=>l))).then((e=>(r&&o._resolve(),o._completion.then((()=>e))))).catch((e=>(o._reject(e),tt(e))))}))}function qn(e,t,r){const s=n(e)?e.slice():[e];for(let e=0;e0,c={...n,name:l?`${r}(virtual-from:${n.name})`:n.name,lowLevelIndex:n,isVirtual:l,keyTail:t,keyLength:u,extractKey:Vt(e),unique:!l&&n.unique};if(a.push(c),c.isPrimaryKey||i.push(c),u>1){o(2===u?e[0]:e.slice(0,u-1),t+1,n)}return a.sort(((e,t)=>e.keyTail-t.keyTail)),c}const a=o(r.primaryKey.keyPath,0,r.primaryKey);s[":id"]=[a];for(const e of r.indexes)o(e.keyPath,0,e);function u(t){const n=t.query.index;return n.isVirtual?{...t,query:{index:n.lowLevelIndex,range:(r=t.query.range,s=n.keyTail,{type:1===r.type?2:r.type,lower:qn(r.lower,r.lowerOpen?e.MAX_KEY:e.MIN_KEY,s),lowerOpen:!0,upper:qn(r.upper,r.upperOpen?e.MIN_KEY:e.MAX_KEY,s),upperOpen:!0})}}:t;var r,s}const l={...n,schema:{...r,primaryKey:a,indexes:i,getIndexByKeyPath:function(e){const t=s[Yt(e)];return t&&t[0]}},count:e=>n.count(u(e)),query:e=>n.query(u(e)),openCursor(t){const{keyTail:r,isVirtual:s,keyLength:i}=t.query.index;if(!s)return n.openCursor(t);return n.openCursor(u(t)).then((n=>n&&function(n){const s=Object.create(n,{continue:{value:function(s){null!=s?n.continue(qn(s,t.reverse?e.MAX_KEY:e.MIN_KEY,r)):t.unique?n.continue(n.key.slice(0,i).concat(t.reverse?e.MIN_KEY:e.MAX_KEY,r)):n.continue()}},continuePrimaryKey:{value(t,s){n.continuePrimaryKey(qn(t,e.MAX_KEY,r),s)}},primaryKey:{get:()=>n.primaryKey},key:{get(){const e=n.key;return 1===i?e[0]:e.slice(0,i)}},value:{get:()=>n.value}});return s}(n)))}};return l}}}};function In(e,n,r,s){return r=r||{},s=s||"",t(e).forEach((t=>{if(o(n,t)){var i=e[t],a=n[t];if("object"==typeof i&&"object"==typeof a&&i&&a){const e=A(i);e!==A(a)?r[s+t]=n[t]:"Object"===e?In(i,a,r,s+t+"."):i!==a&&(r[s+t]=n[t])}else i!==a&&(r[s+t]=n[t])}else r[s+t]=void 0})),t(n).forEach((t=>{o(e,t)||(r[s+t]=n[t])})),r}function Bn(e,t){return"delete"===t.type?t.keys:t.keys||t.values.map(e.extractKey)}const Rn={stack:"dbcore",name:"HooksMiddleware",level:2,create:e=>({...e,table(t){const n=e.table(t),{primaryKey:r}=n.schema,s={...n,mutate(e){const s=we.trans,{deleting:i,creating:a,updating:u}=s.table(t).hook;switch(e.type){case"add":if(a.fire===Q)break;return s._promise("readwrite",(()=>l(e)),!0);case"put":if(a.fire===Q&&u.fire===Q)break;return s._promise("readwrite",(()=>l(e)),!0);case"delete":if(i.fire===Q)break;return s._promise("readwrite",(()=>l(e)),!0);case"deleteRange":if(i.fire===Q)break;return s._promise("readwrite",(()=>function(e){return c(e.trans,e.range,1e4)}(e)),!0)}return n.mutate(e);function l(e){const t=we.trans,s=e.keys||Bn(r,e);if(!s)throw new Error("Keys missing");return"delete"!==(e="add"===e.type||"put"===e.type?{...e,keys:s}:{...e}).type&&(e.values=[...e.values]),e.keys&&(e.keys=[...e.keys]),function(e,t,n){return"add"===t.type?Promise.resolve([]):e.getMany({trans:t.trans,keys:n,cache:"immutable"})}(n,e,s).then((l=>{const c=s.map(((n,s)=>{const c=l[s],h={onerror:null,onsuccess:null};if("delete"===e.type)i.fire.call(h,n,c,t);else if("add"===e.type||void 0===c){const i=a.fire.call(h,n,e.values[s],t);null==n&&null!=i&&(n=i,e.keys[s]=n,r.outbound||v(e.values[s],r.keyPath,n))}else{const r=In(c,e.values[s]),i=u.fire.call(h,r,n,c,t);if(i){const t=e.values[s];Object.keys(i).forEach((e=>{o(t,e)?t[e]=i[e]:v(t,e,i[e])}))}}return h}));return n.mutate(e).then((({failures:t,results:n,numFailures:r,lastResult:i})=>{for(let r=0;r(c.forEach((t=>t.onerror&&t.onerror(e))),Promise.reject(e))))}))}function c(e,t,s){return n.query({trans:e,values:!1,query:{index:r,range:t},limit:s}).then((({result:n})=>l({type:"delete",keys:n,trans:e}).then((r=>r.numFailures>0?Promise.reject(r.failures[0]):n.length({table:t=>{const n=e.table(t);return{...n,getMany:e=>{if(!e.cache)return n.getMany(e);const t=$n(e.keys,e.trans._cache,"clone"===e.cache);return t?Oe.resolve(t):n.getMany(e).then((t=>(e.trans._cache={keys:e.keys,values:"clone"===e.cache?K(t):t},t)))},mutate:e=>("add"!==e.type&&(e.trans._cache=null),n.mutate(e))}}})};function Nn(e,t){return"readonly"===e.trans.mode&&!!e.subscr&&!e.trans.explicit&&"disabled"!==e.trans.db._options.cache&&!t.schema.primaryKey.outbound}function Mn(e,t){switch(e){case"query":return t.values&&!t.unique;case"get":case"getMany":case"count":case"openCursor":return!1}}const Ln={stack:"dbcore",level:0,name:"Observability",create:e=>{const r=e.schema.name,s=new pn(e.MIN_KEY,e.MAX_KEY);return{...e,transaction:(t,n,r)=>{if(we.subscr&&"readonly"!==n)throw new W.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${we.querier}`);return e.transaction(t,n,r)},table:i=>{const o=e.table(i),{schema:a}=o,{primaryKey:u,indexes:l}=a,{extractKey:c,outbound:h}=u,d=u.autoIncrement&&l.filter((e=>e.compound&&e.keyPath.includes(u.keyPath))),f={...o,mutate:e=>{const t=e.trans,l=e.mutatedParts||(e.mutatedParts={}),c=e=>{const t=`idb://${r}/${i}/${e}`;return l[t]||(l[t]=new pn)},h=c(""),f=c(":dels"),{type:p}=e;let[y,m]="deleteRange"===e.type?[e.range]:"delete"===e.type?[e.keys]:e.values.length<50?[Bn(u,e).filter((e=>e)),e.values]:[];const b=e.trans._cache;if(n(y)){h.addKeys(y);const e="delete"===p||y.length===m.length?$n(y,b):null;e||f.addKeys(y),(e||m)&&function(e,t,r,s){function i(t){const i=e(t.name||"");function o(e){return null!=e?t.extractKey(e):null}const a=e=>t.multiEntry&&n(e)?e.forEach((e=>i.addKey(e))):i.addKey(e);(r||s).forEach(((e,t)=>{const n=r&&o(r[t]),i=s&&o(s[t]);0!==ct(n,i)&&(null!=n&&a(n),null!=i&&a(i))}))}t.indexes.forEach(i)}(c,a,e,m)}else if(y){const e={from:y.lower,to:y.upper};f.add(e),h.add(e)}else h.add(s),f.add(s),a.indexes.forEach((e=>c(e.name).add(s)));return o.mutate(e).then((n=>(!y||"add"!==e.type&&"put"!==e.type||(h.addKeys(n.results),d&&d.forEach((t=>{const r=e.values.map((e=>t.extractKey(e))),s=t.keyPath.findIndex((e=>e===u.keyPath));n.results.forEach((e=>r[s]=e)),c(t.name).addKeys(r)}))),t.mutatedParts=_n(t.mutatedParts||{},l),n)))}},p=({query:{index:t,range:n}})=>[t,new pn(n.lower??e.MIN_KEY,n.upper??e.MAX_KEY)],y={get:e=>[u,new pn(e.key)],getMany:e=>[u,(new pn).addKeys(e.keys)],count:p,query:p,openCursor:p};return t(y).forEach((e=>{f[e]=function(t){const{subscr:n}=we,a=!!n;let u=Nn(we,o)&&Mn(e,t);const l=u?t.obsSet={}:n;if(a){const n=e=>{const t=`idb://${r}/${i}/${e}`;return l[t]||(l[t]=new pn)},a=n(""),u=n(":dels"),[d,f]=y[e](t);if("query"===e&&d.isPrimaryKey&&!t.values?u.add(f):n(d.name||"").add(f),!d.isPrimaryKey){if("count"!==e){const n="query"===e&&h&&t.values&&o.query({...t,values:!1});return o[e].apply(this,arguments).then((r=>{if("query"===e){if(h&&t.values)return n.then((({result:e})=>(a.addKeys(e),r)));const e=t.values?r.result.map(c):r.result;t.values?a.addKeys(e):u.addKeys(e)}else if("openCursor"===e){const e=r,n=t.values;return e&&Object.create(e,{key:{get:()=>(u.addKey(e.primaryKey),e.key)},primaryKey:{get(){const t=e.primaryKey;return u.addKey(t),t}},value:{get:()=>(n&&a.addKey(e.primaryKey),e.value)}})}return r}))}u.add(s)}}return o[e].apply(this,arguments)}})),f}}}};function Un(e,t,r){if(0===r.numFailures)return t;if("deleteRange"===t.type)return null;const s=t.keys?t.keys.length:"values"in t&&t.values?t.values.length:1;if(r.numFailures===s)return null;const i={...t};return n(i.keys)&&(i.keys=i.keys.filter(((e,t)=>!(t in r.failures)))),"values"in i&&n(i.values)&&(i.values=i.values.filter(((e,t)=>!(t in r.failures)))),i}function Vn(e,t){return function(e,t){return void 0===t.lower||(t.lowerOpen?ct(e,t.lower)>0:ct(e,t.lower)>=0)}(e,t)&&function(e,t){return void 0===t.upper||(t.upperOpen?ct(e,t.upper)<0:ct(e,t.upper)<=0)}(e,t)}function zn(e,t,r,s,i,o){if(!r||0===r.length)return e;const a=t.query.index,{multiEntry:u}=a,l=t.query.range,c=s.schema.primaryKey.extractKey,h=a.extractKey,d=(a.lowLevelIndex||a).extractKey;let f=r.reduce(((e,r)=>{let s=e;const i="add"===r.type||"put"===r.type?r.values.filter((e=>{const t=h(e);return u&&n(t)?t.some((e=>Vn(e,l))):Vn(t,l)})).map((e=>(e=K(e),o&&Object.freeze(e),e))):[];switch(r.type){case"add":s=e.concat(t.values?i:i.map((e=>c(e))));break;case"put":const n=(new pn).addKeys(r.values.map((e=>c(e))));s=e.filter((e=>{const r=t.values?c(e):e;return!bn(new pn(r),n)})).concat(t.values?i:i.map((e=>c(e))));break;case"delete":const o=(new pn).addKeys(r.keys);s=e.filter((e=>{const n=t.values?c(e):e;return!bn(new pn(n),o)}));break;case"deleteRange":const a=r.range;s=e.filter((e=>!Vn(c(e),a)))}return s}),e);return f===e?e:(f.sort(((e,t)=>ct(d(e),d(t))||ct(c(e),c(t)))),t.limit&&t.limit<1/0&&(f.length>t.limit?f.length=t.limit:e.length===t.limit&&f.length=0}function Gn(e,t,n,r){e.subscribers.add(n),r.addEventListener("abort",(()=>{e.subscribers.delete(n),0===e.subscribers.size&&function(e,t){setTimeout((()=>{0===e.subscribers.size&&q(t,e)}),3e3)}(e,t)}))}const Qn={stack:"dbcore",level:0,name:"Cache",create:e=>{const t=e.schema.name,n={...e,transaction:(n,r,s)=>{const i=e.transaction(n,r,s);if("readwrite"===r){const s=new AbortController,{signal:o}=s,a=o=>()=>{if(s.abort(),"readwrite"===r){const r=new Set;for(const s of n){const n=kn[`idb://${t}/${s}`];if(n){const t=e.table(s),a=n.optimisticOps.filter((e=>e.trans===i));if(i._explicit&&o&&i.mutatedParts)for(const e of Object.values(n.queries.query))for(const t of e.slice())xn(t.obsSet,i.mutatedParts)&&(q(e,t),t.subscribers.forEach((e=>r.add(e))));else if(a.length>0){n.optimisticOps=n.optimisticOps.filter((e=>e.trans!==i));for(const e of Object.values(n.queries.query))for(const n of e.slice())if(null!=n.res&&i.mutatedParts)if(o&&!n.dirty){const s=Object.isFrozen(n.res),i=zn(n.res,n.req,a,t,n,s);n.dirty?(q(e,n),n.subscribers.forEach((e=>r.add(e)))):i!==n.res&&(n.res=i,n.promise=Oe.resolve({result:i}))}else n.dirty&&q(e,n),n.subscribers.forEach((e=>r.add(e)))}}}r.forEach((e=>e()))}};i.addEventListener("abort",a(!1),{signal:o}),i.addEventListener("error",a(!1),{signal:o}),i.addEventListener("complete",a(!0),{signal:o})}return i},table(n){const r=e.table(n),s=r.schema.primaryKey,i={...r,mutate(e){const i=we.trans;if(s.outbound||"disabled"===i.db._options.cache||i.explicit)return r.mutate(e);const o=kn[`idb://${t}/${n}`];if(!o)return r.mutate(e);const a=r.mutate(e);return"add"!==e.type&&"put"!==e.type||!(e.values.length>=50||Bn(s,e).some((e=>null==e)))?(o.optimisticOps.push(e),e.mutatedParts&&En(e.mutatedParts),a.then((t=>{if(t.numFailures>0){q(o.optimisticOps,e);const n=Un(0,e,t);n&&o.optimisticOps.push(n),e.mutatedParts&&En(e.mutatedParts)}})),a.catch((()=>{q(o.optimisticOps,e),e.mutatedParts&&En(e.mutatedParts)}))):a.then((t=>{const n=Un(0,{...e,values:e.values.map(((e,n)=>{const r=s.keyPath?.includes(".")?K(e):{...e};return v(r,s.keyPath,t.results[n]),r}))},t);o.optimisticOps.push(n),queueMicrotask((()=>e.mutatedParts&&En(e.mutatedParts)))})),a},query(e){if(!Nn(we,r)||!Mn("query",e))return r.query(e);const s="immutable"===we.trans?.db._options.cache,{requery:i,signal:o}=we;let[a,u,l,c]=function(e,t,n,r){const s=kn[`idb://${e}/${t}`];if(!s)return[];const i=s.queries[n];if(!i)return[null,!1,s,null];const o=i[(r.query?r.query.index.name:null)||""];if(!o)return[null,!1,s,null];switch(n){case"query":const e=o.find((e=>e.req.limit===r.limit&&e.req.values===r.values&&Wn(e.req.query.range,r.query.range)));return e?[e,!0,s,o]:[o.find((e=>("limit"in e.req?e.req.limit:1/0)>=r.limit&&(!r.values||e.req.values)&&Yn(e.req.query.range,r.query.range))),!1,s,o];case"count":const t=o.find((e=>Wn(e.req.query.range,r.query.range)));return[t,!!t,s,o]}}(t,n,"query",e);if(a&&u)a.obsSet=e.obsSet;else{const i=r.query(e).then((e=>{const t=e.result;if(a&&(a.res=t),s){for(let e=0,n=t.length;e(c&&a&&q(c,a),Promise.reject(e))));a={obsSet:e.obsSet,promise:i,subscribers:new Set,type:"query",req:e,dirty:!1},c?c.push(a):(c=[a],l||(l=kn[`idb://${t}/${n}`]={queries:{query:{},count:{}},objs:new Map,optimisticOps:[],unsignaledParts:{}}),l.queries.query[e.query.index.name||""]=c)}return Gn(a,c,i,o),a.promise.then((t=>({result:zn(t.result,e,l?.optimisticOps,r,a,s)})))}};return i}};return n}};function Xn(e,t){return new Proxy(e,{get:(e,n,r)=>"db"===n?t:Reflect.get(e,n,r)})}class Hn{constructor(e,t){this._middlewares={},this.verno=0;const n=Hn.dependencies;this._options=t={addons:Hn.addons,autoOpen:!0,indexedDB:n.indexedDB,IDBKeyRange:n.IDBKeyRange,cache:"cloned",...t},this._deps={indexedDB:t.indexedDB,IDBKeyRange:t.IDBKeyRange};const{addons:r}=t;this._dbSchema={},this._versions=[],this._storeNames=[],this._allTables={},this.idbdb=null,this._novip=this;const s={dbOpenError:null,isBeingOpened:!1,onReadyBeingFired:null,openComplete:!1,dbReadyResolve:Q,dbReadyPromise:null,cancelOpen:Q,openCanceller:null,autoSchema:!0,PR1398_maxLoop:3,autoOpen:t.autoOpen};var i;s.dbReadyPromise=new Oe((e=>{s.dbReadyResolve=e})),s.openCanceller=new Oe(((e,t)=>{s.cancelOpen=t})),this._state=s,this.name=e,this.on=pt(this,"populate","blocked","versionchange","close",{ready:[re,Q]}),this.on.ready.subscribe=y(this.on.ready.subscribe,(e=>(t,n)=>{Hn.vip((()=>{const r=this._state;if(r.openComplete)r.dbOpenError||Oe.resolve().then(t),n&&e(t);else if(r.onReadyBeingFired)r.onReadyBeingFired.push(t),n&&e(t);else{e(t);const r=this;n||e((function e(){r.on.ready.unsubscribe(t),r.on.ready.unsubscribe(e)}))}}))})),this.Collection=(i=this,yt(Pt.prototype,(function(e,t){this.db=i;let n=at,r=null;if(t)try{n=t()}catch(e){r=e}const s=e._ctx,o=s.table,a=o.hook.reading.fire;this._ctx={table:o,index:s.index,isPrimKey:!s.index||o.schema.primKey.keyPath&&s.index===o.schema.primKey.name,range:n,keysOnly:!1,dir:"next",unique:"",algorithm:null,filter:null,replayFilter:null,justLimit:!0,isMatch:null,offset:0,limit:1/0,error:r,or:s.or,valueMapper:a!==X?a:null}}))),this.Table=function(e){return yt(ft.prototype,(function(t,n,r){this.db=e,this._tx=r,this.name=t,this.schema=n,this.hook=e._allTables[t]?e._allTables[t].hook:pt(null,{creating:[Z,Q],reading:[H,X],updating:[te,Q],deleting:[ee,Q]})}))}(this),this.Transaction=function(e){return yt(Ft.prototype,(function(t,n,r,s,i){this.db=e,this.mode=t,this.storeNames=n,this.schema=r,this.chromeTransactionDurability=s,this.idbtrans=null,this.on=pt(this,"complete","error","abort"),this.parent=i||null,this.active=!0,this._reculock=0,this._blockedFuncs=[],this._resolve=null,this._reject=null,this._waitingFor=null,this._waitingQueue=null,this._spinCount=0,this._completion=new Oe(((e,t)=>{this._resolve=e,this._reject=t})),this._completion.then((()=>{this.active=!1,this.on.complete.fire()}),(e=>{var t=this.active;return this.active=!1,this.on.error.fire(e),this.parent?this.parent._reject(e):t&&this.idbtrans&&this.idbtrans.abort(),tt(e)}))}))}(this),this.Version=function(e){return yt(un.prototype,(function(t){this.db=e,this._cfg={version:t,storesSource:null,dbschema:{},tables:{},contentUpgrade:null}}))}(this),this.WhereClause=function(e){return yt(It.prototype,(function(t,n,r){if(this.db=e,this._ctx={table:t,index:":id"===n?null:n,or:r},this._cmp=this._ascending=ct,this._descending=(e,t)=>ct(t,e),this._max=(e,t)=>ct(e,t)>0?e:t,this._min=(e,t)=>ct(e,t)<0?e:t,this._IDBKeyRange=e._deps.IDBKeyRange,!this._IDBKeyRange)throw new W.MissingAPI}))}(this),this.on("versionchange",(e=>{e.newVersion>0?console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`):console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`),this.close({disableAutoOpen:!1})})),this.on("blocked",(e=>{!e.newVersion||e.newVersionnew this.Transaction(e,t,n,this._options.chromeTransactionDurability,r),this._fireOnBlocked=e=>{this.on("blocked").fire(e),it.filter((e=>e.name===this.name&&e!==this&&!e._state.vcFired)).map((t=>t.on("versionchange").fire(e)))},this.use(Fn),this.use(Qn),this.use(Ln),this.use(Tn),this.use(Rn);const o=new Proxy(this,{get:(e,t,n)=>{if("_vip"===t)return!0;if("table"===t)return e=>Xn(this.table(e),o);const r=Reflect.get(e,t,n);return r instanceof ft?Xn(r,o):"tables"===t?r.map((e=>Xn(e,o))):"_createTransaction"===t?function(){const e=r.apply(this,arguments);return Xn(e,o)}:r}});this.vip=o,r.forEach((e=>e(this)))}version(e){if(isNaN(e)||e<.1)throw new W.Type("Given version is not a positive number");if(e=Math.round(10*e)/10,this.idbdb||this._state.isBeingOpened)throw new W.Schema("Cannot add version when database is open");this.verno=Math.max(this.verno,e);const t=this._versions;var n=t.filter((t=>t._cfg.version===e))[0];return n||(n=new this.Version(e),t.push(n),t.sort(Jt),n.stores({}),this._state.autoSchema=!1,n)}_whenReady(e){return this.idbdb&&(this._state.openComplete||we.letThrough||this._vip)?e():new Oe(((e,t)=>{if(this._state.openComplete)return t(new W.DatabaseClosed(this._state.dbOpenError));if(!this._state.isBeingOpened){if(!this._state.autoOpen)return void t(new W.DatabaseClosed);this.open().catch(Q)}this._state.dbReadyPromise.then(e,t)})).then(e)}use({stack:e,create:t,level:n,name:r}){r&&this.unuse({stack:e,name:r});const s=this._middlewares[e]||(this._middlewares[e]=[]);return s.push({stack:e,create:t,level:null==n?10:n,name:r}),s.sort(((e,t)=>e.level-t.level)),this}unuse({stack:e,name:t,create:n}){return e&&this._middlewares[e]&&(this._middlewares[e]=this._middlewares[e].filter((e=>n?e.create!==n:!!t&&e.name!==t))),this}open(){return Je(ve,(()=>Cn(this)))}_close(){const e=this._state,t=it.indexOf(this);if(t>=0&&it.splice(t,1),this.idbdb){try{this.idbdb.close()}catch(e){}this.idbdb=null}e.isBeingOpened||(e.dbReadyPromise=new Oe((t=>{e.dbReadyResolve=t})),e.openCanceller=new Oe(((t,n)=>{e.cancelOpen=n})))}close({disableAutoOpen:e}={disableAutoOpen:!0}){const t=this._state;e?(t.isBeingOpened&&t.cancelOpen(new W.DatabaseClosed),this._close(),t.autoOpen=!1,t.dbOpenError=new W.DatabaseClosed):(this._close(),t.autoOpen=this._options.autoOpen||t.isBeingOpened,t.openComplete=!1,t.dbOpenError=null)}delete(e={disableAutoOpen:!0}){const t=arguments.length>0&&"object"!=typeof arguments[0],n=this._state;return new Oe(((r,s)=>{const i=()=>{this.close(e);var t=this._deps.indexedDB.deleteDatabase(this.name);t.onsuccess=Re((()=>{!function({indexedDB:e,IDBKeyRange:t},n){!cn(e)&&"__dbnames"!==n&&ln(e,t).delete(n).catch(Q)}(this._deps,this.name),r()})),t.onerror=Bt(s),t.onblocked=this._fireOnBlocked};if(t)throw new W.InvalidArgument("Invalid closeOptions argument to db.delete()");n.isBeingOpened?n.dbReadyPromise.then(i):i()}))}backendDB(){return this.idbdb}isOpen(){return null!==this.idbdb}hasBeenClosed(){const e=this._state.dbOpenError;return e&&"DatabaseClosed"===e.name}hasFailed(){return null!==this._state.dbOpenError}dynamicallyOpened(){return this._state.autoSchema}get tables(){return t(this._allTables).map((e=>this._allTables[e]))}transaction(){const e=jn.apply(this,arguments);return this._transaction.apply(this,e)}_transaction(e,t,n){let r=we.trans;r&&r.db===this&&-1===e.indexOf("!")||(r=null);const s=-1!==e.indexOf("?");let i,o;e=e.replace("!","").replace("?","");try{if(o=t.map((e=>{var t=e instanceof this.Table?e.name:e;if("string"!=typeof t)throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed");return t})),"r"==e||"readonly"===e)i="readonly";else{if("rw"!=e&&"readwrite"!=e)throw new W.InvalidArgument("Invalid transaction mode: "+e);i="readwrite"}if(r){if("readonly"===r.mode&&"readwrite"===i){if(!s)throw new W.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY");r=null}r&&o.forEach((e=>{if(r&&-1===r.storeNames.indexOf(e)){if(!s)throw new W.SubTransaction("Table "+e+" not included in parent transaction.");r=null}})),s&&r&&!r.active&&(r=null)}}catch(e){return r?r._promise(null,((t,n)=>{n(e)})):tt(e)}const a=Dn.bind(null,this,i,o,r,n);return r?r._promise(i,a,"lock"):we.trans?Je(we.transless,(()=>this._whenReady(a))):this._whenReady(a)}table(e){if(!o(this._allTables,e))throw new W.InvalidTable(`Table ${e} does not exist`);return this._allTables[e]}}const Jn="undefined"!=typeof Symbol&&"observable"in Symbol?Symbol.observable:"@@observable";class Zn{constructor(e){this._subscribe=e}subscribe(e,t,n){return this._subscribe(e&&"function"!=typeof e?e:{next:e,error:t,complete:n})}[Jn](){return this}}let er;try{er={indexedDB:e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB,IDBKeyRange:e.IDBKeyRange||e.webkitIDBKeyRange}}catch(e){er={indexedDB:null,IDBKeyRange:null}}function tr(e){let t,n=!1;const r=new Zn((r=>{const s=B(e);let i,a=!1,u={},l={};const c={get closed(){return a},unsubscribe:()=>{a||(a=!0,i&&i.abort(),h&&$t.storagemutated.unsubscribe(f))}};r.start&&r.start(c);let h=!1;const d=()=>et(p);const f=e=>{_n(u,e),xn(l,u)&&d()},p=()=>{if(a||!er.indexedDB)return;u={};const c={};i&&i.abort(),i=new AbortController;const p={subscr:c,signal:i.signal,requery:d,querier:e,trans:null},y=function(t){const n=qe();try{s&&ze();let r=Ve(e,t);return s&&(r=r.finally(We)),r}finally{n&&Te()}}(p);Promise.resolve(y).then((e=>{n=!0,t=e,a||p.signal.aborted||(u={},l=c,function(e){for(const t in e)if(o(e,t))return!1;return!0}(l)||h||($t("storagemutated",f),h=!0),et((()=>!a&&r.next&&r.next(e))))}),(e=>{n=!1,["DatabaseClosedError","AbortError"].includes(e?.name)||a||et((()=>{a||r.error&&r.error(e)}))}))};return setTimeout(d,0),c}));return r.hasValue=()=>n,r.getValue=()=>t,r}const nr=Hn;function rr(e){let t=ir;try{ir=!0,$t.storagemutated.fire(e),Kn(e,!0)}finally{ir=t}}a(nr,{...G,delete:e=>new nr(e,{addons:[]}).delete(),exists:e=>new nr(e,{addons:[]}).open().then((e=>(e.close(),!0))).catch("NoSuchDatabaseError",(()=>!1)),getDatabaseNames(e){try{return function({indexedDB:e,IDBKeyRange:t}){return cn(e)?Promise.resolve(e.databases()).then((e=>e.map((e=>e.name)).filter((e=>"__dbnames"!==e)))):ln(e,t).toCollection().primaryKeys()}(nr.dependencies).then(e)}catch{return tt(new W.MissingAPI)}},defineClass:()=>function(e){r(this,e)},ignoreTransaction:e=>we.trans?Je(we.transless,e):e(),vip:hn,async:function(e){return function(){try{var t=An(e.apply(this,arguments));return t&&"function"==typeof t.then?t:Oe.resolve(t)}catch(e){return tt(e)}}},spawn:function(e,t,n){try{var r=An(e.apply(n,t||[]));return r&&"function"==typeof r.then?r:Oe.resolve(r)}catch(e){return tt(e)}},currentTransaction:{get:()=>we.trans||null},waitFor:function(e,t){const n=Oe.resolve("function"==typeof e?nr.ignoreTransaction(e):e).timeout(t||6e4);return we.trans?we.trans.waitFor(n):n},Promise:Oe,debug:{get:()=>se,set:e=>{ie(e)}},derive:c,extend:r,props:a,override:y,Events:pt,on:$t,liveQuery:tr,extendObservabilitySet:_n,getByKeyPath:g,setByKeyPath:v,delByKeyPath:function(e,t){"string"==typeof t?v(e,t,void 0):"length"in t&&[].map.call(t,(function(t){v(e,t,void 0)}))},shallowClone:w,deepClone:K,getObjectDiff:In,cmp:ct,asap:b,minKey:-(1/0),addons:[],connections:it,errnames:V,dependencies:er,cache:kn,semVer:"4.0.7",version:"4.0.7".split(".").map((e=>parseInt(e))).reduce(((e,t,n)=>e+t/Math.pow(10,2*n)))}),nr.maxKey=Ut(nr.dependencies.IDBKeyRange),"undefined"!=typeof dispatchEvent&&"undefined"!=typeof addEventListener&&($t("storagemutated",(e=>{if(!ir){let t;t=new CustomEvent("x-storagemutated-1",{detail:e}),ir=!0,dispatchEvent(t),ir=!1}})),addEventListener("x-storagemutated-1",(({detail:e})=>{ir||rr(e)})));let sr,ir=!1,or=()=>{};function ar(e){return new Ot({add:e})}function ur(e){return new Ot({remove:e})}function lr(e,t){return new Ot({replacePrefix:[e,t]})}"undefined"!=typeof BroadcastChannel&&(or=()=>{sr=new BroadcastChannel("x-storagemutated-1"),sr.onmessage=e=>e.data&&rr(e.data)},or(),"function"==typeof sr.unref&&sr.unref(),$t("storagemutated",(e=>{ir||sr.postMessage(e)}))),"undefined"!=typeof addEventListener&&(addEventListener("pagehide",(e=>{if(!Hn.disableBfCache&&e.persisted){se&&console.debug("Dexie: handling persisted pagehide"),sr?.close();for(const e of it)e.close({disableAutoOpen:!1})}})),addEventListener("pageshow",(e=>{!Hn.disableBfCache&&e.persisted&&(se&&console.debug("Dexie: handling persisted pageshow"),or(),rr({all:new pn(-1/0,[[]])}))}))),Oe.rejectionMapper=function(e,t){if(!e||e instanceof N||e instanceof TypeError||e instanceof SyntaxError||!e.name||!Y[e.name])return e;var n=new Y[e.name](t||e.message,e);return"stack"in e&&l(n,"stack",{get:function(){return this.inner.stack}}),n},ie(se);export{Hn as Dexie,lt as Entity,kt as PropModSymbol,Ot as PropModification,pn as RangeSet,ar as add,ct as cmp,Hn as default,tr as liveQuery,mn as mergeRanges,bn as rangesOverlap,ur as remove,lr as replacePrefix}; +//# sourceMappingURL=dexie.min.mjs.map \ No newline at end of file diff --git a/src/assets/dexie/dist/modern/dexie.min.mjs.map b/src/assets/dexie/dist/modern/dexie.min.mjs.map new file mode 100644 index 000000000..04601b62e --- /dev/null +++ b/src/assets/dexie/dist/modern/dexie.min.mjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["dexie.mjs"],"names":["_global","globalThis","self","window","global","keys","Object","isArray","Array","extend","obj","extension","forEach","key","Promise","getProto","getPrototypeOf","_hasOwn","hasOwnProperty","hasOwn","prop","call","props","proto","Reflect","ownKeys","setProp","defineProperty","functionOrGetSet","options","get","set","configurable","value","writable","derive","Child","from","Parent","prototype","create","bind","getOwnPropertyDescriptor","getPropertyDescriptor","_slice","slice","args","start","end","override","origFunc","overridedFactory","assert","b","Error","asap$1","fn","setImmediate","setTimeout","getByKeyPath","keyPath","rv","i","l","length","val","push","period","indexOf","innerObj","substr","undefined","setByKeyPath","isFrozen","currentKeyPath","remainingKeyPath","isNaN","parseInt","splice","shallowClone","m","concat","flatten","a","apply","intrinsicTypeNames","split","map","num","t","filter","intrinsicTypes","Set","cloneSimpleObjectTree","o","k","v","has","constructor","circularRefs","deepClone","any","WeakMap","innerDeepClone","x","toString","toStringTag","iteratorSymbol","Symbol","iterator","getIteratorOf","delArrayItem","NO_CHAR_ARRAY","getArrayOf","arrayLike","it","arguments","this","next","done","isAsyncFunction","idbDomErrorNames","errorList","defaultTexts","VersionChanged","DatabaseClosed","Abort","TransactionInactive","MissingAPI","DexieError","name","msg","message","getMultiErrorMessage","failures","s","join","ModifyError","successCount","failedKeys","BulkError","pos","failuresByPos","errnames","reduce","BaseException","exceptions","fullName","msgOrInner","inner","Syntax","SyntaxError","Type","TypeError","Range","RangeError","exceptionMap","fullNameExceptions","nop","mirror","pureFunctionChain","f1","f2","callBoth","on1","on2","hookCreatingChain","res","onsuccess","onerror","res2","hookDeletingChain","hookUpdatingChain","modifications","reverseStoppableEventChain","promisableChain","then","thiz","debug","location","test","href","setDebug","INTERNAL","resolvedNativePromise","nativePromiseProto","resolvedGlobalPromise","globalP","resolve","crypto","subtle","nativeP","digest","Uint8Array","nativePromiseThen","NativePromise","patchGlobalPromise","asap","callback","microtickQueue","needsNewPhysicalTick","queueMicrotask","physicalTick","isOutsideMicroTick","unhandledErrors","rejectingErrors","rejectionMapper","globalPSD","id","ref","unhandleds","onunhandled","pgp","env","finalize","PSD","numScheduledCalls","tickFinalizers","DexiePromise","_listeners","_lib","psd","_PSD","_state","_value","handleRejection","executePromiseTask","thenProp","microTaskId","totalEchoes","onFulfilled","onRejected","possibleAwait","cleanup","decrementExpectedAwaits","reject","propagateToListener","Listener","nativeAwaitCompatibleWrap","_consoleTask","zone","promise","shouldExecuteTick","beginMicroTickScope","_then","propagateAllListeners","endMicroTickScope","ex","reason","some","p","addPossiblyUnhandledError","listeners","len","finalizePhysicalTick","listener","cb","callListener","ret","run","markErrorAsHandled","e","usePSD","wasRootExec","callbacks","item","unhandledErrs","finalizers","PromiseReject","wrap","errorCatcher","outerScope","switchToZone","catch","type","handler","err","finally","onFinally","timeout","ms","Infinity","handle","Timeout","clearTimeout","snapShot","all","values","onPossibleParallellAsync","remaining","race","newPSD","newScope","scheduler","follow","zoneProps","finalizer","run_at_end_of_this_or_next_physical_tick","allSettled","possiblePromises","results","status","AggregateError","failure","task","awaits","echoes","taskCounter","zoneStack","zoneEchoes","zone_id_counter","a1","a2","parent","PromiseProp","incrementExpectedAwaits","possiblePromise","rejection","zoneEnterEcho","targetZone","zoneLeaveEcho","pop","bEnteringZone","currentZone","GlobalPromise","targetEnv","a3","outerZone","execInGlobalContext","enqueueNativeMicroTask","tempTransaction","db","mode","storeNames","idbdb","openComplete","letThrough","_vip","trans","_createTransaction","_dbSchema","PR1398_maxLoop","InvalidState","isOpen","console","warn","close","disableAutoOpen","open","_promise","result","idbtrans","commit","_completion","dbOpenError","isBeingOpened","autoOpen","dbReadyPromise","maxString","String","fromCharCode","INVALID_KEY_ARGUMENT","connections","combine","filter1","filter2","AnyRange","lower","lowerOpen","upper","upperOpen","workaroundForUndefinedPrimKey","Entity","cmp","ta","tb","NaN","al","bl","compareUint8Arrays","getUint8Array","compareArrays","ArrayBuffer","isView","tsTag","buffer","byteOffset","byteLength","Table","_trans","writeLocked","_tx","tableName","createTask","checkTableInTransaction","schema","NotFound","_novip","transless","trace","keyOrCrit","where","first","core","hook","reading","fire","indexOrCrit","WhereClause","keyPaths","equals","compoundIndex","indexes","primKey","ix","compound","every","sort","_maxKey","keyPathsInValidOrder","kp","JSON","stringify","idxByName","idb","_deps","indexedDB","idx","filterFunction","prevIndex","prevFilterFn","index","multi","toCollection","and","count","thenShortcut","offset","limit","numRows","each","toArray","Collection","orderBy","reverse","mapToClass","mappedClass","table","inheritedProps","getOwnPropertyNames","propName","add","readHook","_","unsubscribe","defineClass","content","auto","objToAdd","mutate","numFailures","lastResult","update","keyOrObject","modify","InvalidArgument","put","delete","clear","range","bulkGet","getMany","bulkAdd","objects","keysOrOptions","wantResults","allKeys","numObjects","objectsToAdd","bulkPut","objectsToPut","bulkUpdate","keysAndChanges","coreTable","entry","changeSpecs","changes","offsetMap","cache","objs","resultKeys","resultObjs","Constraint","numEntries","updates","mappedOffset","Number","bulkDelete","numKeys","Events","ctx","evs","eventName","subscriber","subscribe","addEventType","chainFunction","defaultFunction","addConfiguredEvents","context","subscribers","cfg","makeClassConstructor","isPlainKeyRange","ignoreLimitFilter","algorithm","or","justLimit","replayFilter","addFilter","addReplayFilter","factory","isLimitFilter","curr","getIndexOrStore","coreSchema","isPrimKey","primaryKey","getIndexByKeyPath","Schema","openCursor","keysOnly","dir","unique","query","iter","coreTrans","union","cursor","advance","stop","fail","_iterate","iterate","valueMapper","cursorPromise","wrappedFn","c","continue","advancer","PropModSymbol","PropModification","execute","term","BigInt","remove","subtrahend","includes","prefixToReplace","replacePrefix","startsWith","substring","spec","assign","_read","_ctx","error","_write","_addAlgorithm","clone","raw","Math","min","sortBy","parts","lastPart","lastIndex","getval","order","sorter","aVal","bVal","offsetLeft","rowsLeft","until","bIncludeStopEntry","last","isMatch","indexName","_ondirectionchange","desc","eachKey","eachUniqueKey","eachPrimaryKey","primaryKeys","uniqueKeys","firstKey","lastKey","distinct","strKey","found","modifyer","anythingModified","origVal","outbound","extractKey","_options","modifyChunkSize","totalFailures","applyMutateResult","expectedCount","criteria","deleteCallback","nextChunk","addValues","putValues","putKeys","deleteKeys","origValue","changeSpec","isAdditionalChunk","coreRange","simpleCompare","simpleCompareReverse","collectionOrWhereClause","T","collection","emptyCollection","whereClause","rangeEqual","nextCasing","lowerKey","upperNeedle","lowerNeedle","llp","lwrKeyChar","addIgnoreCaseAlgorithm","match","needles","suffix","compare","upperNeedles","lowerNeedles","direction","nextKeySuffix","needlesLen","initDirection","toUpperCase","toLowerCase","upperFactory","lowerFactory","needleBounds","needle","nb","createRange","firstPossibleNeedle","lowestPossibleCasing","casing","between","includeLower","includeUpper","_cmp","above","aboveOrEqual","below","belowOrEqual","str","startsWithIgnoreCase","equalsIgnoreCase","anyOfIgnoreCase","startsWithAnyOfIgnoreCase","n","anyOf","_ascending","_descending","notEqual","inAnyRange","includeLowers","includeUppers","noneOf","ranges","ascending","descending","_min","max","_max","sortDirection","rangeSorter","newRange","rangePos","keyIsBeyondCurrentEntry","keyIsBeforeCurrentEntry","checkKey","keyWithinCurrentRange","startsWithAnyOf","eventRejectHandler","event","preventDefault","target","stopPropagation","globalEvents","Transaction","_lock","_reculock","lockOwnerFor","_unlock","_blockedFuncs","_locked","fnAndPSD","shift","OpenFailed","active","transaction","durability","chromeTransactionDurability","ev","_reject","onabort","on","oncomplete","_resolve","storagemutated","bWriteLock","ReadOnly","_root","waitFor","promiseLike","root","_waitingFor","_waitingQueue","store","objectStore","spin","_spinCount","currentWaitPromise","abort","memoizedTables","_memoizedTables","tableSchema","transactionBoundTable","createIndexSpec","src","nameFromKeyPath","createTableSchema","array","extractor","nameAndValue","getMaxKey","IdbKeyRange","only","getKeyExtractor","getSinglePathKeyExtractor","arrayify","_id_counter","getKeyPathAlias","createDBCore","tmpTrans","makeIDBKeyRange","upperBound","lowerBound","bound","hasGetAll","tables","objectStoreNames","autoIncrement","indexByKeyPath","isPrimaryKey","indexNames","multiEntry","navigator","userAgent","extractSchema","isAddOrPut","req","reqs","errorHandler","args1","args2","keyCount","callbackCount","successHandler","_pos","request","nonInfinitLimit","source","idbKeyRange","getAll","getAllKeys","openKeyCursor","___id","_cursorContinue","_cursorContinuePrimaryKey","continuePrimaryKey","_cursorAdvance","doThrowCursorIsStopped","gotOne","iterationPromise","resolveIteration","rejectIteration","guardedCallback","createDbCoreTable","tableMap","stack","MIN_KEY","MAX_KEY","generateMiddlewareStacks","stacks","middlewares","IDBKeyRange","dbcore","stackImpl","down","createMiddlewareStack","createMiddlewareStacks","_middlewares","tbl","setApiOnPlace","tableNames","dbschema","propDesc","enumerable","removeTablesApi","lowerVersionFirst","_cfg","version","runUpgraders","oldVersion","idbUpgradeTrans","globalSchema","contains","$meta","parseIndexSyntax","_storeNames","rejectTransaction","metaVersion","getExistingVersion","queue","versions","_versions","buildGlobalSchema","versToRun","runQueue","oldSchema","newSchema","adjustToExistingIndexNames","diff","getSchemaDiff","tuple","createTable","change","recreate","Upgrade","addIndex","deleteIndex","del","idxName","contentUpgrade","upgradeSchema","contentUpgradeIsAsync","returnValue","promiseFollowed","decrementor","storeName","deleteObjectStore","deleteRemovedTables","ceil","createMissingTables","updateTablesAndIndexes","populate","oldDef","newDef","def","oldIndexes","newIndexes","oldIdx","newIdx","createObjectStore","createIndex","j","idbindex","_hasGetAll","dexieName","indexSpec","WorkerGlobalScope","primKeyAndIndexes","indexNum","trim","replace","Version","_parseStoresSpec","stores","outSchema","storesSource","storesSpec","_allTables","upgrade","upgradeFunction","getDbNamesTable","dbNamesDB","Dexie$1","addons","dbnames","hasDatabasesNative","databases","vip","idbReady","intervalId","userAgentData","tryIdb","setInterval","clearInterval","isEmptyRange","node","RangeSet","fromOrTree","to","d","addRange","left","right","r","rebalance","rightWasCutOff","mergeRanges","newSet","_addRangeSet","rangesOverlap","rangeSet1","rangeSet2","i1","getRangeSetIterator","nextResult1","i2","nextResult2","state","keyProvided","up","rootClone","oldRootRight","computeDepth","extendObservabilitySet","part","obsSetsOverlap","os1","os2","rangeSet","addKey","addKeys","unsignaledParts","isTaskEnqueued","signalSubscribersLazily","optimistic","signalSubscribersNow","updatedParts","deleteAffectedCacheEntries","queriesToSignal","tblCache","collectTableSubscribers","exec","dbName","requery","outQueriesToSignal","updatedEntryLists","entries","queries","filteredEntries","obsSet","dexieOpen","openCanceller","nativeVerToOpen","round","verno","schemaPatchMode","throwIfCancelled","resolveDbReady","dbReadyResolve","upgradeTransaction","wasCreated","tryOpenDB","autoSchema","onblocked","_fireOnBlocked","onupgradeneeded","allowEmptyDB","delreq","deleteDatabase","NoSuchDatabase","oldVer","pow","tableChange","patchCurrentVersion","readGlobalSchema","ch","verifyInstalledSchema","onversionchange","vcFired","onclose","_onDatabaseCreated","onReadyBeingFired","ready","fireRemainders","remainders","_close","everything","awaitIterator","callNext","onSuccess","step","onError","throw","getNext","extractTransactionArgs","_tableArgs_","scopeFunc","enterTransactionScope","parentTransaction","explicit","_explicit","scopeFuncIsAsync","PrematureCommit","pad","virtualIndexMiddleware","level","indexLookup","allVirtualIndexes","addVirtualIndexes","keyTail","lowLevelIndex","keyPathAlias","indexList","keyLength","isVirtual","virtualIndex","translateRequest","virtualCursor","createVirtualCursor","getObjectDiff","prfx","ap","bp","apTypeName","getEffectiveKeys","hooksMiddleware","downCore","downTable","tableMiddleware","dxTrans","deleting","creating","updating","addPutOrDelete","deleteNextChunk","deleteRange","effectiveKeys","getExistingValues","existingValues","contexts","existingValue","generatedPrimaryKey","objectDiff","additionalChanges","requestedValue","getFromTransactionCache","cacheExistingValuesMiddleware","cachedResult","isCachableContext","subscr","isCachableRequest","observabilityMiddleware","FULL_RANGE","querier","indexesWithAutoIncPK","tableClone","mutatedParts","getRangeSet","pkRangeSet","delsRangeSet","newObjs","oldCache","oldObjs","addAffectedIndex","addKeyOrKeys","oldKey","newKey","trackAffectedIndexes","idxVals","pkPos","findIndex","pk","getRange","readSubscribers","method","isLiveQuery","cachable","queriedIndex","queriedRanges","keysPromise","resultingKeys","pKeys","wantValues","pkey","adjustOptimisticFromFailures","numBulkOps","isWithinRange","isAboveLower","isBelowUpper","applyOptimisticOps","ops","cacheEntry","immutable","queryRange","extractPrimKey","extractIndex","extractLowLevelIndex","finalResult","op","modifedResult","includedValues","freeze","keySet","keysToDelete","dirty","areRangesEqual","r1","r2","isSuperRange","lower1","lower2","lowerOpen1","lowerOpen2","compareLowers","upper1","upper2","upperOpen1","upperOpen2","compareUppers","subscribeToCacheEntry","container","signal","addEventListener","size","enqueForDeletion","cacheMiddleware","coreMW","ac","AbortController","endTransaction","wasCommitted","affectedSubscribers","optimisticOps","freezeResults","modRes","tableMW","adjustedReq","valueWithKey","exactMatch","equalEntry","find","countQuery","findCompatibleQuery","Map","vipify","vipDb","Proxy","receiver","deps","dependencies","cancelOpen","bSticky","keyRangeGenerator","keyRange","whereCtx","readingHook","createTableConstructor","complete","wasActive","createTransactionConstructor","versionNumber","createVersionConstructor","orCollection","_IDBKeyRange","createWhereClauseConstructor","newVersion","use","vipDB","tx","addon","versionInstance","_whenReady","unuse","mw","closeOptions","hasInvalidArguments","doDelete","_onDatabaseDeleted","backendDB","hasBeenClosed","hasFailed","dynamicallyOpened","_transaction","onlyIfCompatible","idbMode","SubTransaction","enterTransaction","InvalidTable","symbolObservable","observable","Observable","_subscribe","domDeps","mozIndexedDB","webkitIndexedDB","msIndexedDB","webkitIDBKeyRange","liveQuery","currentValue","hasValue","observer","abortController","closed","accumMuts","currentObs","subscription","startedListening","mutationListener","doQuery","_doQuery","aborted","objectIsEmpty","getValue","Dexie","propagateLocally","updateParts","wasMe","propagatingLocally","databaseName","exists","getDatabaseNames","infos","info","ignoreTransaction","async","generatorFn","spawn","currentTransaction","promiseOrFunction","optionalTimeout","delByKeyPath","minKey","semVer","maxKey","dispatchEvent","CustomEvent","detail","bc","createBC","BroadcastChannel","onmessage","data","unref","changedParts","postMessage","disableBfCache","persisted","domError"],"mappings":"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"} \ No newline at end of file diff --git a/src/assets/dexie/dist/modern/dexie.mjs b/src/assets/dexie/dist/modern/dexie.mjs new file mode 100644 index 000000000..75744312a --- /dev/null +++ b/src/assets/dexie/dist/modern/dexie.mjs @@ -0,0 +1,5768 @@ +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * By David Fahlander, david.fahlander@gmail.com + * + * Version 4.0.7, Sun May 26 2024 + * + * https://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ + */ + +const _global = typeof globalThis !== 'undefined' ? globalThis : + typeof self !== 'undefined' ? self : + typeof window !== 'undefined' ? window : + global; + +const keys = Object.keys; +const isArray = Array.isArray; +if (typeof Promise !== 'undefined' && !_global.Promise) { + _global.Promise = Promise; +} +function extend(obj, extension) { + if (typeof extension !== 'object') + return obj; + keys(extension).forEach(function (key) { + obj[key] = extension[key]; + }); + return obj; +} +const getProto = Object.getPrototypeOf; +const _hasOwn = {}.hasOwnProperty; +function hasOwn(obj, prop) { + return _hasOwn.call(obj, prop); +} +function props(proto, extension) { + if (typeof extension === 'function') + extension = extension(getProto(proto)); + (typeof Reflect === "undefined" ? keys : Reflect.ownKeys)(extension).forEach(key => { + setProp(proto, key, extension[key]); + }); +} +const defineProperty = Object.defineProperty; +function setProp(obj, prop, functionOrGetSet, options) { + defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ? + { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : + { value: functionOrGetSet, configurable: true, writable: true }, options)); +} +function derive(Child) { + return { + from: function (Parent) { + Child.prototype = Object.create(Parent.prototype); + setProp(Child.prototype, "constructor", Child); + return { + extend: props.bind(null, Child.prototype) + }; + } + }; +} +const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +function getPropertyDescriptor(obj, prop) { + const pd = getOwnPropertyDescriptor(obj, prop); + let proto; + return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); +} +const _slice = [].slice; +function slice(args, start, end) { + return _slice.call(args, start, end); +} +function override(origFunc, overridedFactory) { + return overridedFactory(origFunc); +} +function assert(b) { + if (!b) + throw new Error("Assertion Failed"); +} +function asap$1(fn) { + if (_global.setImmediate) + setImmediate(fn); + else + setTimeout(fn, 0); +} +function arrayToObject(array, extractor) { + return array.reduce((result, item, i) => { + var nameAndValue = extractor(item, i); + if (nameAndValue) + result[nameAndValue[0]] = nameAndValue[1]; + return result; + }, {}); +} +function getByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) + return obj[keyPath]; + if (!keyPath) + return obj; + if (typeof keyPath !== 'string') { + var rv = []; + for (var i = 0, l = keyPath.length; i < l; ++i) { + var val = getByKeyPath(obj, keyPath[i]); + rv.push(val); + } + return rv; + } + var period = keyPath.indexOf('.'); + if (period !== -1) { + var innerObj = obj[keyPath.substr(0, period)]; + return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1)); + } + return undefined; +} +function setByKeyPath(obj, keyPath, value) { + if (!obj || keyPath === undefined) + return; + if ('isFrozen' in Object && Object.isFrozen(obj)) + return; + if (typeof keyPath !== 'string' && 'length' in keyPath) { + assert(typeof value !== 'string' && 'length' in value); + for (var i = 0, l = keyPath.length; i < l; ++i) { + setByKeyPath(obj, keyPath[i], value[i]); + } + } + else { + var period = keyPath.indexOf('.'); + if (period !== -1) { + var currentKeyPath = keyPath.substr(0, period); + var remainingKeyPath = keyPath.substr(period + 1); + if (remainingKeyPath === "") + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) + obj.splice(currentKeyPath, 1); + else + delete obj[currentKeyPath]; + } + else + obj[currentKeyPath] = value; + else { + var innerObj = obj[currentKeyPath]; + if (!innerObj || !hasOwn(obj, currentKeyPath)) + innerObj = (obj[currentKeyPath] = {}); + setByKeyPath(innerObj, remainingKeyPath, value); + } + } + else { + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(keyPath))) + obj.splice(keyPath, 1); + else + delete obj[keyPath]; + } + else + obj[keyPath] = value; + } + } +} +function delByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string') + setByKeyPath(obj, keyPath, undefined); + else if ('length' in keyPath) + [].map.call(keyPath, function (kp) { + setByKeyPath(obj, kp, undefined); + }); +} +function shallowClone(obj) { + var rv = {}; + for (var m in obj) { + if (hasOwn(obj, m)) + rv[m] = obj[m]; + } + return rv; +} +const concat = [].concat; +function flatten(a) { + return concat.apply([], a); +} +const intrinsicTypeNames = "BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey" + .split(',').concat(flatten([8, 16, 32, 64].map(num => ["Int", "Uint", "Float"].map(t => t + num + "Array")))).filter(t => _global[t]); +const intrinsicTypes = new Set(intrinsicTypeNames.map(t => _global[t])); +function cloneSimpleObjectTree(o) { + const rv = {}; + for (const k in o) + if (hasOwn(o, k)) { + const v = o[k]; + rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v); + } + return rv; +} +function objectIsEmpty(o) { + for (const k in o) + if (hasOwn(o, k)) + return false; + return true; +} +let circularRefs = null; +function deepClone(any) { + circularRefs = new WeakMap(); + const rv = innerDeepClone(any); + circularRefs = null; + return rv; +} +function innerDeepClone(x) { + if (!x || typeof x !== 'object') + return x; + let rv = circularRefs.get(x); + if (rv) + return rv; + if (isArray(x)) { + rv = []; + circularRefs.set(x, rv); + for (var i = 0, l = x.length; i < l; ++i) { + rv.push(innerDeepClone(x[i])); + } + } + else if (intrinsicTypes.has(x.constructor)) { + rv = x; + } + else { + const proto = getProto(x); + rv = proto === Object.prototype ? {} : Object.create(proto); + circularRefs.set(x, rv); + for (var prop in x) { + if (hasOwn(x, prop)) { + rv[prop] = innerDeepClone(x[prop]); + } + } + } + return rv; +} +const { toString } = {}; +function toStringTag(o) { + return toString.call(o).slice(8, -1); +} +const iteratorSymbol = typeof Symbol !== 'undefined' ? + Symbol.iterator : + '@@iterator'; +const getIteratorOf = typeof iteratorSymbol === "symbol" ? function (x) { + var i; + return x != null && (i = x[iteratorSymbol]) && i.apply(x); +} : function () { return null; }; +function delArrayItem(a, x) { + const i = a.indexOf(x); + if (i >= 0) + a.splice(i, 1); + return i >= 0; +} +const NO_CHAR_ARRAY = {}; +function getArrayOf(arrayLike) { + var i, a, x, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') + return [arrayLike]; + if ((it = getIteratorOf(arrayLike))) { + a = []; + while ((x = it.next()), !x.done) + a.push(x.value); + return a; + } + if (arrayLike == null) + return [arrayLike]; + i = arrayLike.length; + if (typeof i === 'number') { + a = new Array(i); + while (i--) + a[i] = arrayLike[i]; + return a; + } + return [arrayLike]; + } + i = arguments.length; + a = new Array(i); + while (i--) + a[i] = arguments[i]; + return a; +} +const isAsyncFunction = typeof Symbol !== 'undefined' + ? (fn) => fn[Symbol.toStringTag] === 'AsyncFunction' + : () => false; + +var dexieErrorNames = [ + 'Modify', + 'Bulk', + 'OpenFailed', + 'VersionChange', + 'Schema', + 'Upgrade', + 'InvalidTable', + 'MissingAPI', + 'NoSuchDatabase', + 'InvalidArgument', + 'SubTransaction', + 'Unsupported', + 'Internal', + 'DatabaseClosed', + 'PrematureCommit', + 'ForeignAwait' +]; +var idbDomErrorNames = [ + 'Unknown', + 'Constraint', + 'Data', + 'TransactionInactive', + 'ReadOnly', + 'Version', + 'NotFound', + 'InvalidState', + 'InvalidAccess', + 'Abort', + 'Timeout', + 'QuotaExceeded', + 'Syntax', + 'DataClone' +]; +var errorList = dexieErrorNames.concat(idbDomErrorNames); +var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed", + MissingAPI: "IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb" +}; +function DexieError(name, msg) { + this.name = name; + this.message = msg; +} +derive(DexieError).from(Error).extend({ + toString: function () { return this.name + ": " + this.message; } +}); +function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + Object.keys(failures) + .map(key => failures[key].toString()) + .filter((v, i, s) => s.indexOf(v) === i) + .join('\n'); +} +function ModifyError(msg, failures, successCount, failedKeys) { + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; + this.message = getMultiErrorMessage(msg, failures); +} +derive(ModifyError).from(DexieError); +function BulkError(msg, failures) { + this.name = "BulkError"; + this.failures = Object.keys(failures).map(pos => failures[pos]); + this.failuresByPos = failures; + this.message = getMultiErrorMessage(msg, this.failures); +} +derive(BulkError).from(DexieError); +var errnames = errorList.reduce((obj, name) => (obj[name] = name + "Error", obj), {}); +const BaseException = DexieError; +var exceptions = errorList.reduce((obj, name) => { + var fullName = name + "Error"; + function DexieError(msgOrInner, inner) { + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } + else if (typeof msgOrInner === 'string') { + this.message = `${msgOrInner}${!inner ? '' : '\n ' + inner}`; + this.inner = inner || null; + } + else if (typeof msgOrInner === 'object') { + this.message = `${msgOrInner.name} ${msgOrInner.message}`; + this.inner = msgOrInner; + } + } + derive(DexieError).from(BaseException); + obj[name] = DexieError; + return obj; +}, {}); +exceptions.Syntax = SyntaxError; +exceptions.Type = TypeError; +exceptions.Range = RangeError; +var exceptionMap = idbDomErrorNames.reduce((obj, name) => { + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + setProp(rv, "stack", { get: function () { + return this.inner.stack; + } }); + } + return rv; +} +var fullNameExceptions = errorList.reduce((obj, name) => { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +fullNameExceptions.ModifyError = ModifyError; +fullNameExceptions.DexieError = DexieError; +fullNameExceptions.BulkError = BulkError; + +function nop() { } +function mirror(val) { return val; } +function pureFunctionChain(f1, f2) { + if (f1 == null || f1 === mirror) + return f2; + return function (val) { + return f2(f1(val)); + }; +} +function callBoth(on1, on2) { + return function () { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; +} +function hookCreatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res !== undefined) + arguments[0] = res; + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== undefined ? res2 : res; + }; +} +function hookDeletingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = this.onerror = null; + f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; +} +function hookUpdatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function (modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === undefined ? + (res2 === undefined ? undefined : res2) : + (extend(res, res2)); + }; +} +function reverseStoppableEventChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + if (f2.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; +} +function promisableChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res && typeof res.then === 'function') { + var thiz = this, i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + return res.then(function () { + return f2.apply(thiz, args); + }); + } + return f2.apply(this, arguments); + }; +} + +var debug = typeof location !== 'undefined' && + /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); +function setDebug(value, filter) { + debug = value; +} + +var INTERNAL = {}; +const ZONE_ECHO_LIMIT = 100, [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ? + [] : + (() => { + let globalP = Promise.resolve(); + if (typeof crypto === 'undefined' || !crypto.subtle) + return [globalP, getProto(globalP), globalP]; + const nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); + return [ + nativeP, + getProto(nativeP), + globalP + ]; + })(), nativePromiseThen = nativePromiseProto && nativePromiseProto.then; +const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; +const patchGlobalPromise = !!resolvedGlobalPromise; +function schedulePhysicalTick() { + queueMicrotask(physicalTick); +} +var asap = function (callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } +}; +var isOutsideMicroTick = true, +needsNewPhysicalTick = true, +unhandledErrors = [], +rejectingErrors = [], +rejectionMapper = mirror; +var globalPSD = { + id: 'global', + global: true, + ref: 0, + unhandleds: [], + onunhandled: nop, + pgp: false, + env: {}, + finalize: nop +}; +var PSD = globalPSD; +var microtickQueue = []; +var numScheduledCalls = 0; +var tickFinalizers = []; +function DexiePromise(fn) { + if (typeof this !== 'object') + throw new TypeError('Promises must be constructed via new'); + this._listeners = []; + this._lib = false; + var psd = (this._PSD = PSD); + if (typeof fn !== 'function') { + if (fn !== INTERNAL) + throw new TypeError('Not a function'); + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); + return; + } + this._state = null; + this._value = null; + ++psd.ref; + executePromiseTask(this, fn); +} +const thenProp = { + get: function () { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + const cleanup = possibleAwait && !decrementExpectedAwaits(); + var rv = new DexiePromise((resolve, reject) => { + propagateToListener(this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); + }); + if (this._consoleTask) + rv._consoleTask = this._consoleTask; + return rv; + } + then.prototype = INTERNAL; + return then; + }, + set: function (value) { + setProp(this, 'then', value && value.prototype === INTERNAL ? + thenProp : + { + get: function () { + return value; + }, + set: thenProp.set + }); + } +}; +props(DexiePromise.prototype, { + then: thenProp, + _then: function (onFulfilled, onRejected) { + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + catch: function (onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + var type = arguments[0], handler = arguments[1]; + return typeof type === 'function' ? this.then(null, err => + err instanceof type ? handler(err) : PromiseReject(err)) + : this.then(null, err => + err && err.name === type ? handler(err) : PromiseReject(err)); + }, + finally: function (onFinally) { + return this.then(value => { + return DexiePromise.resolve(onFinally()).then(() => value); + }, err => { + return DexiePromise.resolve(onFinally()).then(() => PromiseReject(err)); + }); + }, + timeout: function (ms, msg) { + return ms < Infinity ? + new DexiePromise((resolve, reject) => { + var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms); + this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } +}); +if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise'); +globalPSD.env = snapShot(); +function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; +} +props(DexiePromise, { + all: function () { + var values = getArrayOf.apply(null, arguments) + .map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (values.length === 0) + resolve([]); + var remaining = values.length; + values.forEach((a, i) => DexiePromise.resolve(a).then(x => { + values[i] = x; + if (!--remaining) + resolve(values); + }, reject)); + }); + }, + resolve: value => { + if (value instanceof DexiePromise) + return value; + if (value && typeof value.then === 'function') + return new DexiePromise((resolve, reject) => { + value.then(resolve, reject); + }); + var rv = new DexiePromise(INTERNAL, true, value); + return rv; + }, + reject: PromiseReject, + race: function () { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve, reject) => { + values.map(value => DexiePromise.resolve(value).then(resolve, reject)); + }); + }, + PSD: { + get: () => PSD, + set: value => PSD = value + }, + totalEchoes: { get: () => totalEchoes }, + newPSD: newScope, + usePSD: usePSD, + scheduler: { + get: () => asap, + set: value => { asap = value; } + }, + rejectionMapper: { + get: () => rejectionMapper, + set: value => { rejectionMapper = value; } + }, + follow: (fn, zoneProps) => { + return new DexiePromise((resolve, reject) => { + return newScope((resolve, reject) => { + var psd = PSD; + psd.unhandleds = []; + psd.onunhandled = reject; + psd.finalize = callBoth(function () { + run_at_end_of_this_or_next_physical_tick(() => { + this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]); + }); + }, psd.finalize); + fn(); + }, zoneProps, resolve, reject); + }); + } +}); +if (NativePromise) { + if (NativePromise.allSettled) + setProp(DexiePromise, "allSettled", function () { + const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(resolve => { + if (possiblePromises.length === 0) + resolve([]); + let remaining = possiblePromises.length; + const results = new Array(remaining); + possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => results[i] = { status: "fulfilled", value }, reason => results[i] = { status: "rejected", reason }) + .then(() => --remaining || resolve(results))); + }); + }); + if (NativePromise.any && typeof AggregateError !== 'undefined') + setProp(DexiePromise, "any", function () { + const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve, reject) => { + if (possiblePromises.length === 0) + reject(new AggregateError([])); + let remaining = possiblePromises.length; + const failures = new Array(remaining); + possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => resolve(value), failure => { + failures[i] = failure; + if (!--remaining) + reject(new AggregateError(failures)); + })); + }); + }); +} +function executePromiseTask(promise, fn) { + try { + fn(value => { + if (promise._state !== null) + return; + if (value === promise) + throw new TypeError('A promise cannot be resolved with itself.'); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === 'function') { + executePromiseTask(promise, (resolve, reject) => { + value instanceof DexiePromise ? + value._then(resolve, reject) : + value.then(resolve, reject); + }); + } + else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, handleRejection.bind(null, promise)); + } + catch (ex) { + handleRejection(promise, ex); + } +} +function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); +} +function propagateAllListeners(promise) { + var listeners = promise._listeners; + promise._listeners = []; + for (var i = 0, len = listeners.length; i < len; ++i) { + propagateToListener(promise, listeners[i]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); + if (numScheduledCalls === 0) { + ++numScheduledCalls; + asap(() => { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } +} +function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap(callListener, [cb, promise, listener]); +} +function callListener(cb, promise, listener) { + try { + var ret, value = promise._value; + if (!promise._state && rejectingErrors.length) + rejectingErrors = []; + ret = debug && promise._consoleTask ? promise._consoleTask.run(() => cb(value)) : cb(value); + if (!promise._state && rejectingErrors.indexOf(value) === -1) { + markErrorAsHandled(promise); + } + listener.resolve(ret); + } + catch (e) { + listener.reject(e); + } + finally { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } +} +function physicalTick() { + usePSD(globalPSD, () => { + beginMicroTickScope() && endMicroTickScope(); + }); +} +function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; +} +function endMicroTickScope() { + var callbacks, i, l; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l = callbacks.length; + for (i = 0; i < l; ++i) { + var item = callbacks[i]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; +} +function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach(p => { + p._PSD.onunhandled.call(null, p._value, p); + }); + var finalizers = tickFinalizers.slice(0); + var i = finalizers.length; + while (i) + finalizers[--i](); +} +function run_at_end_of_this_or_next_physical_tick(fn) { + function finalizer() { + fn(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap(() => { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); +} +function addPossiblyUnhandledError(promise) { + if (!unhandledErrors.some(p => p._value === promise._value)) + unhandledErrors.push(promise); +} +function markErrorAsHandled(promise) { + var i = unhandledErrors.length; + while (i) + if (unhandledErrors[--i]._value === promise._value) { + unhandledErrors.splice(i, 1); + return; + } +} +function PromiseReject(reason) { + return new DexiePromise(INTERNAL, false, reason); +} +function wrap(fn, errorCatcher) { + var psd = PSD; + return function () { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn.apply(this, arguments); + } + catch (e) { + errorCatcher && errorCatcher(e); + } + finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; +} +const task = { awaits: 0, echoes: 0, id: 0 }; +var taskCounter = 0; +var zoneStack = []; +var zoneEchoes = 0; +var totalEchoes = 0; +var zone_id_counter = 0; +function newScope(fn, props, a1, a2) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: DexiePromise, + PromiseProp: { value: DexiePromise, configurable: true, writable: true }, + all: DexiePromise.all, + race: DexiePromise.race, + allSettled: DexiePromise.allSettled, + any: DexiePromise.any, + resolve: DexiePromise.resolve, + reject: DexiePromise.reject, + } : {}; + if (props) + extend(psd, props); + ++parent.ref; + psd.finalize = function () { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn, a1, a2); + if (psd.ref === 0) + psd.finalize(); + return rv; +} +function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; +} +function decrementExpectedAwaits() { + if (!task.awaits) + return false; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; + return true; +} +if (('' + nativePromiseThen).indexOf('[native code]') === -1) { + incrementExpectedAwaits = decrementExpectedAwaits = nop; +} +function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then(x => { + decrementExpectedAwaits(); + return x; + }, e => { + decrementExpectedAwaits(); + return rejection(e); + }); + } + return possiblePromise; +} +function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.awaits = task.id = 0; + } + zoneStack.push(PSD); + switchToZone(targetZone, true); +} +function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); +} +function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + var GlobalPromise = globalPSD.env.Promise; + var targetEnv = targetZone.env; + if (currentZone.global || targetZone.global) { + Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + if (targetEnv.allSettled) + GlobalPromise.allSettled = targetEnv.allSettled; + if (targetEnv.any) + GlobalPromise.any = targetEnv.any; + } + } +} +function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + allSettled: GlobalPromise.allSettled, + any: GlobalPromise.any, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + } : {}; +} +function usePSD(psd, fn, a1, a2, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn(a1, a2, a3); + } + finally { + switchToZone(outerScope, false); + } +} +function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) { + return typeof fn !== 'function' ? fn : function () { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn.apply(this, arguments); + } + finally { + switchToZone(outerZone, false); + if (cleanup) + queueMicrotask(decrementExpectedAwaits); + } + }; +} +function execInGlobalContext(cb) { + if (Promise === NativePromise && task.echoes === 0) { + if (zoneEchoes === 0) { + cb(); + } + else { + enqueueNativeMicroTask(cb); + } + } + else { + setTimeout(cb, 0); + } +} +var rejection = DexiePromise.reject; + +function tempTransaction(db, mode, storeNames, fn) { + if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) { + if (db._state.openComplete) { + return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError)); + } + if (!db._state.isBeingOpened) { + if (!db._state.autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); + } + return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn)); + } + else { + var trans = db._createTransaction(mode, storeNames, db._dbSchema); + try { + trans.create(); + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(() => tempTransaction(db, mode, storeNames, fn)); + } + return rejection(ex); + } + return trans._promise(mode, (resolve, reject) => { + return newScope(() => { + PSD.trans = trans; + return fn(resolve, reject, trans); + }); + }).then(result => { + if (mode === 'readwrite') + try { + trans.idbtrans.commit(); + } + catch { } + return mode === 'readonly' ? result : trans._completion.then(() => result); + }); + } +} + +const DEXIE_VERSION = '4.0.7'; +const maxString = String.fromCharCode(65535); +const minKey = -Infinity; +const INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; +const STRING_EXPECTED = "String expected."; +const connections = []; +const DBNAMES_DB = '__dbnames'; +const READONLY = 'readonly'; +const READWRITE = 'readwrite'; + +function combine(filter1, filter2) { + return filter1 ? + filter2 ? + function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : + filter1 : + filter2; +} + +const AnyRange = { + type: 3 , + lower: -Infinity, + lowerOpen: false, + upper: [[]], + upperOpen: false +}; + +function workaroundForUndefinedPrimKey(keyPath) { + return typeof keyPath === "string" && !/\./.test(keyPath) + ? (obj) => { + if (obj[keyPath] === undefined && (keyPath in obj)) { + obj = deepClone(obj); + delete obj[keyPath]; + } + return obj; + } + : (obj) => obj; +} + +function Entity() { + throw exceptions.Type(); +} + +function cmp(a, b) { + try { + const ta = type(a); + const tb = type(b); + if (ta !== tb) { + if (ta === 'Array') + return 1; + if (tb === 'Array') + return -1; + if (ta === 'binary') + return 1; + if (tb === 'binary') + return -1; + if (ta === 'string') + return 1; + if (tb === 'string') + return -1; + if (ta === 'Date') + return 1; + if (tb !== 'Date') + return NaN; + return -1; + } + switch (ta) { + case 'number': + case 'Date': + case 'string': + return a > b ? 1 : a < b ? -1 : 0; + case 'binary': { + return compareUint8Arrays(getUint8Array(a), getUint8Array(b)); + } + case 'Array': + return compareArrays(a, b); + } + } + catch { } + return NaN; +} +function compareArrays(a, b) { + const al = a.length; + const bl = b.length; + const l = al < bl ? al : bl; + for (let i = 0; i < l; ++i) { + const res = cmp(a[i], b[i]); + if (res !== 0) + return res; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function compareUint8Arrays(a, b) { + const al = a.length; + const bl = b.length; + const l = al < bl ? al : bl; + for (let i = 0; i < l; ++i) { + if (a[i] !== b[i]) + return a[i] < b[i] ? -1 : 1; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function type(x) { + const t = typeof x; + if (t !== 'object') + return t; + if (ArrayBuffer.isView(x)) + return 'binary'; + const tsTag = toStringTag(x); + return tsTag === 'ArrayBuffer' ? 'binary' : tsTag; +} +function getUint8Array(a) { + if (a instanceof Uint8Array) + return a; + if (ArrayBuffer.isView(a)) + return new Uint8Array(a.buffer, a.byteOffset, a.byteLength); + return new Uint8Array(a); +} + +class Table { + _trans(mode, fn, writeLocked) { + const trans = this._tx || PSD.trans; + const tableName = this.name; + const task = debug && typeof console !== 'undefined' && console.createTask && console.createTask(`Dexie: ${mode === 'readonly' ? 'read' : 'write'} ${this.name}`); + function checkTableInTransaction(resolve, reject, trans) { + if (!trans.schema[tableName]) + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + return fn(trans.idbtrans, trans); + } + const wasRootExec = beginMicroTickScope(); + try { + let p = trans && trans.db._novip === this.db._novip ? + trans === PSD.trans ? + trans._promise(mode, checkTableInTransaction, writeLocked) : + newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) : + tempTransaction(this.db, mode, [this.name], checkTableInTransaction); + if (task) { + p._consoleTask = task; + p = p.catch(err => { + console.trace(err); + return rejection(err); + }); + } + return p; + } + finally { + if (wasRootExec) + endMicroTickScope(); + } + } + get(keyOrCrit, cb) { + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + if (keyOrCrit == null) + return rejection(new exceptions.Type(`Invalid argument to Table.get()`)); + return this._trans('readonly', (trans) => { + return this.core.get({ trans, key: keyOrCrit }) + .then(res => this.hook.reading.fire(res)); + }).then(cb); + } + where(indexOrCrit) { + if (typeof indexOrCrit === 'string') + return new this.db.WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`); + const keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + return this + .where(keyPaths[0]) + .equals(indexOrCrit[keyPaths[0]]); + const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => { + if (ix.compound && + keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0)) { + for (let i = 0; i < keyPaths.length; ++i) { + if (keyPaths.indexOf(ix.keyPath[i]) === -1) + return false; + } + return true; + } + return false; + }).sort((a, b) => a.keyPath.length - b.keyPath.length)[0]; + if (compoundIndex && this.db._maxKey !== maxString) { + const keyPathsInValidOrder = compoundIndex.keyPath.slice(0, keyPaths.length); + return this + .where(keyPathsInValidOrder) + .equals(keyPathsInValidOrder.map(kp => indexOrCrit[kp])); + } + if (!compoundIndex && debug) + console.warn(`The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit from a ` + + `compound index [${keyPaths.join('+')}]`); + const { idxByName } = this.schema; + const idb = this.db._deps.indexedDB; + function equals(a, b) { + return idb.cmp(a, b) === 0; + } + const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => { + const index = idxByName[keyPath]; + const value = indexOrCrit[keyPath]; + return [ + prevIndex || index, + prevIndex || !index ? + combine(prevFilterFn, index && index.multi ? + x => { + const prop = getByKeyPath(x, keyPath); + return isArray(prop) && prop.some(item => equals(value, item)); + } : x => equals(value, getByKeyPath(x, keyPath))) + : prevFilterFn + ]; + }, [null, null]); + return idx ? + this.where(idx.name).equals(indexOrCrit[idx.keyPath]) + .filter(filterFunction) : + compoundIndex ? + this.filter(filterFunction) : + this.where(keyPaths).equals(''); + } + filter(filterFunction) { + return this.toCollection().and(filterFunction); + } + count(thenShortcut) { + return this.toCollection().count(thenShortcut); + } + offset(offset) { + return this.toCollection().offset(offset); + } + limit(numRows) { + return this.toCollection().limit(numRows); + } + each(callback) { + return this.toCollection().each(callback); + } + toArray(thenShortcut) { + return this.toCollection().toArray(thenShortcut); + } + toCollection() { + return new this.db.Collection(new this.db.WhereClause(this)); + } + orderBy(index) { + return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? + `[${index.join('+')}]` : + index)); + } + reverse() { + return this.toCollection().reverse(); + } + mapToClass(constructor) { + const { db, name: tableName } = this; + this.schema.mappedClass = constructor; + if (constructor.prototype instanceof Entity) { + constructor = class extends constructor { + get db() { return db; } + table() { return tableName; } + }; + } + const inheritedProps = new Set(); + for (let proto = constructor.prototype; proto; proto = getProto(proto)) { + Object.getOwnPropertyNames(proto).forEach(propName => inheritedProps.add(propName)); + } + const readHook = (obj) => { + if (!obj) + return obj; + const res = Object.create(constructor.prototype); + for (let m in obj) + if (!inheritedProps.has(m)) + try { + res[m] = obj[m]; + } + catch (_) { } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + } + defineClass() { + function Class(content) { + extend(this, content); + } + return this.mapToClass(Class); + } + add(obj, key) { + const { auto, keyPath } = this.schema.primKey; + let objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', trans => { + return this.core.mutate({ trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] }); + }).then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult) + .then(lastResult => { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + } + update(keyOrObject, modifications) { + if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { + const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === undefined) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + return this.where(":id").equals(key).modify(modifications); + } + else { + return this.where(":id").equals(keyOrObject).modify(modifications); + } + } + put(obj, key) { + const { auto, keyPath } = this.schema.primKey; + let objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult) + .then(lastResult => { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + } + delete(key) { + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'delete', keys: [key] })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined); + } + clear() { + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'deleteRange', range: AnyRange })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined); + } + bulkGet(keys) { + return this._trans('readonly', trans => { + return this.core.getMany({ + keys, + trans + }).then(result => result.map(res => this.hook.reading.fire(res))); + }); + } + bulkAdd(objects, keysOrOptions, options) { + const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + const wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', trans => { + const { auto, keyPath } = this.schema.primKey; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + const numObjects = objects.length; + let objectsToAdd = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return this.core.mutate({ trans, type: 'add', keys: keys, values: objectsToAdd, wantResults }) + .then(({ numFailures, results, lastResult, failures }) => { + const result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError(`${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures); + }); + }); + } + bulkPut(objects, keysOrOptions, options) { + const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + const wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', trans => { + const { auto, keyPath } = this.schema.primKey; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + const numObjects = objects.length; + let objectsToPut = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return this.core.mutate({ trans, type: 'put', keys: keys, values: objectsToPut, wantResults }) + .then(({ numFailures, results, lastResult, failures }) => { + const result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError(`${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures); + }); + }); + } + bulkUpdate(keysAndChanges) { + const coreTable = this.core; + const keys = keysAndChanges.map((entry) => entry.key); + const changeSpecs = keysAndChanges.map((entry) => entry.changes); + const offsetMap = []; + return this._trans('readwrite', (trans) => { + return coreTable.getMany({ trans, keys, cache: 'clone' }).then((objs) => { + const resultKeys = []; + const resultObjs = []; + keysAndChanges.forEach(({ key, changes }, idx) => { + const obj = objs[idx]; + if (obj) { + for (const keyPath of Object.keys(changes)) { + const value = changes[keyPath]; + if (keyPath === this.schema.primKey.keyPath) { + if (cmp(value, key) !== 0) { + throw new exceptions.Constraint(`Cannot update primary key in bulkUpdate()`); + } + } + else { + setByKeyPath(obj, keyPath, value); + } + } + offsetMap.push(idx); + resultKeys.push(key); + resultObjs.push(obj); + } + }); + const numEntries = resultKeys.length; + return coreTable + .mutate({ + trans, + type: 'put', + keys: resultKeys, + values: resultObjs, + updates: { + keys, + changeSpecs + } + }) + .then(({ numFailures, failures }) => { + if (numFailures === 0) + return numEntries; + for (const offset of Object.keys(failures)) { + const mappedOffset = offsetMap[Number(offset)]; + if (mappedOffset != null) { + const failure = failures[offset]; + delete failures[offset]; + failures[mappedOffset] = failure; + } + } + throw new BulkError(`${this.name}.bulkUpdate(): ${numFailures} of ${numEntries} operations failed`, failures); + }); + }); + }); + } + bulkDelete(keys) { + const numKeys = keys.length; + return this._trans('readwrite', trans => { + return this.core.mutate({ trans, type: 'delete', keys: keys }); + }).then(({ numFailures, lastResult, failures }) => { + if (numFailures === 0) + return lastResult; + throw new BulkError(`${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures); + }); + } +} + +function Events(ctx) { + var evs = {}; + var rv = function (eventName, subscriber) { + if (subscriber) { + var i = arguments.length, args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } + else if (typeof (eventName) === 'string') { + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i = 1, l = arguments.length; i < l; ++i) { + add(arguments[i]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === 'object') + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function (cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function (cb) { + context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + keys(cfg).forEach(function (eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } + else if (args === 'asap') { + var context = add(eventName, mirror, function fire() { + var i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + context.subscribers.forEach(function (fn) { + asap$1(function fireEvent() { + fn.apply(null, args); + }); + }); + }); + } + else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } +} + +function makeClassConstructor(prototype, constructor) { + derive(constructor).from({ prototype }); + return constructor; +} + +function createTableConstructor(db) { + return makeClassConstructor(Table.prototype, function Table(name, tableSchema, trans) { + this.db = db; + this._tx = trans; + this.name = name; + this.schema = tableSchema; + this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + }); +} + +function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && + (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); +} +function addFilter(ctx, fn) { + ctx.filter = combine(ctx.filter, fn); +} +function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? () => combine(curr(), factory()) : factory; + ctx.justLimit = isLimitFilter && !curr; +} +function addMatchFilter(ctx, fn) { + ctx.isMatch = combine(ctx.isMatch, fn); +} +function getIndexOrStore(ctx, coreSchema) { + if (ctx.isPrimKey) + return coreSchema.primaryKey; + const index = coreSchema.getIndexByKeyPath(ctx.index); + if (!index) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); + return index; +} +function openCursor(ctx, coreTable, trans) { + const index = getIndexOrStore(ctx, coreTable.schema); + return coreTable.openCursor({ + trans, + values: !ctx.keysOnly, + reverse: ctx.dir === 'prev', + unique: !!ctx.unique, + query: { + index, + range: ctx.range + } + }); +} +function iter(ctx, fn, coreTrans, coreTable) { + const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper); + } + else { + const set = {}; + const union = (item, cursor, advance) => { + if (!filter || filter(cursor, advance, result => cursor.stop(result), err => cursor.fail(err))) { + var primaryKey = cursor.primaryKey; + var key = '' + primaryKey; + if (key === '[object ArrayBuffer]') + key = '' + new Uint8Array(primaryKey); + if (!hasOwn(set, key)) { + set[key] = true; + fn(item, cursor, advance); + } + } + }; + return Promise.all([ + ctx.or._iterate(union, coreTrans), + iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) + ]); + } +} +function iterate(cursorPromise, filter, fn, valueMapper) { + var mappedFn = valueMapper ? (x, c, a) => fn(valueMapper(x), c, a) : fn; + var wrappedFn = wrap(mappedFn); + return cursorPromise.then(cursor => { + if (cursor) { + return cursor.start(() => { + var c = () => cursor.continue(); + if (!filter || filter(cursor, advancer => c = advancer, val => { cursor.stop(val); c = nop; }, e => { cursor.fail(e); c = nop; })) + wrappedFn(cursor.value, cursor, advancer => c = advancer); + c(); + }); + } + }); +} + +const PropModSymbol = Symbol(); +class PropModification { + execute(value) { + if (this.add !== undefined) { + const term = this.add; + if (isArray(term)) { + return [...(isArray(value) ? value : []), ...term].sort(); + } + if (typeof term === 'number') + return (Number(value) || 0) + term; + if (typeof term === 'bigint') { + try { + return BigInt(value) + term; + } + catch { + return BigInt(0) + term; + } + } + throw new TypeError(`Invalid term ${term}`); + } + if (this.remove !== undefined) { + const subtrahend = this.remove; + if (isArray(subtrahend)) { + return isArray(value) ? value.filter(item => !subtrahend.includes(item)).sort() : []; + } + if (typeof subtrahend === 'number') + return Number(value) - subtrahend; + if (typeof subtrahend === 'bigint') { + try { + return BigInt(value) - subtrahend; + } + catch { + return BigInt(0) - subtrahend; + } + } + throw new TypeError(`Invalid subtrahend ${subtrahend}`); + } + const prefixToReplace = this.replacePrefix?.[0]; + if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) { + return this.replacePrefix[1] + value.substring(prefixToReplace.length); + } + return value; + } + constructor(spec) { + Object.assign(this, spec); + } +} + +class Collection { + _read(fn, cb) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readonly', fn).then(cb); + } + _write(fn) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readwrite', fn, "locked"); + } + _addAlgorithm(fn) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn); + } + _iterate(fn, coreTrans) { + return iter(this._ctx, fn, coreTrans, this._ctx.table.core); + } + clone(props) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props) + extend(ctx, props); + rv._ctx = ctx; + return rv; + } + raw() { + this._ctx.valueMapper = null; + return this; + } + each(fn) { + var ctx = this._ctx; + return this._read(trans => iter(ctx, fn, trans, ctx.table.core)); + } + count(cb) { + return this._read(trans => { + const ctx = this._ctx; + const coreTable = ctx.table.core; + if (isPlainKeyRange(ctx, true)) { + return coreTable.count({ + trans, + query: { + index: getIndexOrStore(ctx, coreTable.schema), + range: ctx.range + } + }).then(count => Math.min(count, ctx.limit)); + } + else { + var count = 0; + return iter(ctx, () => { ++count; return false; }, trans, coreTable) + .then(() => count); + } + }).then(cb); + } + sortBy(keyPath, cb) { + const parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i) { + if (i) + return getval(obj[parts[i]], i - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a, b) { + var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function (a) { + return a.sort(sorter); + }).then(cb); + } + toArray(cb) { + return this._read(trans => { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + const { valueMapper } = ctx; + const index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans, + limit: ctx.limit, + values: true, + query: { + index, + range: ctx.range + } + }).then(({ result }) => valueMapper ? result.map(valueMapper) : result); + } + else { + const a = []; + return iter(ctx, item => a.push(item), trans, ctx.table.core).then(() => a); + } + }, cb); + } + offset(offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, () => { + var offsetLeft = offset; + return (cursor, advance) => { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(() => { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } + else { + addReplayFilter(ctx, () => { + var offsetLeft = offset; + return () => (--offsetLeft < 0); + }); + } + return this; + } + limit(numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); + addReplayFilter(this._ctx, () => { + var rowsLeft = numRows; + return function (cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); + return rowsLeft >= 0; + }; + }, true); + return this; + } + until(filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function (cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } + else { + return true; + } + }); + return this; + } + first(cb) { + return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); + } + last(cb) { + return this.reverse().first(cb); + } + filter(filterFunction) { + addFilter(this._ctx, function (cursor) { + return filterFunction(cursor.value); + }); + addMatchFilter(this._ctx, filterFunction); + return this; + } + and(filter) { + return this.filter(filter); + } + or(indexName) { + return new this.db.WhereClause(this._ctx.table, indexName, this); + } + reverse() { + this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + } + desc() { + return this.reverse(); + } + eachKey(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.key, cursor); }); + } + eachUniqueKey(cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + } + eachPrimaryKey(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); + } + keys(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.key); + }).then(function () { + return a; + }).then(cb); + } + primaryKeys(cb) { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + return this._read(trans => { + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans, + values: false, + limit: ctx.limit, + query: { + index, + range: ctx.range + } + }); + }).then(({ result }) => result).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.primaryKey); + }).then(function () { + return a; + }).then(cb); + } + uniqueKeys(cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + } + firstKey(cb) { + return this.limit(1).keys(function (a) { return a[0]; }).then(cb); + } + lastKey(cb) { + return this.reverse().firstKey(cb); + } + distinct() { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; + var set = {}; + addFilter(this._ctx, function (cursor) { + var strKey = cursor.primaryKey.toString(); + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + } + modify(changes) { + var ctx = this._ctx; + return this._write(trans => { + var modifyer; + if (typeof changes === 'function') { + modifyer = changes; + } + else { + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function (item) { + let anythingModified = false; + for (let i = 0; i < numKeys; ++i) { + let keyPath = keyPaths[i]; + let val = changes[keyPath]; + let origVal = getByKeyPath(item, keyPath); + if (val instanceof PropModification) { + setByKeyPath(item, keyPath, val.execute(origVal)); + anythingModified = true; + } + else if (origVal !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + } + return anythingModified; + }; + } + const coreTable = ctx.table.core; + const { outbound, extractKey } = coreTable.schema.primaryKey; + const limit = this.db._options.modifyChunkSize || 200; + const totalFailures = []; + let successCount = 0; + const failedKeys = []; + const applyMutateResult = (expectedCount, res) => { + const { failures, numFailures } = res; + successCount += expectedCount - numFailures; + for (let pos of keys(failures)) { + totalFailures.push(failures[pos]); + } + }; + return this.clone().primaryKeys().then(keys => { + const criteria = isPlainKeyRange(ctx) && + ctx.limit === Infinity && + (typeof changes !== 'function' || changes === deleteCallback) && { + index: ctx.index, + range: ctx.range + }; + const nextChunk = (offset) => { + const count = Math.min(limit, keys.length - offset); + return coreTable.getMany({ + trans, + keys: keys.slice(offset, offset + count), + cache: "immutable" + }).then(values => { + const addValues = []; + const putValues = []; + const putKeys = outbound ? [] : null; + const deleteKeys = []; + for (let i = 0; i < count; ++i) { + const origValue = values[i]; + const ctx = { + value: deepClone(origValue), + primKey: keys[offset + i] + }; + if (modifyer.call(ctx, ctx.value, ctx) !== false) { + if (ctx.value == null) { + deleteKeys.push(keys[offset + i]); + } + else if (!outbound && cmp(extractKey(origValue), extractKey(ctx.value)) !== 0) { + deleteKeys.push(keys[offset + i]); + addValues.push(ctx.value); + } + else { + putValues.push(ctx.value); + if (outbound) + putKeys.push(keys[offset + i]); + } + } + } + return Promise.resolve(addValues.length > 0 && + coreTable.mutate({ trans, type: 'add', values: addValues }) + .then(res => { + for (let pos in res.failures) { + deleteKeys.splice(parseInt(pos), 1); + } + applyMutateResult(addValues.length, res); + })).then(() => (putValues.length > 0 || (criteria && typeof changes === 'object')) && + coreTable.mutate({ + trans, + type: 'put', + keys: putKeys, + values: putValues, + criteria, + changeSpec: typeof changes !== 'function' + && changes, + isAdditionalChunk: offset > 0 + }).then(res => applyMutateResult(putValues.length, res))).then(() => (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) && + coreTable.mutate({ + trans, + type: 'delete', + keys: deleteKeys, + criteria, + isAdditionalChunk: offset > 0 + }).then(res => applyMutateResult(deleteKeys.length, res))).then(() => { + return keys.length > offset + count && nextChunk(offset + limit); + }); + }); + }; + return nextChunk(0).then(() => { + if (totalFailures.length > 0) + throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); + return keys.length; + }); + }); + }); + } + delete() { + var ctx = this._ctx, range = ctx.range; + if (isPlainKeyRange(ctx) && + (ctx.isPrimKey || range.type === 3 )) + { + return this._write(trans => { + const { primaryKey } = ctx.table.core.schema; + const coreRange = range; + return ctx.table.core.count({ trans, query: { index: primaryKey, range: coreRange } }).then(count => { + return ctx.table.core.mutate({ trans, type: 'deleteRange', range: coreRange }) + .then(({ failures, lastResult, results, numFailures }) => { + if (numFailures) + throw new ModifyError("Could not delete some values", Object.keys(failures).map(pos => failures[pos]), count - numFailures); + return count - numFailures; + }); + }); + }); + } + return this.modify(deleteCallback); + } +} +const deleteCallback = (value, ctx) => ctx.value = null; + +function createCollectionConstructor(db) { + return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) { + this.db = db; + let keyRange = AnyRange, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } + catch (ex) { + error = ex; + } + const whereCtx = whereClause._ctx; + const table = whereCtx.table; + const readingHook = table.hook.reading.fire; + this._ctx = { + table: table, + index: whereCtx.index, + isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error: error, + or: whereCtx.or, + valueMapper: readingHook !== mirror ? readingHook : null + }; + }); +} + +function simpleCompare(a, b) { + return a < b ? -1 : a === b ? 0 : 1; +} +function simpleCompareReverse(a, b) { + return a > b ? -1 : a === b ? 0 : 1; +} + +function fail(collectionOrWhereClause, err, T) { + var collection = collectionOrWhereClause instanceof WhereClause ? + new collectionOrWhereClause.Collection(collectionOrWhereClause) : + collectionOrWhereClause; + collection._ctx.error = T ? new T(err) : new TypeError(err); + return collection; +} +function emptyCollection(whereClause) { + return new whereClause.Collection(whereClause, () => rangeEqual("")).limit(0); +} +function upperFactory(dir) { + return dir === "next" ? + (s) => s.toUpperCase() : + (s) => s.toLowerCase(); +} +function lowerFactory(dir) { + return dir === "next" ? + (s) => s.toLowerCase() : + (s) => s.toUpperCase(); +} +function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i = 0; i < length; ++i) { + var lwrKeyChar = lowerKey[i]; + if (lwrKeyChar !== lowerNeedle[i]) { + if (cmp(key[i], upperNeedle[i]) < 0) + return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); + if (cmp(key[i], lowerNeedle[i]) < 0) + return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp(key[i], lwrKeyChar) < 0) + llp = i; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); +} +function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every(s => typeof s === 'string')) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = (dir === "next" ? simpleCompare : simpleCompareReverse); + var needleBounds = needles.map(function (needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function (a, b) { + return compare(a.lower, b.lower); + }); + upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); + lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); + direction = dir; + nextKeySuffix = (dir === "next" ? "" : suffix); + } + initDirection("next"); + var c = new whereClause.Collection(whereClause, () => createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix)); + c._ondirectionchange = function (direction) { + initDirection(direction); + }; + var firstPossibleNeedle = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + if (typeof key !== 'string') + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } + else { + var lowestPossibleCasing = null; + for (var i = firstPossibleNeedle; i < needlesLen; ++i) { + var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); + } + else { + advance(resolve); + } + return false; + } + }); + return c; +} +function createRange(lower, upper, lowerOpen, upperOpen) { + return { + type: 2 , + lower, + upper, + lowerOpen, + upperOpen + }; +} +function rangeEqual(value) { + return { + type: 1 , + lower: value, + upper: value + }; +} + +class WhereClause { + get Collection() { + return this._ctx.table.db.Collection; + } + between(lower, upper, includeLower, includeUpper) { + includeLower = includeLower !== false; + includeUpper = includeUpper === true; + try { + if ((this._cmp(lower, upper) > 0) || + (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) + return emptyCollection(this); + return new this.Collection(this, () => createRange(lower, upper, !includeLower, !includeUpper)); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + } + equals(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => rangeEqual(value)); + } + above(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(value, undefined, true)); + } + aboveOrEqual(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(value, undefined, false)); + } + below(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(undefined, value, false, true)); + } + belowOrEqual(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(undefined, value)); + } + startsWith(str) { + if (typeof str !== 'string') + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + } + startsWithIgnoreCase(str) { + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString); + } + equalsIgnoreCase(str) { + return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], ""); + } + anyOfIgnoreCase() { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, ""); + } + startsWithAnyOfIgnoreCase() { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString); + } + anyOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + let compare = this._cmp; + try { + set.sort(compare); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1])); + c._ondirectionchange = direction => { + compare = (direction === "next" ? + this._ascending : + this._descending); + set.sort(compare); + }; + let i = 0; + c._addAlgorithm((cursor, advance, resolve) => { + const key = cursor.key; + while (compare(key, set[i]) > 0) { + ++i; + if (i === set.length) { + advance(resolve); + return false; + } + } + if (compare(key, set[i]) === 0) { + return true; + } + else { + advance(() => { cursor.continue(set[i]); }); + return false; + } + }); + return c; + } + notEqual(value) { + return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false }); + } + noneOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new this.Collection(this); + try { + set.sort(this._ascending); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + const ranges = set.reduce((res, val) => res ? + res.concat([[res[res.length - 1][1], val]]) : + [[minKey, val]], null); + ranges.push([set[set.length - 1], this.db._maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + } + inAnyRange(ranges, options) { + const cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every(range => range[0] !== undefined && + range[1] !== undefined && + ascending(range[0], range[1]) <= 0)) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + const includeLowers = !options || options.includeLowers !== false; + const includeUppers = options && options.includeUppers === true; + function addRange(ranges, newRange) { + let i = 0, l = ranges.length; + for (; i < l; ++i) { + const range = ranges[i]; + if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i === l) + ranges.push(newRange); + return ranges; + } + let sortDirection = ascending; + function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } + let set; + try { + set = ranges.reduce(addRange, []); + set.sort(rangeSorter); + } + catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + let rangePos = 0; + const keyIsBeyondCurrentEntry = includeUppers ? + key => ascending(key, set[rangePos][1]) > 0 : + key => ascending(key, set[rangePos][1]) >= 0; + const keyIsBeforeCurrentEntry = includeLowers ? + key => descending(key, set[rangePos][0]) > 0 : + key => descending(key, set[rangePos][0]) >= 0; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + let checkKey = keyIsBeyondCurrentEntry; + const c = new this.Collection(this, () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers)); + c._ondirectionchange = direction => { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } + else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c._addAlgorithm((cursor, advance, resolve) => { + var key = cursor.key; + while (checkKey(key)) { + ++rangePos; + if (rangePos === set.length) { + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + return true; + } + else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) { + return false; + } + else { + advance(() => { + if (sortDirection === ascending) + cursor.continue(set[rangePos][0]); + else + cursor.continue(set[rangePos][1]); + }); + return false; + } + }); + return c; + } + startsWithAnyOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every(s => typeof s === 'string')) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map((str) => [str, str + maxString])); + } +} + +function createWhereClauseConstructor(db) { + return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) { + this.db = db; + this._ctx = { + table: table, + index: index === ":id" ? null : index, + or: orCollection + }; + this._cmp = this._ascending = cmp; + this._descending = (a, b) => cmp(b, a); + this._max = (a, b) => cmp(a, b) > 0 ? a : b; + this._min = (a, b) => cmp(a, b) < 0 ? a : b; + this._IDBKeyRange = db._deps.IDBKeyRange; + if (!this._IDBKeyRange) + throw new exceptions.MissingAPI(); + }); +} + +function eventRejectHandler(reject) { + return wrap(function (event) { + preventDefault(event); + reject(event.target.error); + return false; + }); +} +function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); +} + +const DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated'; +const STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1'; +const globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME); + +class Transaction { + _lock() { + assert(!PSD.global); + ++this._reculock; + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + } + _unlock() { + assert(!PSD.global); + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } + catch (e) { } + } + } + return this; + } + _locked() { + return this._reculock && PSD.lockOwnerFor !== this; + } + create(idbtrans) { + if (!this.mode) + return this; + const idbdb = this.db.idbdb; + const dbOpenError = this.db._state.dbOpenError; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || + (this.db.core + ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) + : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); + idbtrans.onerror = wrap(ev => { + preventDefault(ev); + this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap(ev => { + preventDefault(ev); + this.active && this._reject(new exceptions.Abort(idbtrans.error)); + this.active = false; + this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(() => { + this.active = false; + this._resolve(); + if ('mutatedParts' in idbtrans) { + globalEvents.storagemutated.fire(idbtrans["mutatedParts"]); + } + }); + return this; + } + _promise(mode, fn, bWriteLock) { + if (mode === 'readwrite' && this.mode !== 'readwrite') + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new DexiePromise((resolve, reject) => { + this._blockedFuncs.push([() => { + this._promise(mode, fn, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } + else if (bWriteLock) { + return newScope(() => { + var p = new DexiePromise((resolve, reject) => { + this._lock(); + const rv = fn(resolve, reject, this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p.finally(() => this._unlock()); + p._lib = true; + return p; + }); + } + else { + var p = new DexiePromise((resolve, reject) => { + var rv = fn(resolve, reject, this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p._lib = true; + return p; + } + } + _root() { + return this.parent ? this.parent._root() : this; + } + waitFor(promiseLike) { + var root = this._root(); + const promise = DexiePromise.resolve(promiseLike); + if (root._waitingFor) { + root._waitingFor = root._waitingFor.then(() => promise); + } + else { + root._waitingFor = promise; + root._waitingQueue = []; + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; + while (root._waitingQueue.length) + (root._waitingQueue.shift())(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + }()); + } + var currentWaitPromise = root._waitingFor; + return new DexiePromise((resolve, reject) => { + promise.then(res => root._waitingQueue.push(wrap(resolve.bind(null, res))), err => root._waitingQueue.push(wrap(reject.bind(null, err)))).finally(() => { + if (root._waitingFor === currentWaitPromise) { + root._waitingFor = null; + } + }); + }); + } + abort() { + if (this.active) { + this.active = false; + if (this.idbtrans) + this.idbtrans.abort(); + this._reject(new exceptions.Abort()); + } + } + table(tableName) { + const memoizedTables = (this._memoizedTables || (this._memoizedTables = {})); + if (hasOwn(memoizedTables, tableName)) + return memoizedTables[tableName]; + const tableSchema = this.schema[tableName]; + if (!tableSchema) { + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + } + const transactionBoundTable = new this.db.Table(tableName, tableSchema, this); + transactionBoundTable.core = this.db.core.table(tableName); + memoizedTables[tableName] = transactionBoundTable; + return transactionBoundTable; + } +} + +function createTransactionConstructor(db) { + return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) { + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.schema = dbschema; + this.chromeTransactionDurability = chromeTransactionDurability; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; + this._completion = new DexiePromise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + }); + this._completion.then(() => { + this.active = false; + this.on.complete.fire(); + }, e => { + var wasActive = this.active; + this.active = false; + this.on.error.fire(e); + this.parent ? + this.parent._reject(e) : + wasActive && this.idbtrans && this.idbtrans.abort(); + return rejection(e); + }); + }); +} + +function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) { + return { + name, + keyPath, + unique, + multi, + auto, + compound, + src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath) + }; +} +function nameFromKeyPath(keyPath) { + return typeof keyPath === 'string' ? + keyPath : + keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : ""; +} + +function createTableSchema(name, primKey, indexes) { + return { + name, + primKey, + indexes, + mappedClass: null, + idxByName: arrayToObject(indexes, index => [index.name, index]) + }; +} + +function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; +} +let getMaxKey = (IdbKeyRange) => { + try { + IdbKeyRange.only([[]]); + getMaxKey = () => [[]]; + return [[]]; + } + catch (e) { + getMaxKey = () => maxString; + return maxString; + } +}; + +function getKeyExtractor(keyPath) { + if (keyPath == null) { + return () => undefined; + } + else if (typeof keyPath === 'string') { + return getSinglePathKeyExtractor(keyPath); + } + else { + return obj => getByKeyPath(obj, keyPath); + } +} +function getSinglePathKeyExtractor(keyPath) { + const split = keyPath.split('.'); + if (split.length === 1) { + return obj => obj[keyPath]; + } + else { + return obj => getByKeyPath(obj, keyPath); + } +} + +function arrayify(arrayLike) { + return [].slice.call(arrayLike); +} +let _id_counter = 0; +function getKeyPathAlias(keyPath) { + return keyPath == null ? + ":id" : + typeof keyPath === 'string' ? + keyPath : + `[${keyPath.join('+')}]`; +} +function createDBCore(db, IdbKeyRange, tmpTrans) { + function extractSchema(db, trans) { + const tables = arrayify(db.objectStoreNames); + return { + schema: { + name: db.name, + tables: tables.map(table => trans.objectStore(table)).map(store => { + const { keyPath, autoIncrement } = store; + const compound = isArray(keyPath); + const outbound = keyPath == null; + const indexByKeyPath = {}; + const result = { + name: store.name, + primaryKey: { + name: null, + isPrimaryKey: true, + outbound, + compound, + keyPath, + autoIncrement, + unique: true, + extractKey: getKeyExtractor(keyPath) + }, + indexes: arrayify(store.indexNames).map(indexName => store.index(indexName)) + .map(index => { + const { name, unique, multiEntry, keyPath } = index; + const compound = isArray(keyPath); + const result = { + name, + compound, + keyPath, + unique, + multiEntry, + extractKey: getKeyExtractor(keyPath) + }; + indexByKeyPath[getKeyPathAlias(keyPath)] = result; + return result; + }), + getIndexByKeyPath: (keyPath) => indexByKeyPath[getKeyPathAlias(keyPath)] + }; + indexByKeyPath[":id"] = result.primaryKey; + if (keyPath != null) { + indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; + } + return result; + }) + }, + hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) && + !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) + }; + } + function makeIDBKeyRange(range) { + if (range.type === 3 ) + return null; + if (range.type === 4 ) + throw new Error("Cannot convert never type to IDBKeyRange"); + const { lower, upper, lowerOpen, upperOpen } = range; + const idbRange = lower === undefined ? + upper === undefined ? + null : + IdbKeyRange.upperBound(upper, !!upperOpen) : + upper === undefined ? + IdbKeyRange.lowerBound(lower, !!lowerOpen) : + IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); + return idbRange; + } + function createDbCoreTable(tableSchema) { + const tableName = tableSchema.name; + function mutate({ trans, type, keys, values, range }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const outbound = store.keyPath == null; + const isAddOrPut = type === "put" || type === "add"; + if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange') + throw new Error("Invalid operation type: " + type); + const { length } = keys || values || { length: 1 }; + if (keys && values && keys.length !== values.length) { + throw new Error("Given keys array must have same length as given values array."); + } + if (length === 0) + return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined }); + let req; + const reqs = []; + const failures = []; + let numFailures = 0; + const errorHandler = event => { + ++numFailures; + preventDefault(event); + }; + if (type === 'deleteRange') { + if (range.type === 4 ) + return resolve({ numFailures, failures, results: [], lastResult: undefined }); + if (range.type === 3 ) + reqs.push(req = store.clear()); + else + reqs.push(req = store.delete(makeIDBKeyRange(range))); + } + else { + const [args1, args2] = isAddOrPut ? + outbound ? + [values, keys] : + [values, null] : + [keys, null]; + if (isAddOrPut) { + for (let i = 0; i < length; ++i) { + reqs.push(req = (args2 && args2[i] !== undefined ? + store[type](args1[i], args2[i]) : + store[type](args1[i]))); + req.onerror = errorHandler; + } + } + else { + for (let i = 0; i < length; ++i) { + reqs.push(req = store[type](args1[i])); + req.onerror = errorHandler; + } + } + } + const done = event => { + const lastResult = event.target.result; + reqs.forEach((req, i) => req.error != null && (failures[i] = req.error)); + resolve({ + numFailures, + failures, + results: type === "delete" ? keys : reqs.map(req => req.result), + lastResult + }); + }; + req.onerror = event => { + errorHandler(event); + done(event); + }; + req.onsuccess = done; + }); + } + function openCursor({ trans, values, query, reverse, unique }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const { index, range } = query; + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? + store : + store.index(index.name); + const direction = reverse ? + unique ? + "prevunique" : + "prev" : + unique ? + "nextunique" : + "next"; + const req = values || !('openKeyCursor' in source) ? + source.openCursor(makeIDBKeyRange(range), direction) : + source.openKeyCursor(makeIDBKeyRange(range), direction); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(ev => { + const cursor = req.result; + if (!cursor) { + resolve(null); + return; + } + cursor.___id = ++_id_counter; + cursor.done = false; + const _cursorContinue = cursor.continue.bind(cursor); + let _cursorContinuePrimaryKey = cursor.continuePrimaryKey; + if (_cursorContinuePrimaryKey) + _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); + const _cursorAdvance = cursor.advance.bind(cursor); + const doThrowCursorIsNotStarted = () => { throw new Error("Cursor not started"); }; + const doThrowCursorIsStopped = () => { throw new Error("Cursor not stopped"); }; + cursor.trans = trans; + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; + cursor.fail = wrap(reject); + cursor.next = function () { + let gotOne = 1; + return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this); + }; + cursor.start = (callback) => { + const iterationPromise = new Promise((resolveIteration, rejectIteration) => { + resolveIteration = wrap(resolveIteration); + req.onerror = eventRejectHandler(rejectIteration); + cursor.fail = rejectIteration; + cursor.stop = value => { + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; + resolveIteration(value); + }; + }); + const guardedCallback = () => { + if (req.result) { + try { + callback(); + } + catch (err) { + cursor.fail(err); + } + } + else { + cursor.done = true; + cursor.start = () => { throw new Error("Cursor behind last entry"); }; + cursor.stop(); + } + }; + req.onsuccess = wrap(ev => { + req.onsuccess = guardedCallback; + guardedCallback(); + }); + cursor.continue = _cursorContinue; + cursor.continuePrimaryKey = _cursorContinuePrimaryKey; + cursor.advance = _cursorAdvance; + guardedCallback(); + return iterationPromise; + }; + resolve(cursor); + }, reject); + }); + } + function query(hasGetAll) { + return (request) => { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const { trans, values, limit, query } = request; + const nonInfinitLimit = limit === Infinity ? undefined : limit; + const { index, range } = query; + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const idbKeyRange = makeIDBKeyRange(range); + if (limit === 0) + return resolve({ result: [] }); + if (hasGetAll) { + const req = values ? + source.getAll(idbKeyRange, nonInfinitLimit) : + source.getAllKeys(idbKeyRange, nonInfinitLimit); + req.onsuccess = event => resolve({ result: event.target.result }); + req.onerror = eventRejectHandler(reject); + } + else { + let count = 0; + const req = values || !('openKeyCursor' in source) ? + source.openCursor(idbKeyRange) : + source.openKeyCursor(idbKeyRange); + const result = []; + req.onsuccess = event => { + const cursor = req.result; + if (!cursor) + return resolve({ result }); + result.push(values ? cursor.value : cursor.primaryKey); + if (++count === limit) + return resolve({ result }); + cursor.continue(); + }; + req.onerror = eventRejectHandler(reject); + } + }); + }; + } + return { + name: tableName, + schema: tableSchema, + mutate, + getMany({ trans, keys }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const length = keys.length; + const result = new Array(length); + let keyCount = 0; + let callbackCount = 0; + let req; + const successHandler = event => { + const req = event.target; + if ((result[req._pos] = req.result) != null) + ; + if (++callbackCount === keyCount) + resolve(result); + }; + const errorHandler = eventRejectHandler(reject); + for (let i = 0; i < length; ++i) { + const key = keys[i]; + if (key != null) { + req = store.get(keys[i]); + req._pos = i; + req.onsuccess = successHandler; + req.onerror = errorHandler; + ++keyCount; + } + } + if (keyCount === 0) + resolve(result); + }); + }, + get({ trans, key }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const req = store.get(key); + req.onsuccess = event => resolve(event.target.result); + req.onerror = eventRejectHandler(reject); + }); + }, + query: query(hasGetAll), + openCursor, + count({ query, trans }) { + const { index, range } = query; + return new Promise((resolve, reject) => { + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const idbKeyRange = makeIDBKeyRange(range); + const req = idbKeyRange ? source.count(idbKeyRange) : source.count(); + req.onsuccess = wrap(ev => resolve(ev.target.result)); + req.onerror = eventRejectHandler(reject); + }); + } + }; + } + const { schema, hasGetAll } = extractSchema(db, tmpTrans); + const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema)); + const tableMap = {}; + tables.forEach(table => tableMap[table.name] = table); + return { + stack: "dbcore", + transaction: db.transaction.bind(db), + table(name) { + const result = tableMap[name]; + if (!result) + throw new Error(`Table '${name}' not found`); + return tableMap[name]; + }, + MIN_KEY: -Infinity, + MAX_KEY: getMaxKey(IdbKeyRange), + schema + }; +} + +function createMiddlewareStack(stackImpl, middlewares) { + return middlewares.reduce((down, { create }) => ({ ...down, ...create(down) }), stackImpl); +} +function createMiddlewareStacks(middlewares, idbdb, { IDBKeyRange, indexedDB }, tmpTrans) { + const dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); + return { + dbcore + }; +} +function generateMiddlewareStacks(db, tmpTrans) { + const idbdb = tmpTrans.db; + const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans); + db.core = stacks.dbcore; + db.tables.forEach(table => { + const tableName = table.name; + if (db.core.schema.tables.some(tbl => tbl.name === tableName)) { + table.core = db.core.table(tableName); + if (db[tableName] instanceof db.Table) { + db[tableName].core = table.core; + } + } + }); +} + +function setApiOnPlace(db, objs, tableNames, dbschema) { + tableNames.forEach(tableName => { + const schema = dbschema[tableName]; + objs.forEach(obj => { + const propDesc = getPropertyDescriptor(obj, tableName); + if (!propDesc || ("value" in propDesc && propDesc.value === undefined)) { + if (obj === db.Transaction.prototype || obj instanceof db.Transaction) { + setProp(obj, tableName, { + get() { return this.table(tableName); }, + set(value) { + defineProperty(this, tableName, { value, writable: true, configurable: true, enumerable: true }); + } + }); + } + else { + obj[tableName] = new db.Table(tableName, schema); + } + } + }); + }); +} +function removeTablesApi(db, objs) { + objs.forEach(obj => { + for (let key in obj) { + if (obj[key] instanceof db.Table) + delete obj[key]; + } + }); +} +function lowerVersionFirst(a, b) { + return a._cfg.version - b._cfg.version; +} +function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) { + const globalSchema = db._dbSchema; + if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) { + globalSchema.$meta = createTableSchema("$meta", parseIndexSyntax("")[0], []); + db._storeNames.push('$meta'); + } + const trans = db._createTransaction('readwrite', db._storeNames, globalSchema); + trans.create(idbUpgradeTrans); + trans._completion.catch(reject); + const rejectTransaction = trans._reject.bind(trans); + const transless = PSD.transless || PSD; + newScope(() => { + PSD.trans = trans; + PSD.transless = transless; + if (oldVersion === 0) { + keys(globalSchema).forEach(tableName => { + createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + generateMiddlewareStacks(db, idbUpgradeTrans); + DexiePromise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction); + } + else { + generateMiddlewareStacks(db, idbUpgradeTrans); + return getExistingVersion(db, trans, oldVersion) + .then(oldVersion => updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans)) + .catch(rejectTransaction); + } + }); +} +function patchCurrentVersion(db, idbUpgradeTrans) { + createMissingTables(db._dbSchema, idbUpgradeTrans); + if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) { + idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version'); + } + const globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans); + const diff = getSchemaDiff(globalSchema, db._dbSchema); + for (const tableChange of diff.change) { + if (tableChange.change.length || tableChange.recreate) { + console.warn(`Unable to patch indexes of table ${tableChange.name} because it has changes on the type of index or primary key.`); + return; + } + const store = idbUpgradeTrans.objectStore(tableChange.name); + tableChange.add.forEach(idx => { + if (debug) + console.debug(`Dexie upgrade patch: Creating missing index ${tableChange.name}.${idx.src}`); + addIndex(store, idx); + }); + } +} +function getExistingVersion(db, trans, oldVersion) { + if (trans.storeNames.includes('$meta')) { + return trans.table('$meta').get('version').then(metaVersion => { + return metaVersion != null ? metaVersion : oldVersion; + }); + } + else { + return DexiePromise.resolve(oldVersion); + } +} +function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) { + const queue = []; + const versions = db._versions; + let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + const versToRun = versions.filter(v => v._cfg.version >= oldVersion); + if (versToRun.length === 0) { + return DexiePromise.resolve(); + } + versToRun.forEach(version => { + queue.push(() => { + const oldSchema = globalSchema; + const newSchema = version._cfg.dbschema; + adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans); + adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans); + globalSchema = db._dbSchema = newSchema; + const diff = getSchemaDiff(oldSchema, newSchema); + diff.add.forEach(tuple => { + createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + diff.change.forEach(change => { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } + else { + const store = idbUpgradeTrans.objectStore(change.name); + change.add.forEach(idx => addIndex(store, idx)); + change.change.forEach(idx => { + store.deleteIndex(idx.name); + addIndex(store, idx); + }); + change.del.forEach(idxName => store.deleteIndex(idxName)); + } + }); + const contentUpgrade = version._cfg.contentUpgrade; + if (contentUpgrade && version._cfg.version > oldVersion) { + generateMiddlewareStacks(db, idbUpgradeTrans); + trans._memoizedTables = {}; + let upgradeSchema = shallowClone(newSchema); + diff.del.forEach(table => { + upgradeSchema[table] = oldSchema[table]; + }); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema); + trans.schema = upgradeSchema; + const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade); + if (contentUpgradeIsAsync) { + incrementExpectedAwaits(); + } + let returnValue; + const promiseFollowed = DexiePromise.follow(() => { + returnValue = contentUpgrade(trans); + if (returnValue) { + if (contentUpgradeIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + } + }); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue) : promiseFollowed.then(() => returnValue)); + } + }); + queue.push(idbtrans => { + const newSchema = version._cfg.dbschema; + deleteRemovedTables(newSchema, idbtrans); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema); + trans.schema = db._dbSchema; + }); + queue.push(idbtrans => { + if (db.idbdb.objectStoreNames.contains('$meta')) { + if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) { + db.idbdb.deleteObjectStore('$meta'); + delete db._dbSchema.$meta; + db._storeNames = db._storeNames.filter(name => name !== '$meta'); + } + else { + idbtrans.objectStore('$meta').put(version._cfg.version, 'version'); + } + } + }); + }); + function runQueue() { + return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : + DexiePromise.resolve(); + } + return runQueue().then(() => { + createMissingTables(globalSchema, idbUpgradeTrans); + }); +} +function getSchemaDiff(oldSchema, newSchema) { + const diff = { + del: [], + add: [], + change: [] + }; + let table; + for (table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + const oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } + else { + const change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if (( + '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) || + (oldDef.primKey.auto !== newDef.primKey.auto)) { + change.recreate = true; + diff.change.push(change); + } + else { + const oldIndexes = oldDef.idxByName; + const newIndexes = newDef.idxByName; + let idxName; + for (idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + const oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; +} +function createTable(idbtrans, tableName, primKey, indexes) { + const store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? + { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : + { autoIncrement: primKey.auto }); + indexes.forEach(idx => addIndex(store, idx)); + return store; +} +function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach(tableName => { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + if (debug) + console.debug('Dexie: Creating missing table', tableName); + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); +} +function deleteRemovedTables(newSchema, idbtrans) { + [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName => newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName)); +} +function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); +} +function buildGlobalSchema(db, idbdb, tmpTrans) { + const globalSchema = {}; + const dbStoreNames = slice(idbdb.objectStoreNames, 0); + dbStoreNames.forEach(storeName => { + const store = tmpTrans.objectStore(storeName); + let keyPath = store.keyPath; + const primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", true, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); + const indexes = []; + for (let j = 0; j < store.indexNames.length; ++j) { + const idbindex = store.index(store.indexNames[j]); + keyPath = idbindex.keyPath; + var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); + indexes.push(index); + } + globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); + }); + return globalSchema; +} +function readGlobalSchema(db, idbdb, tmpTrans) { + db.verno = idbdb.version / 10; + const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans); + db._storeNames = slice(idbdb.objectStoreNames, 0); + setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema); +} +function verifyInstalledSchema(db, tmpTrans) { + const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans); + const diff = getSchemaDiff(installedSchema, db._dbSchema); + return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length)); +} +function adjustToExistingIndexNames(db, schema, idbtrans) { + const storeNames = idbtrans.db.objectStoreNames; + for (let i = 0; i < storeNames.length; ++i) { + const storeName = storeNames[i]; + const store = idbtrans.objectStore(storeName); + db._hasGetAll = 'getAll' in store; + for (let j = 0; j < store.indexNames.length; ++j) { + const indexName = store.indexNames[j]; + const keyPath = store.index(indexName).keyPath; + const dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; + if (schema[storeName]) { + const indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) { + indexSpec.name = indexName; + delete schema[storeName].idxByName[dexieName]; + schema[storeName].idxByName[indexName] = indexSpec; + } + } + } + } + if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + db._hasGetAll = false; + } +} +function parseIndexSyntax(primKeyAndIndexes) { + return primKeyAndIndexes.split(',').map((index, indexNum) => { + index = index.trim(); + const name = index.replace(/([&*]|\+\+)/g, ""); + const keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; + return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0); + }); +} + +class Version { + _parseStoresSpec(stores, outSchema) { + keys(stores).forEach(tableName => { + if (stores[tableName] !== null) { + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + primKey.unique = true; + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + indexes.forEach(idx => { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + }); + outSchema[tableName] = createTableSchema(tableName, primKey, indexes); + } + }); + } + stores(stores) { + const db = this.db; + this._cfg.storesSource = this._cfg.storesSource ? + extend(this._cfg.storesSource, stores) : + stores; + const versions = db._versions; + const storesSpec = {}; + let dbschema = {}; + versions.forEach(version => { + extend(storesSpec, version._cfg.storesSource); + dbschema = (version._cfg.dbschema = {}); + version._parseStoresSpec(storesSpec, dbschema); + }); + db._dbSchema = dbschema; + removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]); + setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + db._storeNames = keys(dbschema); + return this; + } + upgrade(upgradeFunction) { + this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); + return this; + } +} + +function createVersionConstructor(db) { + return makeClassConstructor(Version.prototype, function Version(versionNumber) { + this.db = db; + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + }); +} + +function getDbNamesTable(indexedDB, IDBKeyRange) { + let dbNamesDB = indexedDB["_dbNamesDB"]; + if (!dbNamesDB) { + dbNamesDB = indexedDB["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { + addons: [], + indexedDB, + IDBKeyRange, + }); + dbNamesDB.version(1).stores({ dbnames: "name" }); + } + return dbNamesDB.table("dbnames"); +} +function hasDatabasesNative(indexedDB) { + return indexedDB && typeof indexedDB.databases === "function"; +} +function getDatabaseNames({ indexedDB, IDBKeyRange, }) { + return hasDatabasesNative(indexedDB) + ? Promise.resolve(indexedDB.databases()).then((infos) => infos + .map((info) => info.name) + .filter((name) => name !== DBNAMES_DB)) + : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys(); +} +function _onDatabaseCreated({ indexedDB, IDBKeyRange }, name) { + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).put({ name }).catch(nop); +} +function _onDatabaseDeleted({ indexedDB, IDBKeyRange }, name) { + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop); +} + +function vip(fn) { + return newScope(function () { + PSD.letThrough = true; + return fn(); + }); +} + +function idbReady() { + var isSafari = !navigator.userAgentData && + /Safari\//.test(navigator.userAgent) && + !/Chrom(e|ium)\//.test(navigator.userAgent); + if (!isSafari || !indexedDB.databases) + return Promise.resolve(); + var intervalId; + return new Promise(function (resolve) { + var tryIdb = function () { return indexedDB.databases().finally(resolve); }; + intervalId = setInterval(tryIdb, 100); + tryIdb(); + }).finally(function () { return clearInterval(intervalId); }); +} + +function isEmptyRange(node) { + return !("from" in node); +} +const RangeSet = function (fromOrTree, to) { + if (this) { + extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 }); + } + else { + const rv = new RangeSet(); + if (fromOrTree && ("d" in fromOrTree)) { + extend(rv, fromOrTree); + } + return rv; + } +}; +props(RangeSet.prototype, { + add(rangeSet) { + mergeRanges(this, rangeSet); + return this; + }, + addKey(key) { + addRange(this, key, key); + return this; + }, + addKeys(keys) { + keys.forEach(key => addRange(this, key, key)); + return this; + }, + [iteratorSymbol]() { + return getRangeSetIterator(this); + } +}); +function addRange(target, from, to) { + const diff = cmp(from, to); + if (isNaN(diff)) + return; + if (diff > 0) + throw RangeError(); + if (isEmptyRange(target)) + return extend(target, { from, to, d: 1 }); + const left = target.l; + const right = target.r; + if (cmp(to, target.from) < 0) { + left + ? addRange(left, from, to) + : (target.l = { from, to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.to) > 0) { + right + ? addRange(right, from, to) + : (target.r = { from, to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.from) < 0) { + target.from = from; + target.l = null; + target.d = right ? right.d + 1 : 1; + } + if (cmp(to, target.to) > 0) { + target.to = to; + target.r = null; + target.d = target.l ? target.l.d + 1 : 1; + } + const rightWasCutOff = !target.r; + if (left && !target.l) { + mergeRanges(target, left); + } + if (right && rightWasCutOff) { + mergeRanges(target, right); + } +} +function mergeRanges(target, newSet) { + function _addRangeSet(target, { from, to, l, r }) { + addRange(target, from, to); + if (l) + _addRangeSet(target, l); + if (r) + _addRangeSet(target, r); + } + if (!isEmptyRange(newSet)) + _addRangeSet(target, newSet); +} +function rangesOverlap(rangeSet1, rangeSet2) { + const i1 = getRangeSetIterator(rangeSet2); + let nextResult1 = i1.next(); + if (nextResult1.done) + return false; + let a = nextResult1.value; + const i2 = getRangeSetIterator(rangeSet1); + let nextResult2 = i2.next(a.from); + let b = nextResult2.value; + while (!nextResult1.done && !nextResult2.done) { + if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0) + return true; + cmp(a.from, b.from) < 0 + ? (a = (nextResult1 = i1.next(b.from)).value) + : (b = (nextResult2 = i2.next(a.from)).value); + } + return false; +} +function getRangeSetIterator(node) { + let state = isEmptyRange(node) ? null : { s: 0, n: node }; + return { + next(key) { + const keyProvided = arguments.length > 0; + while (state) { + switch (state.s) { + case 0: + state.s = 1; + if (keyProvided) { + while (state.n.l && cmp(key, state.n.from) < 0) + state = { up: state, n: state.n.l, s: 1 }; + } + else { + while (state.n.l) + state = { up: state, n: state.n.l, s: 1 }; + } + case 1: + state.s = 2; + if (!keyProvided || cmp(key, state.n.to) <= 0) + return { value: state.n, done: false }; + case 2: + if (state.n.r) { + state.s = 3; + state = { up: state, n: state.n.r, s: 0 }; + continue; + } + case 3: + state = state.up; + } + } + return { done: true }; + }, + }; +} +function rebalance(target) { + const diff = (target.r?.d || 0) - (target.l?.d || 0); + const r = diff > 1 ? "r" : diff < -1 ? "l" : ""; + if (r) { + const l = r === "r" ? "l" : "r"; + const rootClone = { ...target }; + const oldRootRight = target[r]; + target.from = oldRootRight.from; + target.to = oldRootRight.to; + target[r] = oldRootRight[r]; + rootClone[r] = oldRootRight[l]; + target[l] = rootClone; + rootClone.d = computeDepth(rootClone); + } + target.d = computeDepth(target); +} +function computeDepth({ r, l }) { + return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1; +} + +function extendObservabilitySet(target, newSet) { + keys(newSet).forEach(part => { + if (target[part]) + mergeRanges(target[part], newSet[part]); + else + target[part] = cloneSimpleObjectTree(newSet[part]); + }); + return target; +} + +function obsSetsOverlap(os1, os2) { + return os1.all || os2.all || Object.keys(os1).some((key) => os2[key] && rangesOverlap(os2[key], os1[key])); +} + +const cache = {}; + +let unsignaledParts = {}; +let isTaskEnqueued = false; +function signalSubscribersLazily(part, optimistic = false) { + extendObservabilitySet(unsignaledParts, part); + if (!isTaskEnqueued) { + isTaskEnqueued = true; + setTimeout(() => { + isTaskEnqueued = false; + const parts = unsignaledParts; + unsignaledParts = {}; + signalSubscribersNow(parts, false); + }, 0); + } +} +function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries = false) { + const queriesToSignal = new Set(); + if (updatedParts.all) { + for (const tblCache of Object.values(cache)) { + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + else { + for (const key in updatedParts) { + const parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key); + if (parts) { + const [, dbName, tableName] = parts; + const tblCache = cache[`idb://${dbName}/${tableName}`]; + if (tblCache) + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + } + queriesToSignal.forEach((requery) => requery()); +} +function collectTableSubscribers(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) { + const updatedEntryLists = []; + for (const [indexName, entries] of Object.entries(tblCache.queries.query)) { + const filteredEntries = []; + for (const entry of entries) { + if (obsSetsOverlap(updatedParts, entry.obsSet)) { + entry.subscribers.forEach((requery) => outQueriesToSignal.add(requery)); + } + else if (deleteAffectedCacheEntries) { + filteredEntries.push(entry); + } + } + if (deleteAffectedCacheEntries) + updatedEntryLists.push([indexName, filteredEntries]); + } + if (deleteAffectedCacheEntries) { + for (const [indexName, filteredEntries] of updatedEntryLists) { + tblCache.queries.query[indexName] = filteredEntries; + } + } +} + +function dexieOpen(db) { + const state = db._state; + const { indexedDB } = db._deps; + if (state.isBeingOpened || db.idbdb) + return state.dbReadyPromise.then(() => state.dbOpenError ? + rejection(state.dbOpenError) : + db); + state.isBeingOpened = true; + state.dbOpenError = null; + state.openComplete = false; + const openCanceller = state.openCanceller; + let nativeVerToOpen = Math.round(db.verno * 10); + let schemaPatchMode = false; + function throwIfCancelled() { + if (state.openCanceller !== openCanceller) + throw new exceptions.DatabaseClosed('db.open() was cancelled'); + } + let resolveDbReady = state.dbReadyResolve, + upgradeTransaction = null, wasCreated = false; + const tryOpenDB = () => new DexiePromise((resolve, reject) => { + throwIfCancelled(); + if (!indexedDB) + throw new exceptions.MissingAPI(); + const dbName = db.name; + const req = state.autoSchema || !nativeVerToOpen ? + indexedDB.open(dbName) : + indexedDB.open(dbName, nativeVerToOpen); + if (!req) + throw new exceptions.MissingAPI(); + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(db._fireOnBlocked); + req.onupgradeneeded = wrap(e => { + upgradeTransaction = req.transaction; + if (state.autoSchema && !db._options.allowEmptyDB) { + req.onerror = preventDefault; + upgradeTransaction.abort(); + req.result.close(); + const delreq = indexedDB.deleteDatabase(dbName); + delreq.onsuccess = delreq.onerror = wrap(() => { + reject(new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`)); + }); + } + else { + upgradeTransaction.onerror = eventRejectHandler(reject); + const oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; + wasCreated = oldVer < 1; + db.idbdb = req.result; + if (schemaPatchMode) { + patchCurrentVersion(db, upgradeTransaction); + } + runUpgraders(db, oldVer / 10, upgradeTransaction, reject); + } + }, reject); + req.onsuccess = wrap(() => { + upgradeTransaction = null; + const idbdb = db.idbdb = req.result; + const objectStoreNames = slice(idbdb.objectStoreNames); + if (objectStoreNames.length > 0) + try { + const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly'); + if (state.autoSchema) + readGlobalSchema(db, idbdb, tmpTrans); + else { + adjustToExistingIndexNames(db, db._dbSchema, tmpTrans); + if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) { + console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this.`); + idbdb.close(); + nativeVerToOpen = idbdb.version + 1; + schemaPatchMode = true; + return resolve(tryOpenDB()); + } + } + generateMiddlewareStacks(db, tmpTrans); + } + catch (e) { + } + connections.push(db); + idbdb.onversionchange = wrap(ev => { + state.vcFired = true; + db.on("versionchange").fire(ev); + }); + idbdb.onclose = wrap(ev => { + db.on("close").fire(ev); + }); + if (wasCreated) + _onDatabaseCreated(db._deps, dbName); + resolve(); + }, reject); + }).catch(err => { + switch (err?.name) { + case "UnknownError": + if (state.PR1398_maxLoop > 0) { + state.PR1398_maxLoop--; + console.warn('Dexie: Workaround for Chrome UnknownError on open()'); + return tryOpenDB(); + } + break; + case "VersionError": + if (nativeVerToOpen > 0) { + nativeVerToOpen = 0; + return tryOpenDB(); + } + break; + } + return DexiePromise.reject(err); + }); + return DexiePromise.race([ + openCanceller, + (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(tryOpenDB) + ]).then(() => { + throwIfCancelled(); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(() => db.on.ready.fire(db.vip))).then(function fireRemainders() { + if (state.onReadyBeingFired.length > 0) { + let remainders = state.onReadyBeingFired.reduce(promisableChain, nop); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(() => remainders(db.vip))).then(fireRemainders); + } + }); + }).finally(() => { + if (state.openCanceller === openCanceller) { + state.onReadyBeingFired = null; + state.isBeingOpened = false; + } + }).catch(err => { + state.dbOpenError = err; + try { + upgradeTransaction && upgradeTransaction.abort(); + } + catch { } + if (openCanceller === state.openCanceller) { + db._close(); + } + return rejection(err); + }).finally(() => { + state.openComplete = true; + resolveDbReady(); + }).then(() => { + if (wasCreated) { + const everything = {}; + db.tables.forEach(table => { + table.schema.indexes.forEach(idx => { + if (idx.name) + everything[`idb://${db.name}/${table.name}/${idx.name}`] = new RangeSet(-Infinity, [[[]]]); + }); + everything[`idb://${db.name}/${table.name}/`] = everything[`idb://${db.name}/${table.name}/:dels`] = new RangeSet(-Infinity, [[[]]]); + }); + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything); + signalSubscribersNow(everything, true); + } + return db; + }); +} + +function awaitIterator(iterator) { + var callNext = result => iterator.next(result), doThrow = error => iterator.throw(error), onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return (val) => { + var next = getNext(val), value = next.value; + return next.done ? value : + (!value || typeof value.then !== 'function' ? + isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : + value.then(onSuccess, onError)); + }; + } + return step(callNext)(); +} + +function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + var i = arguments.length; + if (i < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + var args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + scopeFunc = args.pop(); + var tables = flatten(args); + return [mode, tables, scopeFunc]; +} +function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) { + return DexiePromise.resolve().then(() => { + const transless = PSD.transless || PSD; + const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction); + trans.explicit = true; + const zoneProps = { + trans: trans, + transless: transless + }; + if (parentTransaction) { + trans.idbtrans = parentTransaction.idbtrans; + } + else { + try { + trans.create(); + trans.idbtrans._explicit = true; + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(() => enterTransactionScope(db, mode, storeNames, null, scopeFunc)); + } + return rejection(ex); + } + } + const scopeFuncIsAsync = isAsyncFunction(scopeFunc); + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + let returnValue; + const promiseFollowed = DexiePromise.follow(() => { + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (scopeFuncIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue).then(x => trans.active ? + x + : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn"))) + : promiseFollowed.then(() => returnValue)).then(x => { + if (parentTransaction) + trans._resolve(); + return trans._completion.then(() => x); + }).catch(e => { + trans._reject(e); + return rejection(e); + }); + }); +} + +function pad(a, value, count) { + const result = isArray(a) ? a.slice() : [a]; + for (let i = 0; i < count; ++i) + result.push(value); + return result; +} +function createVirtualIndexMiddleware(down) { + return { + ...down, + table(tableName) { + const table = down.table(tableName); + const { schema } = table; + const indexLookup = {}; + const allVirtualIndexes = []; + function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { + const keyPathAlias = getKeyPathAlias(keyPath); + const indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []); + const keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length; + const isVirtual = keyTail > 0; + const virtualIndex = { + ...lowLevelIndex, + name: isVirtual + ? `${keyPathAlias}(virtual-from:${lowLevelIndex.name})` + : lowLevelIndex.name, + lowLevelIndex, + isVirtual, + keyTail, + keyLength, + extractKey: getKeyExtractor(keyPath), + unique: !isVirtual && lowLevelIndex.unique + }; + indexList.push(virtualIndex); + if (!virtualIndex.isPrimaryKey) { + allVirtualIndexes.push(virtualIndex); + } + if (keyLength > 1) { + const virtualKeyPath = keyLength === 2 ? + keyPath[0] : + keyPath.slice(0, keyLength - 1); + addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); + } + indexList.sort((a, b) => a.keyTail - b.keyTail); + return virtualIndex; + } + const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); + indexLookup[":id"] = [primaryKey]; + for (const index of schema.indexes) { + addVirtualIndexes(index.keyPath, 0, index); + } + function findBestIndex(keyPath) { + const result = indexLookup[getKeyPathAlias(keyPath)]; + return result && result[0]; + } + function translateRange(range, keyTail) { + return { + type: range.type === 1 ? + 2 : + range.type, + lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), + lowerOpen: true, + upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), + upperOpen: true + }; + } + function translateRequest(req) { + const index = req.query.index; + return index.isVirtual ? { + ...req, + query: { + index: index.lowLevelIndex, + range: translateRange(req.query.range, index.keyTail) + } + } : req; + } + const result = { + ...table, + schema: { + ...schema, + primaryKey, + indexes: allVirtualIndexes, + getIndexByKeyPath: findBestIndex + }, + count(req) { + return table.count(translateRequest(req)); + }, + query(req) { + return table.query(translateRequest(req)); + }, + openCursor(req) { + const { keyTail, isVirtual, keyLength } = req.query.index; + if (!isVirtual) + return table.openCursor(req); + function createVirtualCursor(cursor) { + function _continue(key) { + key != null ? + cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : + req.unique ? + cursor.continue(cursor.key.slice(0, keyLength) + .concat(req.reverse + ? down.MIN_KEY + : down.MAX_KEY, keyTail)) : + cursor.continue(); + } + const virtualCursor = Object.create(cursor, { + continue: { value: _continue }, + continuePrimaryKey: { + value(key, primaryKey) { + cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey); + } + }, + primaryKey: { + get() { + return cursor.primaryKey; + } + }, + key: { + get() { + const key = cursor.key; + return keyLength === 1 ? + key[0] : + key.slice(0, keyLength); + } + }, + value: { + get() { + return cursor.value; + } + } + }); + return virtualCursor; + } + return table.openCursor(translateRequest(req)) + .then(cursor => cursor && createVirtualCursor(cursor)); + } + }; + return result; + } + }; +} +const virtualIndexMiddleware = { + stack: "dbcore", + name: "VirtualIndexMiddleware", + level: 1, + create: createVirtualIndexMiddleware +}; + +function getObjectDiff(a, b, rv, prfx) { + rv = rv || {}; + prfx = prfx || ''; + keys(a).forEach((prop) => { + if (!hasOwn(b, prop)) { + rv[prfx + prop] = undefined; + } + else { + var ap = a[prop], bp = b[prop]; + if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) { + const apTypeName = toStringTag(ap); + const bpTypeName = toStringTag(bp); + if (apTypeName !== bpTypeName) { + rv[prfx + prop] = b[prop]; + } + else if (apTypeName === 'Object') { + getObjectDiff(ap, bp, rv, prfx + prop + '.'); + } + else if (ap !== bp) { + rv[prfx + prop] = b[prop]; + } + } + else if (ap !== bp) + rv[prfx + prop] = b[prop]; + } + }); + keys(b).forEach((prop) => { + if (!hasOwn(a, prop)) { + rv[prfx + prop] = b[prop]; + } + }); + return rv; +} + +function getEffectiveKeys(primaryKey, req) { + if (req.type === 'delete') + return req.keys; + return req.keys || req.values.map(primaryKey.extractKey); +} + +const hooksMiddleware = { + stack: "dbcore", + name: "HooksMiddleware", + level: 2, + create: (downCore) => ({ + ...downCore, + table(tableName) { + const downTable = downCore.table(tableName); + const { primaryKey } = downTable.schema; + const tableMiddleware = { + ...downTable, + mutate(req) { + const dxTrans = PSD.trans; + const { deleting, creating, updating } = dxTrans.table(tableName).hook; + switch (req.type) { + case 'add': + if (creating.fire === nop) + break; + return dxTrans._promise('readwrite', () => addPutOrDelete(req), true); + case 'put': + if (creating.fire === nop && updating.fire === nop) + break; + return dxTrans._promise('readwrite', () => addPutOrDelete(req), true); + case 'delete': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', () => addPutOrDelete(req), true); + case 'deleteRange': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', () => deleteRange(req), true); + } + return downTable.mutate(req); + function addPutOrDelete(req) { + const dxTrans = PSD.trans; + const keys = req.keys || getEffectiveKeys(primaryKey, req); + if (!keys) + throw new Error("Keys missing"); + req = req.type === 'add' || req.type === 'put' ? + { ...req, keys } : + { ...req }; + if (req.type !== 'delete') + req.values = [...req.values]; + if (req.keys) + req.keys = [...req.keys]; + return getExistingValues(downTable, req, keys).then(existingValues => { + const contexts = keys.map((key, i) => { + const existingValue = existingValues[i]; + const ctx = { onerror: null, onsuccess: null }; + if (req.type === 'delete') { + deleting.fire.call(ctx, key, existingValue, dxTrans); + } + else if (req.type === 'add' || existingValue === undefined) { + const generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans); + if (key == null && generatedPrimaryKey != null) { + key = generatedPrimaryKey; + req.keys[i] = key; + if (!primaryKey.outbound) { + setByKeyPath(req.values[i], primaryKey.keyPath, key); + } + } + } + else { + const objectDiff = getObjectDiff(existingValue, req.values[i]); + const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans); + if (additionalChanges) { + const requestedValue = req.values[i]; + Object.keys(additionalChanges).forEach(keyPath => { + if (hasOwn(requestedValue, keyPath)) { + requestedValue[keyPath] = additionalChanges[keyPath]; + } + else { + setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]); + } + }); + } + } + return ctx; + }); + return downTable.mutate(req).then(({ failures, results, numFailures, lastResult }) => { + for (let i = 0; i < keys.length; ++i) { + const primKey = results ? results[i] : keys[i]; + const ctx = contexts[i]; + if (primKey == null) { + ctx.onerror && ctx.onerror(failures[i]); + } + else { + ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ? + req.values[i] : + primKey + ); + } + } + return { failures, results, numFailures, lastResult }; + }).catch(error => { + contexts.forEach(ctx => ctx.onerror && ctx.onerror(error)); + return Promise.reject(error); + }); + }); + } + function deleteRange(req) { + return deleteNextChunk(req.trans, req.range, 10000); + } + function deleteNextChunk(trans, range, limit) { + return downTable.query({ trans, values: false, query: { index: primaryKey, range }, limit }) + .then(({ result }) => { + return addPutOrDelete({ type: 'delete', keys: result, trans }).then(res => { + if (res.numFailures > 0) + return Promise.reject(res.failures[0]); + if (result.length < limit) { + return { failures: [], numFailures: 0, lastResult: undefined }; + } + else { + return deleteNextChunk(trans, { ...range, lower: result[result.length - 1], lowerOpen: true }, limit); + } + }); + }); + } + } + }; + return tableMiddleware; + }, + }) +}; +function getExistingValues(table, req, effectiveKeys) { + return req.type === "add" + ? Promise.resolve([]) + : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: "immutable" }); +} + +function getFromTransactionCache(keys, cache, clone) { + try { + if (!cache) + return null; + if (cache.keys.length < keys.length) + return null; + const result = []; + for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) { + if (cmp(cache.keys[i], keys[j]) !== 0) + continue; + result.push(clone ? deepClone(cache.values[i]) : cache.values[i]); + ++j; + } + return result.length === keys.length ? result : null; + } + catch { + return null; + } +} +const cacheExistingValuesMiddleware = { + stack: "dbcore", + level: -1, + create: (core) => { + return { + table: (tableName) => { + const table = core.table(tableName); + return { + ...table, + getMany: (req) => { + if (!req.cache) { + return table.getMany(req); + } + const cachedResult = getFromTransactionCache(req.keys, req.trans["_cache"], req.cache === "clone"); + if (cachedResult) { + return DexiePromise.resolve(cachedResult); + } + return table.getMany(req).then((res) => { + req.trans["_cache"] = { + keys: req.keys, + values: req.cache === "clone" ? deepClone(res) : res, + }; + return res; + }); + }, + mutate: (req) => { + if (req.type !== "add") + req.trans["_cache"] = null; + return table.mutate(req); + }, + }; + }, + }; + }, +}; + +function isCachableContext(ctx, table) { + return (ctx.trans.mode === 'readonly' && + !!ctx.subscr && + !ctx.trans.explicit && + ctx.trans.db._options.cache !== 'disabled' && + !table.schema.primaryKey.outbound); +} + +function isCachableRequest(type, req) { + switch (type) { + case 'query': + return req.values && !req.unique; + case 'get': + return false; + case 'getMany': + return false; + case 'count': + return false; + case 'openCursor': + return false; + } +} + +const observabilityMiddleware = { + stack: "dbcore", + level: 0, + name: "Observability", + create: (core) => { + const dbName = core.schema.name; + const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY); + return { + ...core, + transaction: (stores, mode, options) => { + if (PSD.subscr && mode !== 'readonly') { + throw new exceptions.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${PSD.querier}`); + } + return core.transaction(stores, mode, options); + }, + table: (tableName) => { + const table = core.table(tableName); + const { schema } = table; + const { primaryKey, indexes } = schema; + const { extractKey, outbound } = primaryKey; + const indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter((index) => index.compound && index.keyPath.includes(primaryKey.keyPath)); + const tableClone = { + ...table, + mutate: (req) => { + const trans = req.trans; + const mutatedParts = req.mutatedParts || (req.mutatedParts = {}); + const getRangeSet = (indexName) => { + const part = `idb://${dbName}/${tableName}/${indexName}`; + return (mutatedParts[part] || + (mutatedParts[part] = new RangeSet())); + }; + const pkRangeSet = getRangeSet(""); + const delsRangeSet = getRangeSet(":dels"); + const { type } = req; + let [keys, newObjs] = req.type === "deleteRange" + ? [req.range] + : req.type === "delete" + ? [req.keys] + : req.values.length < 50 + ? [getEffectiveKeys(primaryKey, req).filter(id => id), req.values] + : []; + const oldCache = req.trans["_cache"]; + if (isArray(keys)) { + pkRangeSet.addKeys(keys); + const oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null; + if (!oldObjs) { + delsRangeSet.addKeys(keys); + } + if (oldObjs || newObjs) { + trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs); + } + } + else if (keys) { + const range = { from: keys.lower, to: keys.upper }; + delsRangeSet.add(range); + pkRangeSet.add(range); + } + else { + pkRangeSet.add(FULL_RANGE); + delsRangeSet.add(FULL_RANGE); + schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE)); + } + return table.mutate(req).then((res) => { + if (keys && (req.type === 'add' || req.type === 'put')) { + pkRangeSet.addKeys(res.results); + if (indexesWithAutoIncPK) { + indexesWithAutoIncPK.forEach(idx => { + const idxVals = req.values.map(v => idx.extractKey(v)); + const pkPos = idx.keyPath.findIndex(prop => prop === primaryKey.keyPath); + res.results.forEach(pk => idxVals[pkPos] = pk); + getRangeSet(idx.name).addKeys(idxVals); + }); + } + } + trans.mutatedParts = extendObservabilitySet(trans.mutatedParts || {}, mutatedParts); + return res; + }); + }, + }; + const getRange = ({ query: { index, range }, }) => [ + index, + new RangeSet(range.lower ?? core.MIN_KEY, range.upper ?? core.MAX_KEY), + ]; + const readSubscribers = { + get: (req) => [primaryKey, new RangeSet(req.key)], + getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)], + count: getRange, + query: getRange, + openCursor: getRange, + }; + keys(readSubscribers).forEach((method) => { + tableClone[method] = function (req) { + const { subscr } = PSD; + const isLiveQuery = !!subscr; + let cachable = isCachableContext(PSD, table) && isCachableRequest(method, req); + const obsSet = cachable + ? req.obsSet = {} + : subscr; + if (isLiveQuery) { + const getRangeSet = (indexName) => { + const part = `idb://${dbName}/${tableName}/${indexName}`; + return (obsSet[part] || + (obsSet[part] = new RangeSet())); + }; + const pkRangeSet = getRangeSet(""); + const delsRangeSet = getRangeSet(":dels"); + const [queriedIndex, queriedRanges] = readSubscribers[method](req); + if (method === 'query' && queriedIndex.isPrimaryKey && !req.values) { + delsRangeSet.add(queriedRanges); + } + else { + getRangeSet(queriedIndex.name || "").add(queriedRanges); + } + if (!queriedIndex.isPrimaryKey) { + if (method === "count") { + delsRangeSet.add(FULL_RANGE); + } + else { + const keysPromise = method === "query" && + outbound && + req.values && + table.query({ + ...req, + values: false, + }); + return table[method].apply(this, arguments).then((res) => { + if (method === "query") { + if (outbound && req.values) { + return keysPromise.then(({ result: resultingKeys }) => { + pkRangeSet.addKeys(resultingKeys); + return res; + }); + } + const pKeys = req.values + ? res.result.map(extractKey) + : res.result; + if (req.values) { + pkRangeSet.addKeys(pKeys); + } + else { + delsRangeSet.addKeys(pKeys); + } + } + else if (method === "openCursor") { + const cursor = res; + const wantValues = req.values; + return (cursor && + Object.create(cursor, { + key: { + get() { + delsRangeSet.addKey(cursor.primaryKey); + return cursor.key; + }, + }, + primaryKey: { + get() { + const pkey = cursor.primaryKey; + delsRangeSet.addKey(pkey); + return pkey; + }, + }, + value: { + get() { + wantValues && pkRangeSet.addKey(cursor.primaryKey); + return cursor.value; + }, + }, + })); + } + return res; + }); + } + } + } + return table[method].apply(this, arguments); + }; + }); + return tableClone; + }, + }; + }, +}; +function trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) { + function addAffectedIndex(ix) { + const rangeSet = getRangeSet(ix.name || ""); + function extractKey(obj) { + return obj != null ? ix.extractKey(obj) : null; + } + const addKeyOrKeys = (key) => ix.multiEntry && isArray(key) + ? key.forEach(key => rangeSet.addKey(key)) + : rangeSet.addKey(key); + (oldObjs || newObjs).forEach((_, i) => { + const oldKey = oldObjs && extractKey(oldObjs[i]); + const newKey = newObjs && extractKey(newObjs[i]); + if (cmp(oldKey, newKey) !== 0) { + if (oldKey != null) + addKeyOrKeys(oldKey); + if (newKey != null) + addKeyOrKeys(newKey); + } + }); + } + schema.indexes.forEach(addAffectedIndex); +} + +function adjustOptimisticFromFailures(tblCache, req, res) { + if (res.numFailures === 0) + return req; + if (req.type === 'deleteRange') { + return null; + } + const numBulkOps = req.keys + ? req.keys.length + : 'values' in req && req.values + ? req.values.length + : 1; + if (res.numFailures === numBulkOps) { + return null; + } + const clone = { ...req }; + if (isArray(clone.keys)) { + clone.keys = clone.keys.filter((_, i) => !(i in res.failures)); + } + if ('values' in clone && isArray(clone.values)) { + clone.values = clone.values.filter((_, i) => !(i in res.failures)); + } + return clone; +} + +function isAboveLower(key, range) { + return range.lower === undefined + ? true + : range.lowerOpen + ? cmp(key, range.lower) > 0 + : cmp(key, range.lower) >= 0; +} +function isBelowUpper(key, range) { + return range.upper === undefined + ? true + : range.upperOpen + ? cmp(key, range.upper) < 0 + : cmp(key, range.upper) <= 0; +} +function isWithinRange(key, range) { + return isAboveLower(key, range) && isBelowUpper(key, range); +} + +function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) { + if (!ops || ops.length === 0) + return result; + const index = req.query.index; + const { multiEntry } = index; + const queryRange = req.query.range; + const primaryKey = table.schema.primaryKey; + const extractPrimKey = primaryKey.extractKey; + const extractIndex = index.extractKey; + const extractLowLevelIndex = (index.lowLevelIndex || index).extractKey; + let finalResult = ops.reduce((result, op) => { + let modifedResult = result; + const includedValues = op.type === 'add' || op.type === 'put' + ? op.values.filter((v) => { + const key = extractIndex(v); + return multiEntry && isArray(key) + ? key.some((k) => isWithinRange(k, queryRange)) + : isWithinRange(key, queryRange); + }).map(v => { + v = deepClone(v); + if (immutable) + Object.freeze(v); + return v; + }) + : []; + switch (op.type) { + case 'add': + modifedResult = result.concat(req.values + ? includedValues + : includedValues.map((v) => extractPrimKey(v))); + break; + case 'put': + const keySet = new RangeSet().addKeys(op.values.map((v) => extractPrimKey(v))); + modifedResult = result + .filter((item) => { + const key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keySet); + }) + .concat(req.values + ? includedValues + : includedValues.map((v) => extractPrimKey(v))); + break; + case 'delete': + const keysToDelete = new RangeSet().addKeys(op.keys); + modifedResult = result.filter((item) => { + const key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keysToDelete); + }); + break; + case 'deleteRange': + const range = op.range; + modifedResult = result.filter((item) => !isWithinRange(extractPrimKey(item), range)); + break; + } + return modifedResult; + }, result); + if (finalResult === result) + return result; + finalResult.sort((a, b) => cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) || + cmp(extractPrimKey(a), extractPrimKey(b))); + if (req.limit && req.limit < Infinity) { + if (finalResult.length > req.limit) { + finalResult.length = req.limit; + } + else if (result.length === req.limit && finalResult.length < req.limit) { + cacheEntry.dirty = true; + } + } + return immutable ? Object.freeze(finalResult) : finalResult; +} + +function areRangesEqual(r1, r2) { + return (cmp(r1.lower, r2.lower) === 0 && + cmp(r1.upper, r2.upper) === 0 && + !!r1.lowerOpen === !!r2.lowerOpen && + !!r1.upperOpen === !!r2.upperOpen); +} + +function compareLowers(lower1, lower2, lowerOpen1, lowerOpen2) { + if (lower1 === undefined) + return lower2 !== undefined ? -1 : 0; + if (lower2 === undefined) + return 1; + const c = cmp(lower1, lower2); + if (c === 0) { + if (lowerOpen1 && lowerOpen2) + return 0; + if (lowerOpen1) + return 1; + if (lowerOpen2) + return -1; + } + return c; +} +function compareUppers(upper1, upper2, upperOpen1, upperOpen2) { + if (upper1 === undefined) + return upper2 !== undefined ? 1 : 0; + if (upper2 === undefined) + return -1; + const c = cmp(upper1, upper2); + if (c === 0) { + if (upperOpen1 && upperOpen2) + return 0; + if (upperOpen1) + return -1; + if (upperOpen2) + return 1; + } + return c; +} +function isSuperRange(r1, r2) { + return (compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 && + compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0); +} + +function findCompatibleQuery(dbName, tableName, type, req) { + const tblCache = cache[`idb://${dbName}/${tableName}`]; + if (!tblCache) + return []; + const queries = tblCache.queries[type]; + if (!queries) + return [null, false, tblCache, null]; + const indexName = req.query ? req.query.index.name : null; + const entries = queries[indexName || '']; + if (!entries) + return [null, false, tblCache, null]; + switch (type) { + case 'query': + const equalEntry = entries.find((entry) => entry.req.limit === req.limit && + entry.req.values === req.values && + areRangesEqual(entry.req.query.range, req.query.range)); + if (equalEntry) + return [ + equalEntry, + true, + tblCache, + entries, + ]; + const superEntry = entries.find((entry) => { + const limit = 'limit' in entry.req ? entry.req.limit : Infinity; + return (limit >= req.limit && + (req.values ? entry.req.values : true) && + isSuperRange(entry.req.query.range, req.query.range)); + }); + return [superEntry, false, tblCache, entries]; + case 'count': + const countQuery = entries.find((entry) => areRangesEqual(entry.req.query.range, req.query.range)); + return [countQuery, !!countQuery, tblCache, entries]; + } +} + +function subscribeToCacheEntry(cacheEntry, container, requery, signal) { + cacheEntry.subscribers.add(requery); + signal.addEventListener("abort", () => { + cacheEntry.subscribers.delete(requery); + if (cacheEntry.subscribers.size === 0) { + enqueForDeletion(cacheEntry, container); + } + }); +} +function enqueForDeletion(cacheEntry, container) { + setTimeout(() => { + if (cacheEntry.subscribers.size === 0) { + delArrayItem(container, cacheEntry); + } + }, 3000); +} + +const cacheMiddleware = { + stack: 'dbcore', + level: 0, + name: 'Cache', + create: (core) => { + const dbName = core.schema.name; + const coreMW = { + ...core, + transaction: (stores, mode, options) => { + const idbtrans = core.transaction(stores, mode, options); + if (mode === 'readwrite') { + const ac = new AbortController(); + const { signal } = ac; + const endTransaction = (wasCommitted) => () => { + ac.abort(); + if (mode === 'readwrite') { + const affectedSubscribers = new Set(); + for (const storeName of stores) { + const tblCache = cache[`idb://${dbName}/${storeName}`]; + if (tblCache) { + const table = core.table(storeName); + const ops = tblCache.optimisticOps.filter((op) => op.trans === idbtrans); + if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) { + for (const entries of Object.values(tblCache.queries.query)) { + for (const entry of entries.slice()) { + if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) { + delArrayItem(entries, entry); + entry.subscribers.forEach((requery) => affectedSubscribers.add(requery)); + } + } + } + } + else if (ops.length > 0) { + tblCache.optimisticOps = tblCache.optimisticOps.filter((op) => op.trans !== idbtrans); + for (const entries of Object.values(tblCache.queries.query)) { + for (const entry of entries.slice()) { + if (entry.res != null && + idbtrans.mutatedParts +) { + if (wasCommitted && !entry.dirty) { + const freezeResults = Object.isFrozen(entry.res); + const modRes = applyOptimisticOps(entry.res, entry.req, ops, table, entry, freezeResults); + if (entry.dirty) { + delArrayItem(entries, entry); + entry.subscribers.forEach((requery) => affectedSubscribers.add(requery)); + } + else if (modRes !== entry.res) { + entry.res = modRes; + entry.promise = DexiePromise.resolve({ result: modRes }); + } + } + else { + if (entry.dirty) { + delArrayItem(entries, entry); + } + entry.subscribers.forEach((requery) => affectedSubscribers.add(requery)); + } + } + } + } + } + } + } + affectedSubscribers.forEach((requery) => requery()); + } + }; + idbtrans.addEventListener('abort', endTransaction(false), { + signal, + }); + idbtrans.addEventListener('error', endTransaction(false), { + signal, + }); + idbtrans.addEventListener('complete', endTransaction(true), { + signal, + }); + } + return idbtrans; + }, + table(tableName) { + const downTable = core.table(tableName); + const primKey = downTable.schema.primaryKey; + const tableMW = { + ...downTable, + mutate(req) { + const trans = PSD.trans; + if (primKey.outbound || + trans.db._options.cache === 'disabled' || + trans.explicit + ) { + return downTable.mutate(req); + } + const tblCache = cache[`idb://${dbName}/${tableName}`]; + if (!tblCache) + return downTable.mutate(req); + const promise = downTable.mutate(req); + if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(key => key == null))) { + promise.then((res) => { + const reqWithResolvedKeys = { + ...req, + values: req.values.map((value, i) => { + const valueWithKey = primKey.keyPath?.includes('.') + ? deepClone(value) + : { + ...value, + }; + setByKeyPath(valueWithKey, primKey.keyPath, res.results[i]); + return valueWithKey; + }) + }; + const adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res); + tblCache.optimisticOps.push(adjustedReq); + queueMicrotask(() => req.mutatedParts && signalSubscribersLazily(req.mutatedParts)); + }); + } + else { + tblCache.optimisticOps.push(req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + promise.then((res) => { + if (res.numFailures > 0) { + delArrayItem(tblCache.optimisticOps, req); + const adjustedReq = adjustOptimisticFromFailures(tblCache, req, res); + if (adjustedReq) { + tblCache.optimisticOps.push(adjustedReq); + } + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + } + }); + promise.catch(() => { + delArrayItem(tblCache.optimisticOps, req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + }); + } + return promise; + }, + query(req) { + if (!isCachableContext(PSD, downTable) || !isCachableRequest("query", req)) + return downTable.query(req); + const freezeResults = PSD.trans?.db._options.cache === 'immutable'; + const { requery, signal } = PSD; + let [cacheEntry, exactMatch, tblCache, container] = findCompatibleQuery(dbName, tableName, 'query', req); + if (cacheEntry && exactMatch) { + cacheEntry.obsSet = req.obsSet; + } + else { + const promise = downTable.query(req).then((res) => { + const result = res.result; + if (cacheEntry) + cacheEntry.res = result; + if (freezeResults) { + for (let i = 0, l = result.length; i < l; ++i) { + Object.freeze(result[i]); + } + Object.freeze(result); + } + else { + res.result = deepClone(result); + } + return res; + }).catch(error => { + if (container && cacheEntry) + delArrayItem(container, cacheEntry); + return Promise.reject(error); + }); + cacheEntry = { + obsSet: req.obsSet, + promise, + subscribers: new Set(), + type: 'query', + req, + dirty: false, + }; + if (container) { + container.push(cacheEntry); + } + else { + container = [cacheEntry]; + if (!tblCache) { + tblCache = cache[`idb://${dbName}/${tableName}`] = { + queries: { + query: {}, + count: {}, + }, + objs: new Map(), + optimisticOps: [], + unsignaledParts: {} + }; + } + tblCache.queries.query[req.query.index.name || ''] = container; + } + } + subscribeToCacheEntry(cacheEntry, container, requery, signal); + return cacheEntry.promise.then((res) => { + return { + result: applyOptimisticOps(res.result, req, tblCache?.optimisticOps, downTable, cacheEntry, freezeResults), + }; + }); + }, + }; + return tableMW; + }, + }; + return coreMW; + }, +}; + +function vipify(target, vipDb) { + return new Proxy(target, { + get(target, prop, receiver) { + if (prop === 'db') + return vipDb; + return Reflect.get(target, prop, receiver); + } + }); +} + +class Dexie$1 { + constructor(name, options) { + this._middlewares = {}; + this.verno = 0; + const deps = Dexie$1.dependencies; + this._options = options = { + addons: Dexie$1.addons, + autoOpen: true, + indexedDB: deps.indexedDB, + IDBKeyRange: deps.IDBKeyRange, + cache: 'cloned', + ...options + }; + this._deps = { + indexedDB: options.indexedDB, + IDBKeyRange: options.IDBKeyRange + }; + const { addons, } = options; + this._dbSchema = {}; + this._versions = []; + this._storeNames = []; + this._allTables = {}; + this.idbdb = null; + this._novip = this; + const state = { + dbOpenError: null, + isBeingOpened: false, + onReadyBeingFired: null, + openComplete: false, + dbReadyResolve: nop, + dbReadyPromise: null, + cancelOpen: nop, + openCanceller: null, + autoSchema: true, + PR1398_maxLoop: 3, + autoOpen: options.autoOpen, + }; + state.dbReadyPromise = new DexiePromise(resolve => { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise((_, reject) => { + state.cancelOpen = reject; + }); + this._state = state; + this.name = name; + this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => { + return (subscriber, bSticky) => { + Dexie$1.vip(() => { + const state = this._state; + if (state.openComplete) { + if (!state.dbOpenError) + DexiePromise.resolve().then(subscriber); + if (bSticky) + subscribe(subscriber); + } + else if (state.onReadyBeingFired) { + state.onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } + else { + subscribe(subscriber); + const db = this; + if (!bSticky) + subscribe(function unsubscribe() { + db.on.ready.unsubscribe(subscriber); + db.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.Collection = createCollectionConstructor(this); + this.Table = createTableConstructor(this); + this.Transaction = createTransactionConstructor(this); + this.Version = createVersionConstructor(this); + this.WhereClause = createWhereClauseConstructor(this); + this.on("versionchange", ev => { + if (ev.newVersion > 0) + console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`); + else + console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`); + this.close({ disableAutoOpen: false }); + }); + this.on("blocked", ev => { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn(`Dexie.delete('${this.name}') was blocked`); + else + console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`); + }); + this._maxKey = getMaxKey(options.IDBKeyRange); + this._createTransaction = (mode, storeNames, dbschema, parentTransaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction); + this._fireOnBlocked = ev => { + this.on("blocked").fire(ev); + connections + .filter(c => c.name === this.name && c !== this && !c._state.vcFired) + .map(c => c.on("versionchange").fire(ev)); + }; + this.use(cacheExistingValuesMiddleware); + this.use(cacheMiddleware); + this.use(observabilityMiddleware); + this.use(virtualIndexMiddleware); + this.use(hooksMiddleware); + const vipDB = new Proxy(this, { + get: (_, prop, receiver) => { + if (prop === '_vip') + return true; + if (prop === 'table') + return (tableName) => vipify(this.table(tableName), vipDB); + const rv = Reflect.get(_, prop, receiver); + if (rv instanceof Table) + return vipify(rv, vipDB); + if (prop === 'tables') + return rv.map(t => vipify(t, vipDB)); + if (prop === '_createTransaction') + return function () { + const tx = rv.apply(this, arguments); + return vipify(tx, vipDB); + }; + return rv; + } + }); + this.vip = vipDB; + addons.forEach(addon => addon(this)); + } + version(versionNumber) { + if (isNaN(versionNumber) || versionNumber < 0.1) + throw new exceptions.Type(`Given version is not a positive number`); + versionNumber = Math.round(versionNumber * 10) / 10; + if (this.idbdb || this._state.isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + const versions = this._versions; + var versionInstance = versions.filter(v => v._cfg.version === versionNumber)[0]; + if (versionInstance) + return versionInstance; + versionInstance = new this.Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + versionInstance.stores({}); + this._state.autoSchema = false; + return versionInstance; + } + _whenReady(fn) { + return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise((resolve, reject) => { + if (this._state.openComplete) { + return reject(new exceptions.DatabaseClosed(this._state.dbOpenError)); + } + if (!this._state.isBeingOpened) { + if (!this._state.autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + this.open().catch(nop); + } + this._state.dbReadyPromise.then(resolve, reject); + }).then(fn); + } + use({ stack, create, level, name }) { + if (name) + this.unuse({ stack, name }); + const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); + middlewares.push({ stack, create, level: level == null ? 10 : level, name }); + middlewares.sort((a, b) => a.level - b.level); + return this; + } + unuse({ stack, name, create }) { + if (stack && this._middlewares[stack]) { + this._middlewares[stack] = this._middlewares[stack].filter(mw => create ? mw.create !== create : + name ? mw.name !== name : + false); + } + return this; + } + open() { + return usePSD(globalPSD, + () => dexieOpen(this)); + } + _close() { + const state = this._state; + const idx = connections.indexOf(this); + if (idx >= 0) + connections.splice(idx, 1); + if (this.idbdb) { + try { + this.idbdb.close(); + } + catch (e) { } + this.idbdb = null; + } + if (!state.isBeingOpened) { + state.dbReadyPromise = new DexiePromise(resolve => { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise((_, reject) => { + state.cancelOpen = reject; + }); + } + } + close({ disableAutoOpen } = { disableAutoOpen: true }) { + const state = this._state; + if (disableAutoOpen) { + if (state.isBeingOpened) { + state.cancelOpen(new exceptions.DatabaseClosed()); + } + this._close(); + state.autoOpen = false; + state.dbOpenError = new exceptions.DatabaseClosed(); + } + else { + this._close(); + state.autoOpen = this._options.autoOpen || + state.isBeingOpened; + state.openComplete = false; + state.dbOpenError = null; + } + } + delete(closeOptions = { disableAutoOpen: true }) { + const hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; + const state = this._state; + return new DexiePromise((resolve, reject) => { + const doDelete = () => { + this.close(closeOptions); + var req = this._deps.indexedDB.deleteDatabase(this.name); + req.onsuccess = wrap(() => { + _onDatabaseDeleted(this._deps, this.name); + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = this._fireOnBlocked; + }; + if (hasInvalidArguments) + throw new exceptions.InvalidArgument("Invalid closeOptions argument to db.delete()"); + if (state.isBeingOpened) { + state.dbReadyPromise.then(doDelete); + } + else { + doDelete(); + } + }); + } + backendDB() { + return this.idbdb; + } + isOpen() { + return this.idbdb !== null; + } + hasBeenClosed() { + const dbOpenError = this._state.dbOpenError; + return dbOpenError && (dbOpenError.name === 'DatabaseClosed'); + } + hasFailed() { + return this._state.dbOpenError !== null; + } + dynamicallyOpened() { + return this._state.autoSchema; + } + get tables() { + return keys(this._allTables).map(name => this._allTables[name]); + } + transaction() { + const args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + } + _transaction(mode, tables, scopeFunc) { + let parentTransaction = PSD.trans; + if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) + parentTransaction = null; + const onlyIfCompatible = mode.indexOf('?') !== -1; + mode = mode.replace('!', '').replace('?', ''); + let idbMode, storeNames; + try { + storeNames = tables.map(table => { + var storeName = table instanceof this.Table ? table.name : table; + if (typeof storeName !== 'string') + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + if (mode == "r" || mode === READONLY) + idbMode = READONLY; + else if (mode == "rw" || mode == READWRITE) + idbMode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + if (parentTransaction.mode === READONLY && idbMode === READWRITE) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach(storeName => { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Table " + storeName + + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + parentTransaction = null; + } + } + } + catch (e) { + return parentTransaction ? + parentTransaction._promise(null, (_, reject) => { reject(e); }) : + rejection(e); + } + const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); + return (parentTransaction ? + parentTransaction._promise(idbMode, enterTransaction, "lock") : + PSD.trans ? + usePSD(PSD.transless, () => this._whenReady(enterTransaction)) : + this._whenReady(enterTransaction)); + } + table(tableName) { + if (!hasOwn(this._allTables, tableName)) { + throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); + } + return this._allTables[tableName]; + } +} + +const symbolObservable = typeof Symbol !== "undefined" && "observable" in Symbol + ? Symbol.observable + : "@@observable"; +class Observable { + constructor(subscribe) { + this._subscribe = subscribe; + } + subscribe(x, error, complete) { + return this._subscribe(!x || typeof x === "function" ? { next: x, error, complete } : x); + } + [symbolObservable]() { + return this; + } +} + +let domDeps; +try { + domDeps = { + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; +} +catch (e) { + domDeps = { indexedDB: null, IDBKeyRange: null }; +} + +function liveQuery(querier) { + let hasValue = false; + let currentValue; + const observable = new Observable((observer) => { + const scopeFuncIsAsync = isAsyncFunction(querier); + function execute(ctx) { + const wasRootExec = beginMicroTickScope(); + try { + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + let rv = newScope(querier, ctx); + if (scopeFuncIsAsync) { + rv = rv.finally(decrementExpectedAwaits); + } + return rv; + } + finally { + wasRootExec && endMicroTickScope(); + } + } + let closed = false; + let abortController; + let accumMuts = {}; + let currentObs = {}; + const subscription = { + get closed() { + return closed; + }, + unsubscribe: () => { + if (closed) + return; + closed = true; + if (abortController) + abortController.abort(); + if (startedListening) + globalEvents.storagemutated.unsubscribe(mutationListener); + }, + }; + observer.start && observer.start(subscription); + let startedListening = false; + const doQuery = () => execInGlobalContext(_doQuery); + function shouldNotify() { + return obsSetsOverlap(currentObs, accumMuts); + } + const mutationListener = (parts) => { + extendObservabilitySet(accumMuts, parts); + if (shouldNotify()) { + doQuery(); + } + }; + const _doQuery = () => { + if (closed || + !domDeps.indexedDB) + { + return; + } + accumMuts = {}; + const subscr = {}; + if (abortController) + abortController.abort(); + abortController = new AbortController(); + const ctx = { + subscr, + signal: abortController.signal, + requery: doQuery, + querier, + trans: null + }; + const ret = execute(ctx); + Promise.resolve(ret).then((result) => { + hasValue = true; + currentValue = result; + if (closed || ctx.signal.aborted) { + return; + } + accumMuts = {}; + currentObs = subscr; + if (!objectIsEmpty(currentObs) && !startedListening) { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener); + startedListening = true; + } + execInGlobalContext(() => !closed && observer.next && observer.next(result)); + }, (err) => { + hasValue = false; + if (!['DatabaseClosedError', 'AbortError'].includes(err?.name)) { + if (!closed) + execInGlobalContext(() => { + if (closed) + return; + observer.error && observer.error(err); + }); + } + }); + }; + setTimeout(doQuery, 0); + return subscription; + }); + observable.hasValue = () => hasValue; + observable.getValue = () => currentValue; + return observable; +} + +const Dexie = Dexie$1; +props(Dexie, { + ...fullNameExceptions, + delete(databaseName) { + const db = new Dexie(databaseName, { addons: [] }); + return db.delete(); + }, + exists(name) { + return new Dexie(name, { addons: [] }).open().then(db => { + db.close(); + return true; + }).catch('NoSuchDatabaseError', () => false); + }, + getDatabaseNames(cb) { + try { + return getDatabaseNames(Dexie.dependencies).then(cb); + } + catch { + return rejection(new exceptions.MissingAPI()); + } + }, + defineClass() { + function Class(content) { + extend(this, content); + } + return Class; + }, + ignoreTransaction(scopeFunc) { + return PSD.trans ? + usePSD(PSD.transless, scopeFunc) : + scopeFunc(); + }, + vip, + async: function (generatorFn) { + return function () { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }; + }, + spawn: function (generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }, + currentTransaction: { + get: () => PSD.trans || null + }, + waitFor: function (promiseOrFunction, optionalTimeout) { + const promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ? + Dexie.ignoreTransaction(promiseOrFunction) : + promiseOrFunction) + .timeout(optionalTimeout || 60000); + return PSD.trans ? + PSD.trans.waitFor(promise) : + promise; + }, + Promise: DexiePromise, + debug: { + get: () => debug, + set: value => { + setDebug(value); + } + }, + derive: derive, + extend: extend, + props: props, + override: override, + Events: Events, + on: globalEvents, + liveQuery, + extendObservabilitySet, + getByKeyPath: getByKeyPath, + setByKeyPath: setByKeyPath, + delByKeyPath: delByKeyPath, + shallowClone: shallowClone, + deepClone: deepClone, + getObjectDiff: getObjectDiff, + cmp, + asap: asap$1, + minKey: minKey, + addons: [], + connections: connections, + errnames: errnames, + dependencies: domDeps, + cache, + semVer: DEXIE_VERSION, + version: DEXIE_VERSION.split('.') + .map(n => parseInt(n)) + .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))), +}); +Dexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange); + +if (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => { + if (!propagatingLocally) { + let event; + event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, { + detail: updatedParts + }); + propagatingLocally = true; + dispatchEvent(event); + propagatingLocally = false; + } + }); + addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({ detail }) => { + if (!propagatingLocally) { + propagateLocally(detail); + } + }); +} +function propagateLocally(updateParts) { + let wasMe = propagatingLocally; + try { + propagatingLocally = true; + globalEvents.storagemutated.fire(updateParts); + signalSubscribersNow(updateParts, true); + } + finally { + propagatingLocally = wasMe; + } +} +let propagatingLocally = false; + +let bc; +let createBC = () => { }; +if (typeof BroadcastChannel !== 'undefined') { + createBC = () => { + bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME); + bc.onmessage = ev => ev.data && propagateLocally(ev.data); + }; + createBC(); + if (typeof bc.unref === 'function') { + bc.unref(); + } + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => { + if (!propagatingLocally) { + bc.postMessage(changedParts); + } + }); +} + +if (typeof addEventListener !== 'undefined') { + addEventListener('pagehide', (event) => { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pagehide'); + bc?.close(); + for (const db of connections) { + db.close({ disableAutoOpen: false }); + } + } + }); + addEventListener('pageshow', (event) => { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pageshow'); + createBC(); + propagateLocally({ all: new RangeSet(-Infinity, [[]]) }); + } + }); +} + +function add(value) { + return new PropModification({ add: value }); +} + +function remove(value) { + return new PropModification({ remove: value }); +} + +function replacePrefix(a, b) { + return new PropModification({ replacePrefix: [a, b] }); +} + +DexiePromise.rejectionMapper = mapError; +setDebug(debug); + +export { Dexie$1 as Dexie, Entity, PropModSymbol, PropModification, RangeSet, add, cmp, Dexie$1 as default, liveQuery, mergeRanges, rangesOverlap, remove, replacePrefix }; +//# sourceMappingURL=dexie.mjs.map diff --git a/src/assets/dexie/dist/modern/dexie.mjs.map b/src/assets/dexie/dist/modern/dexie.mjs.map new file mode 100644 index 000000000..b9194d77e --- /dev/null +++ b/src/assets/dexie/dist/modern/dexie.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"dexie.mjs","sources":["../../src/globals/global.ts","../../src/functions/utils.ts","../../src/errors/errors.js","../../src/functions/chaining-functions.js","../../src/helpers/debug.ts","../../src/helpers/promise.js","../../src/functions/temp-transaction.ts","../../src/globals/constants.ts","../../src/functions/combine.ts","../../src/dbcore/keyrange.ts","../../src/functions/workaround-undefined-primkey.ts","../../src/classes/entity/Entity.ts","../../src/functions/cmp.ts","../../src/classes/table/table.ts","../../src/helpers/Events.js","../../src/functions/make-class-constructor.ts","../../src/classes/table/table-constructor.ts","../../src/classes/collection/collection-helpers.ts","../../src/helpers/prop-modification.ts","../../src/classes/collection/collection.ts","../../src/classes/collection/collection-constructor.ts","../../src/functions/compare-functions.ts","../../src/classes/where-clause/where-clause-helpers.ts","../../src/classes/where-clause/where-clause.ts","../../src/classes/where-clause/where-clause-constructor.ts","../../src/functions/event-wrappers.ts","../../src/globals/global-events.ts","../../src/classes/transaction/transaction.ts","../../src/classes/transaction/transaction-constructor.ts","../../src/helpers/index-spec.ts","../../src/helpers/table-schema.ts","../../src/functions/quirks.ts","../../src/dbcore/get-key-extractor.ts","../../src/dbcore/dbcore-indexeddb.ts","../../src/classes/dexie/generate-middleware-stacks.ts","../../src/classes/version/schema-helpers.ts","../../src/classes/version/version.ts","../../src/classes/version/version-constructor.ts","../../src/helpers/database-enumerator.ts","../../src/classes/dexie/vip.ts","../../node_modules/.pnpm/safari-14-idb-fix@3.0.0/node_modules/safari-14-idb-fix/dist/index.js","../../src/helpers/rangeset.ts","../../src/live-query/extend-observability-set.ts","../../src/live-query/obs-sets-overlap.ts","../../src/live-query/cache/cache.ts","../../src/live-query/cache/signalSubscribers.ts","../../src/classes/dexie/dexie-open.ts","../../src/helpers/yield-support.ts","../../src/classes/dexie/transaction-helpers.ts","../../src/dbcore/virtual-index-middleware.ts","../../src/functions/get-object-diff.ts","../../src/dbcore/get-effective-keys.ts","../../src/hooks/hooks-middleware.ts","../../src/dbcore/cache-existing-values-middleware.ts","../../src/live-query/cache/is-cachable-context.ts","../../src/live-query/cache/is-cachable-request.ts","../../src/live-query/observability-middleware.ts","../../src/live-query/cache/adjust-optimistic-request-from-failures.ts","../../src/live-query/cache/is-within-range.ts","../../src/live-query/cache/apply-optimistic-ops.ts","../../src/live-query/cache/are-ranges-equal.ts","../../src/live-query/cache/is-super-range.ts","../../src/live-query/cache/find-compatible-query.ts","../../src/live-query/cache/subscribe-cachentry.ts","../../src/live-query/cache/cache-middleware.ts","../../src/helpers/vipify.ts","../../src/classes/dexie/dexie.ts","../../src/classes/observable/observable.ts","../../src/classes/dexie/dexie-dom-dependencies.ts","../../src/live-query/live-query.ts","../../src/classes/dexie/dexie-static-props.ts","../../src/live-query/propagate-locally.ts","../../src/live-query/enable-broadcast.ts","../../src/support-bfcache.ts","../../src/functions/propmods/add.ts","../../src/functions/propmods/remove.ts","../../src/functions/propmods/replace-prefix.ts","../../src/index.ts"],"sourcesContent":["declare var global;\nexport const _global: any =\n typeof globalThis !== 'undefined' ? globalThis :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window :\n global;\n","import { _global } from \"../globals/global\";\nexport const keys = Object.keys;\nexport const isArray = Array.isArray;\nif (typeof Promise !== 'undefined' && !_global.Promise){\n // In jsdom, this it can be the case that Promise is not put on the global object.\n // If so, we need to patch the global object for the rest of the code to work as expected.\n // Other dexie code expects Promise to be on the global object (like normal browser environments)\n _global.Promise = Promise;\n}\nexport { _global }\n\nexport function extend(obj: T, extension: X): T & X {\n if (typeof extension !== 'object') return obj as T & X;\n keys(extension).forEach(function (key) {\n obj[key] = extension[key];\n });\n return obj as T & X;\n}\n\nexport const getProto = Object.getPrototypeOf;\nexport const _hasOwn = {}.hasOwnProperty;\nexport function hasOwn(obj, prop) {\n return _hasOwn.call(obj, prop);\n}\n\nexport function props (proto, extension) {\n if (typeof extension === 'function') extension = extension(getProto(proto));\n (typeof Reflect === \"undefined\" ? keys : Reflect.ownKeys)(extension).forEach(key => {\n setProp(proto, key, extension[key]);\n });\n}\n\nexport const defineProperty = Object.defineProperty;\n\nexport function setProp(obj, prop, functionOrGetSet, options?) {\n defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ?\n {get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true} :\n {value: functionOrGetSet, configurable: true, writable: true}, options));\n}\n\nexport function derive(Child) {\n return {\n from: function (Parent) {\n Child.prototype = Object.create(Parent.prototype);\n setProp(Child.prototype, \"constructor\", Child);\n return {\n extend: props.bind(null, Child.prototype)\n };\n }\n };\n}\n\nexport const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nexport function getPropertyDescriptor(obj, prop) {\n const pd = getOwnPropertyDescriptor(obj, prop);\n let proto;\n return pd || (proto = getProto(obj)) && getPropertyDescriptor (proto, prop);\n}\n\nconst _slice = [].slice;\nexport function slice(args, start?, end?) {\n return _slice.call(args, start, end);\n}\n\nexport function override(origFunc, overridedFactory) {\n return overridedFactory(origFunc);\n}\n\nexport function assert (b) {\n if (!b) throw new Error(\"Assertion Failed\");\n}\n\nexport function asap(fn) {\n // @ts-ignore\n if (_global.setImmediate) setImmediate(fn); else setTimeout(fn, 0);\n}\n\nexport function getUniqueArray(a) {\n return a.filter((value, index, self) => self.indexOf(value) === index);\n}\n\n/** Generate an object (hash map) based on given array.\n * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to\n * instert on the resulting object for each item in the array. If this function returns a falsy value, the\n * current item wont affect the resulting object.\n */\nexport function arrayToObject (array: T[], extractor: (x:T, idx: number)=>[string, R]): {[name: string]: R} {\n return array.reduce((result, item, i) => {\n var nameAndValue = extractor(item, i);\n if (nameAndValue) result[nameAndValue[0]] = nameAndValue[1];\n return result;\n }, {});\n}\n\nexport function trycatcher(fn, reject) {\n return function () {\n try {\n fn.apply(this, arguments);\n } catch (e) {\n reject(e);\n }\n };\n}\n\nexport function tryCatch(fn: (...args: any[])=>void, onerror, args?) : void {\n try {\n fn.apply(null, args);\n } catch (ex) {\n onerror && onerror(ex);\n }\n}\n\nexport function getByKeyPath(obj, keyPath) {\n // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path\n if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) return obj[keyPath]; // This line is moved from last to first for optimization purpose.\n if (!keyPath) return obj;\n if (typeof keyPath !== 'string') {\n var rv = [];\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n var val = getByKeyPath(obj, keyPath[i]);\n rv.push(val);\n }\n return rv;\n }\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var innerObj = obj[keyPath.substr(0, period)];\n return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n }\n return undefined;\n}\n\nexport function setByKeyPath(obj, keyPath, value) {\n if (!obj || keyPath === undefined) return;\n if ('isFrozen' in Object && Object.isFrozen(obj)) return;\n if (typeof keyPath !== 'string' && 'length' in keyPath) {\n assert(typeof value !== 'string' && 'length' in value);\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n setByKeyPath(obj, keyPath[i], value[i]);\n }\n } else {\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var currentKeyPath = keyPath.substr(0, period);\n var remainingKeyPath = keyPath.substr(period + 1);\n if (remainingKeyPath === \"\")\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) obj.splice(currentKeyPath, 1);\n else delete obj[currentKeyPath];\n } else obj[currentKeyPath] = value;\n else {\n var innerObj = obj[currentKeyPath];\n if (!innerObj || !hasOwn(obj, currentKeyPath)) innerObj = (obj[currentKeyPath] = {});\n setByKeyPath(innerObj, remainingKeyPath, value);\n }\n } else {\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(keyPath))) obj.splice(keyPath, 1);\n else delete obj[keyPath];\n } else obj[keyPath] = value;\n }\n }\n}\n\nexport function delByKeyPath(obj, keyPath) {\n if (typeof keyPath === 'string')\n setByKeyPath(obj, keyPath, undefined);\n else if ('length' in keyPath)\n [].map.call(keyPath, function(kp) {\n setByKeyPath(obj, kp, undefined);\n });\n}\n\nexport function shallowClone(obj) {\n var rv = {};\n for (var m in obj) {\n if (hasOwn(obj, m)) rv[m] = obj[m];\n }\n return rv;\n}\n\nconst concat = [].concat;\nexport function flatten (a: (T | T[])[]) : T[] {\n return concat.apply([], a);\n}\n\n//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\nconst intrinsicTypeNames =\n \"BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey\"\n .split(',').concat(\n flatten([8,16,32,64].map(num=>[\"Int\",\"Uint\",\"Float\"].map(t=>t+num+\"Array\")))\n ).filter(t=>_global[t]);\nconst intrinsicTypes = new Set(intrinsicTypeNames.map(t=>_global[t]));\n\n/** Deep clone a simple object tree.\n * \n * Copies object tree deeply, but does not deep-copy arrays,\n * typed arrays, Dates or other intrinsic types.\n * \n * Does not check for cyclic references.\n * \n * This function is 6 times faster than structuredClone() on chromium 111.\n * \n * This function can safely be used for cloning ObservabilitySets and RangeSets.\n * \n * @param o Object to clone\n * @returns Cloned object\n */\nexport function cloneSimpleObjectTree(o: T): T {\n const rv = {} as T;\n for (const k in o) if (hasOwn(o, k)) {\n const v = o[k];\n rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v);\n }\n return rv;\n}\n\nexport function objectIsEmpty(o: object) {\n for (const k in o) if (hasOwn(o, k)) return false;\n return true;\n}\n\nlet circularRefs: null | WeakMap = null;\n\n/** Deep clone an object or array.\n * \n * \n * @param any \n * @returns \n */\nexport function deepClone(any: T): T {\n circularRefs = new WeakMap();\n const rv = innerDeepClone(any);\n circularRefs = null;\n return rv;\n}\n\nfunction innerDeepClone(x: T): T {\n if (!x || typeof x !== 'object') return x;\n let rv = circularRefs.get(x); // Resolve circular references\n if (rv) return rv;\n if (isArray(x)) {\n rv = [];\n circularRefs.set(x, rv);\n for (var i = 0, l = x.length; i < l; ++i) {\n rv.push(innerDeepClone(x[i]));\n }\n } else if (intrinsicTypes.has(x.constructor)) {\n // For performance, we're less strict than structuredClone - we're only\n // cloning arrays and custom objects.\n // Typed arrays, Dates etc are not cloned.\n rv = x;\n } else {\n // We're nicer to custom classes than what structuredClone() is -\n // we preserve the proto of each object.\n const proto = getProto(x);\n rv = proto === Object.prototype ? {} : Object.create(proto);\n circularRefs.set(x, rv);\n for (var prop in x) {\n if (hasOwn(x, prop)) {\n rv[prop] = innerDeepClone(x[prop]);\n }\n }\n }\n return rv;\n}\n\nconst {toString} = {};\nexport function toStringTag(o: Object) {\n return toString.call(o).slice(8, -1);\n}\n\n// If first argument is iterable or array-like, return it as an array\nexport const iteratorSymbol = typeof Symbol !== 'undefined' ?\n Symbol.iterator :\n '@@iterator';\nexport const getIteratorOf = typeof iteratorSymbol === \"symbol\" ? function(x) {\n var i;\n return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nexport const asyncIteratorSymbol = typeof Symbol !== 'undefined'\n ? Symbol.asyncIterator || Symbol.for(\"Symbol.asyncIterator\")\n : '@asyncIterator';\n\nexport function delArrayItem(a: any[], x: any) {\n const i = a.indexOf(x);\n if (i >= 0) a.splice(i, 1);\n return i >= 0;\n}\n\nexport const NO_CHAR_ARRAY = {};\n// Takes one or several arguments and returns an array based on the following criteras:\n// * If several arguments provided, return arguments converted to an array in a way that\n// still allows javascript engine to optimize the code.\n// * If single argument is an array, return a clone of it.\n// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special\n// case to the two bullets below.\n// * If single argument is an iterable, convert it to an array and return the resulting array.\n// * If single argument is array-like (has length of type number), convert it to an array.\nexport function getArrayOf (arrayLike) {\n var i, a, x, it;\n if (arguments.length === 1) {\n if (isArray(arrayLike)) return arrayLike.slice();\n if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') return [arrayLike];\n if ((it = getIteratorOf(arrayLike))) {\n a = [];\n while ((x = it.next()), !x.done) a.push(x.value);\n return a;\n }\n if (arrayLike == null) return [arrayLike];\n i = arrayLike.length;\n if (typeof i === 'number') {\n a = new Array(i);\n while (i--) a[i] = arrayLike[i];\n return a;\n }\n return [arrayLike];\n }\n i = arguments.length;\n a = new Array(i);\n while (i--) a[i] = arguments[i];\n return a;\n}\nexport const isAsyncFunction = typeof Symbol !== 'undefined'\n ? (fn: Function) => fn[Symbol.toStringTag] === 'AsyncFunction'\n : ()=>false;\n","import { derive, setProp } from '../functions/utils';\n\nvar dexieErrorNames = [\n 'Modify',\n 'Bulk',\n 'OpenFailed',\n 'VersionChange',\n 'Schema',\n 'Upgrade',\n 'InvalidTable',\n 'MissingAPI',\n 'NoSuchDatabase',\n 'InvalidArgument',\n 'SubTransaction',\n 'Unsupported',\n 'Internal',\n 'DatabaseClosed',\n 'PrematureCommit',\n 'ForeignAwait'\n];\n\nvar idbDomErrorNames = [\n 'Unknown',\n 'Constraint',\n 'Data',\n 'TransactionInactive',\n 'ReadOnly',\n 'Version',\n 'NotFound',\n 'InvalidState',\n 'InvalidAccess',\n 'Abort',\n 'Timeout',\n 'QuotaExceeded',\n 'Syntax',\n 'DataClone'\n];\n\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\n\nvar defaultTexts = {\n VersionChanged: \"Database version changed by other database connection\",\n DatabaseClosed: \"Database has been closed\",\n Abort: \"Transaction aborted\",\n TransactionInactive: \"Transaction has already completed or failed\",\n MissingAPI: \"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb\"\n};\n\n//\n// DexieError - base class of all out exceptions.\n//\nexport function DexieError (name, msg) {\n // Reason we don't use ES6 classes is because:\n // 1. It bloats transpiled code and increases size of minified code.\n // 2. It doesn't give us much in this case.\n // 3. It would require sub classes to call super(), which\n // is not needed when deriving from Error.\n this.name = name;\n this.message = msg;\n}\n\nderive(DexieError).from(Error).extend({\n toString: function(){ return this.name + \": \" + this.message; }\n});\n\nfunction getMultiErrorMessage (msg, failures) {\n return msg + \". Errors: \" + Object.keys(failures)\n .map(key=>failures[key].toString())\n .filter((v,i,s)=>s.indexOf(v) === i) // Only unique error strings\n .join('\\n');\n}\n\n//\n// ModifyError - thrown in Collection.modify()\n// Specific constructor because it contains members failures and failedKeys.\n//\nexport function ModifyError (msg, failures, successCount, failedKeys) {\n this.failures = failures;\n this.failedKeys = failedKeys;\n this.successCount = successCount;\n this.message = getMultiErrorMessage(msg, failures);\n}\nderive(ModifyError).from(DexieError);\n\nexport function BulkError (msg, failures) {\n this.name = \"BulkError\";\n this.failures = Object.keys(failures).map(pos => failures[pos]);\n this.failuresByPos = failures;\n this.message = getMultiErrorMessage(msg, this.failures);\n}\nderive(BulkError).from(DexieError);\n\n//\n//\n// Dynamically generate error names and exception classes based\n// on the names in errorList.\n//\n//\n\n// Map of {ErrorName -> ErrorName + \"Error\"}\nexport var errnames = errorList.reduce((obj,name)=>(obj[name]=name+\"Error\",obj),{});\n\n// Need an alias for DexieError because we're gonna create subclasses with the same name.\nconst BaseException = DexieError;\n// Map of {ErrorName -> exception constructor}\nexport var exceptions = errorList.reduce((obj,name)=>{\n // Let the name be \"DexieError\" because this name may\n // be shown in call stack and when debugging. DexieError is\n // the most true name because it derives from DexieError,\n // and we cannot change Function.name programatically without\n // dynamically create a Function object, which would be considered\n // 'eval-evil'.\n var fullName = name + \"Error\";\n function DexieError (msgOrInner, inner){\n this.name = fullName;\n if (!msgOrInner) {\n this.message = defaultTexts[name] || fullName;\n this.inner = null;\n } else if (typeof msgOrInner === 'string') {\n this.message = `${msgOrInner}${!inner ? '' : '\\n ' + inner}`;\n this.inner = inner || null;\n } else if (typeof msgOrInner === 'object') {\n this.message = `${msgOrInner.name} ${msgOrInner.message}`;\n this.inner = msgOrInner;\n }\n }\n derive(DexieError).from(BaseException);\n obj[name]=DexieError;\n return obj;\n},{});\n\n// Use ECMASCRIPT standard exceptions where applicable:\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\n\nexport var exceptionMap = idbDomErrorNames.reduce((obj, name)=>{\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nexport function mapError (domError, message) {\n if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])\n return domError;\n var rv = new exceptionMap[domError.name](message || domError.message, domError);\n if (\"stack\" in domError) {\n // Derive stack from inner exception if it has a stack\n setProp(rv, \"stack\", {get: function(){\n return this.inner.stack;\n }});\n }\n return rv;\n}\n\nexport var fullNameExceptions = errorList.reduce((obj, name)=>{\n if ([\"Syntax\",\"Type\",\"Range\"].indexOf(name) === -1)\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n","import {extend} from './utils';\n\nexport function nop() { }\nexport function mirror(val) { return val; }\nexport function pureFunctionChain(f1, f2) {\n // Enables chained events that takes ONE argument and returns it to the next function in chain.\n // This pattern is used in the hook(\"reading\") event.\n if (f1 == null || f1 === mirror) return f2;\n return function (val) {\n return f2(f1(val));\n };\n}\n\nexport function callBoth(on1, on2) {\n return function () {\n on1.apply(this, arguments);\n on2.apply(this, arguments);\n };\n}\n\nexport function hookCreatingChain(f1, f2) {\n // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance.\n // This pattern is used in the hook(\"creating\") event.\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res !== undefined) arguments[0] = res;\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res2 !== undefined ? res2 : res;\n };\n}\n\nexport function hookDeletingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = this.onerror = null;\n f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n };\n}\n\nexport function hookUpdatingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function (modifications) {\n var res = f1.apply(this, arguments);\n extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain.\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res === undefined ?\n (res2 === undefined ? undefined : res2) :\n (extend(res, res2));\n };\n}\n\nexport function reverseStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n if (f2.apply(this, arguments) === false) return false;\n return f1.apply(this, arguments);\n };\n}\n\nexport function nonStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n f2.apply(this, arguments);\n };\n}\n\nexport function promisableChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res && typeof res.then === 'function') {\n var thiz = this,\n i = arguments.length,\n args = new Array(i);\n while (i--) args[i] = arguments[i];\n return res.then(function () {\n return f2.apply(thiz, args);\n });\n }\n return f2.apply(this, arguments);\n };\n}\n","// By default, debug will be true only if platform is a web platform and its page is served from localhost.\n// When debug = true, error's stacks will contain asyncronic long stacks.\nexport var debug = typeof location !== 'undefined' &&\n // By default, use debug mode if served from localhost.\n /^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\n\nexport function setDebug(value, filter) {\n debug = value;\n}\n\nexport function deprecated (what: string, fn: (...args)=>T) {\n return function () {\n console.warn(`${what} is deprecated. See https://dexie.org/docs/Deprecations}`);\n return fn.apply(this, arguments);\n } as (...args)=>T\n}\n","/*\n * Copyright (c) 2014-2017 David Fahlander\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n */\nimport { _global } from '../globals/global';\nimport {tryCatch, props, setProp,\n getPropertyDescriptor, getArrayOf, extend, getProto} from '../functions/utils';\nimport {nop, callBoth, mirror} from '../functions/chaining-functions';\nimport {debug} from './debug';\nimport {exceptions} from '../errors';\n\n//\n// Promise and Zone (PSD) for Dexie library\n//\n// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by\n// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation.\n//\n// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another\n// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use\n// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task\n// engine that is indexedDB compliant across all browsers.\n// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible.\n//\n// Specific non-standard features of this Promise class:\n// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as\n// native async / await.\n// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame\n// and below + all promises that those promises creates or awaits.\n// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). \n//\n// David Fahlander, https://github.com/dfahlander\n//\n\n// Just a pointer that only this module knows about.\n// Used in Promise constructor to emulate a private constructor.\nvar INTERNAL = {};\n\nconst\n ZONE_ECHO_LIMIT = 100,\n [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ?\n [] :\n (()=>{\n let globalP = Promise.resolve();\n if (typeof crypto === 'undefined' || !crypto.subtle)\n return [globalP, getProto(globalP), globalP];\n // Generate a native promise (as window.Promise may have been patched)\n const nativeP = crypto.subtle.digest(\"SHA-512\", new Uint8Array([0]));\n return [\n nativeP,\n getProto(nativeP),\n globalP\n ];\n })(),\n nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\n\nexport const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nconst patchGlobalPromise = !!resolvedGlobalPromise;\n\n/* The default function used only for the very first promise in a promise chain.\n As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks\n emulated in this module. For indexedDB compatibility, this means that every method needs to \n execute at least one promise before doing an indexedDB operation. Dexie will always call \n db.ready().then() for every operation to make sure the indexedDB event is started in an\n indexedDB-compatible emulated micro task loop.\n*/\nfunction schedulePhysicalTick() {\n queueMicrotask(physicalTick);\n}\n\n// Configurable through Promise.scheduler.\n// Don't export because it would be unsafe to let unknown\n// code call it unless they do try..catch within their callback.\n// This function can be retrieved through getter of Promise.scheduler though,\n// but users must not do Promise.scheduler = myFuncThatThrowsException\nvar asap = function (callback, args) {\n microtickQueue.push([callback, args]);\n if (needsNewPhysicalTick) {\n schedulePhysicalTick();\n needsNewPhysicalTick = false;\n }\n};\n\nvar isOutsideMicroTick = true, // True when NOT in a virtual microTick.\n needsNewPhysicalTick = true, // True when a push to microtickQueue must also schedulePhysicalTick()\n unhandledErrors = [], // Rejected promises that has occured. Used for triggering 'unhandledrejection'.\n rejectingErrors = [], // Tracks if errors are being re-rejected during onRejected callback.\n rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions\n \nexport var globalPSD = {\n id: 'global',\n global: true,\n ref: 0,\n unhandleds: [],\n onunhandled: nop,\n pgp: false,\n env: {},\n finalize: nop\n};\n\nexport var PSD = globalPSD;\n\nexport var microtickQueue = []; // Callbacks to call in this or next physical tick.\nexport var numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick.\nexport var tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick.\n\nexport default function DexiePromise(fn) {\n if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); \n this._listeners = [];\n \n // A library may set `promise._lib = true;` after promise is created to make resolve() or reject()\n // execute the microtask engine implicitely within the call to resolve() or reject().\n // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack\n // only contains library code when calling resolve() or reject().\n // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from\n // global scope (event handler, timer etc)!\n this._lib = false;\n // Current async scope\n var psd = (this._PSD = PSD);\n \n if (typeof fn !== 'function') {\n if (fn !== INTERNAL) throw new TypeError('Not a function');\n // Private constructor (INTERNAL, state, value).\n // Used internally by Promise.resolve() and Promise.reject().\n this._state = arguments[1];\n this._value = arguments[2];\n if (this._state === false)\n handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError().\n return;\n }\n \n this._state = null; // null (=pending), false (=rejected) or true (=resolved)\n this._value = null; // error or result\n ++psd.ref; // Refcounting current scope\n executePromiseTask(this, fn);\n}\n\n// Prepare a property descriptor to put onto Promise.prototype.then\nconst thenProp = {\n get: function() {\n var psd = PSD, microTaskId = totalEchoes;\n\n function then (onFulfilled, onRejected) {\n var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n const cleanup = possibleAwait && !decrementExpectedAwaits();\n var rv = new DexiePromise((resolve, reject) => {\n propagateToListener(this, new Listener(\n nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup),\n nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup),\n resolve,\n reject,\n psd));\n });\n if (this._consoleTask) rv._consoleTask = this._consoleTask;\n return rv;\n }\n\n then.prototype = INTERNAL; // For idempotense, see setter below.\n\n return then;\n },\n // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then\n // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor.\n set: function (value) {\n setProp (this, 'then', value && value.prototype === INTERNAL ?\n thenProp : // Restore to original property descriptor.\n {\n get: function(){\n return value; // Getter returning provided value (behaves like value is just changed)\n },\n set: thenProp.set // Keep a setter that is prepared to restore original.\n }\n );\n }\n};\n\nprops(DexiePromise.prototype, {\n then: thenProp, // Defined above.\n _then: function (onFulfilled, onRejected) {\n // A little tinier version of then() that don't have to create a resulting promise.\n propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); \n },\n\n catch: function (onRejected) {\n if (arguments.length === 1) return this.then(null, onRejected);\n // First argument is the Error type to catch\n var type = arguments[0],\n handler = arguments[1];\n return typeof type === 'function' ? this.then(null, err =>\n // Catching errors by its constructor type (similar to java / c++ / c#)\n // Sample: promise.catch(TypeError, function (e) { ... });\n err instanceof type ? handler(err) : PromiseReject(err))\n : this.then(null, err =>\n // Catching errors by the error.name property. Makes sense for indexedDB where error type\n // is always DOMError but where e.name tells the actual error type.\n // Sample: promise.catch('ConstraintError', function (e) { ... });\n err && err.name === type ? handler(err) : PromiseReject(err));\n },\n\n finally: function (onFinally) {\n return this.then(value => {\n return DexiePromise.resolve(onFinally()).then(()=>value);\n }, err => {\n return DexiePromise.resolve(onFinally()).then(()=>PromiseReject(err));\n });\n },\n \n timeout: function (ms, msg) {\n return ms < Infinity ?\n new DexiePromise((resolve, reject) => {\n var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms);\n this.then(resolve, reject).finally(clearTimeout.bind(null, handle));\n }) : this;\n }\n});\n\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag)\n setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise');\n\n// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env.\n// Environment globals snapshotted on leaving global zone\nglobalPSD.env = snapShot();\n\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n this.psd = zone;\n}\n\n// Promise Static Properties\nprops (DexiePromise, {\n all: function () {\n var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like.\n .map(onPossibleParallellAsync); // Handle parallell async/awaits \n return new DexiePromise(function (resolve, reject) {\n if (values.length === 0) resolve([]);\n var remaining = values.length;\n values.forEach((a,i) => DexiePromise.resolve(a).then(x => {\n values[i] = x;\n if (!--remaining) resolve(values);\n }, reject));\n });\n },\n \n resolve: value => {\n if (value instanceof DexiePromise) return value;\n if (value && typeof value.then === 'function') return new DexiePromise((resolve, reject)=>{\n value.then(resolve, reject);\n });\n var rv = new DexiePromise(INTERNAL, true, value);\n return rv;\n },\n \n reject: PromiseReject,\n \n race: function () {\n var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n values.map(value => DexiePromise.resolve(value).then(resolve, reject));\n });\n },\n\n PSD: {\n get: ()=>PSD,\n set: value => PSD = value\n },\n\n totalEchoes: {get: ()=>totalEchoes},\n\n //task: {get: ()=>task},\n \n newPSD: newScope,\n \n usePSD: usePSD,\n \n scheduler: {\n get: () => asap,\n set: value => {asap = value}\n },\n \n rejectionMapper: {\n get: () => rejectionMapper,\n set: value => {rejectionMapper = value;} // Map reject failures\n },\n \n follow: (fn, zoneProps) => {\n return new DexiePromise((resolve, reject) => {\n return newScope((resolve, reject) => {\n var psd = PSD;\n psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize()\n psd.onunhandled = reject; // Triggered directly on unhandled promises of this library.\n psd.finalize = callBoth(function () {\n // Unhandled standard or 3rd part promises are put in PSD.unhandleds and\n // examined upon scope completion while unhandled rejections in this Promise\n // will trigger directly through psd.onunhandled\n run_at_end_of_this_or_next_physical_tick(()=>{\n this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]);\n });\n }, psd.finalize);\n fn();\n }, zoneProps, resolve, reject);\n });\n }\n});\n\nif (NativePromise) {\n if (NativePromise.allSettled) setProp (DexiePromise, \"allSettled\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise(resolve => {\n if (possiblePromises.length === 0) resolve([]);\n let remaining = possiblePromises.length;\n const results = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => results[i] = {status: \"fulfilled\", value},\n reason => results[i] = {status: \"rejected\", reason})\n .then(()=>--remaining || resolve(results)));\n });\n });\n if (NativePromise.any && typeof AggregateError !== 'undefined') setProp(DexiePromise, \"any\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n if (possiblePromises.length === 0) reject(new AggregateError([]));\n let remaining = possiblePromises.length;\n const failures = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => resolve(value),\n failure => {\n failures[i] = failure;\n if (!--remaining) reject(new AggregateError(failures));\n }));\n });\n });\n}\n\n/**\n* Take a potentially misbehaving resolver function and make sure\n* onFulfilled and onRejected are only called once.\n*\n* Makes no guarantees about asynchrony.\n*/\nfunction executePromiseTask (promise, fn) {\n // Promise Resolution Procedure:\n // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n try {\n fn(value => {\n if (promise._state !== null) return; // Already settled\n if (value === promise) throw new TypeError('A promise cannot be resolved with itself.');\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n if (value && typeof value.then === 'function') {\n executePromiseTask(promise, (resolve, reject) => {\n value instanceof DexiePromise ?\n value._then(resolve, reject) :\n value.then(resolve, reject);\n });\n } else {\n promise._state = true;\n promise._value = value;\n propagateAllListeners(promise);\n }\n if (shouldExecuteTick) endMicroTickScope();\n }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below\n } catch (ex) {\n handleRejection(promise, ex);\n }\n}\n\nfunction handleRejection (promise, reason) {\n rejectingErrors.push(reason);\n if (promise._state !== null) return;\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n reason = rejectionMapper(reason);\n promise._state = false;\n promise._value = reason;\n // Add the failure to a list of possibly uncaught errors\n addPossiblyUnhandledError(promise);\n propagateAllListeners(promise);\n if (shouldExecuteTick) endMicroTickScope();\n}\n\nfunction propagateAllListeners (promise) {\n //debug && linkToPreviousPromise(promise);\n var listeners = promise._listeners;\n promise._listeners = [];\n for (var i = 0, len = listeners.length; i < len; ++i) {\n propagateToListener(promise, listeners[i]);\n }\n var psd = promise._PSD;\n --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize();\n if (numScheduledCalls === 0) {\n // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call,\n // and that no deferreds where listening to this rejection or success.\n // Since there is a risk that our stack can contain application code that may\n // do stuff after this code is finished that may generate new calls, we cannot\n // call finalizers here.\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick(); // Will detect unhandled errors\n }, []);\n }\n}\n\nfunction propagateToListener(promise, listener) {\n if (promise._state === null) {\n promise._listeners.push(listener);\n return;\n }\n\n var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n if (cb === null) {\n // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch()\n return (promise._state ? listener.resolve : listener.reject) (promise._value);\n }\n ++listener.psd.ref;\n ++numScheduledCalls;\n asap (callListener, [cb, promise, listener]);\n}\n\nfunction callListener (cb, promise, listener) {\n try {\n // Call callback and resolve our listener with it's return value.\n var ret, value = promise._value;\n \n if (!promise._state && rejectingErrors.length) rejectingErrors = [];\n // cb is onResolved\n ret = debug && promise._consoleTask ? promise._consoleTask.run(()=>cb (value)) : cb (value);\n if (!promise._state && rejectingErrors.indexOf(value) === -1) {\n markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise.\n }\n listener.resolve(ret);\n } catch (e) {\n // Exception thrown in callback. Reject our listener.\n listener.reject(e);\n } finally {\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n --listener.psd.ref || listener.psd.finalize();\n }\n}\n\n/* The callback to schedule with queueMicrotask().\n It runs a virtual microtick and executes any callback registered in microtickQueue.\n */\nfunction physicalTick() {\n usePSD(globalPSD, ()=>{\n // Make sure to reset the async context to globalPSD before\n // executing any of the microtick subscribers.\n beginMicroTickScope() && endMicroTickScope();\n });\n}\n\nexport function beginMicroTickScope() {\n var wasRootExec = isOutsideMicroTick;\n isOutsideMicroTick = false;\n needsNewPhysicalTick = false;\n return wasRootExec;\n}\n\n/* Executes micro-ticks without doing try..catch.\n This can be possible because we only use this internally and\n the registered functions are exception-safe (they do try..catch\n internally before calling any external method). If registering\n functions in the microtickQueue that are not exception-safe, this\n would destroy the framework and make it instable. So we don't export\n our asap method.\n*/\nexport function endMicroTickScope() {\n var callbacks, i, l;\n do {\n while (microtickQueue.length > 0) {\n callbacks = microtickQueue;\n microtickQueue = [];\n l = callbacks.length;\n for (i = 0; i < l; ++i) {\n var item = callbacks[i];\n item[0].apply(null, item[1]);\n }\n }\n } while (microtickQueue.length > 0);\n isOutsideMicroTick = true;\n needsNewPhysicalTick = true;\n}\n\nfunction finalizePhysicalTick() {\n var unhandledErrs = unhandledErrors;\n unhandledErrors = [];\n unhandledErrs.forEach(p => {\n p._PSD.onunhandled.call(null, p._value, p);\n });\n var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list.\n var i = finalizers.length;\n while (i) finalizers[--i](); \n}\n\nfunction run_at_end_of_this_or_next_physical_tick (fn) {\n function finalizer() {\n fn();\n tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n }\n tickFinalizers.push(finalizer);\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n }, []);\n}\n\nfunction addPossiblyUnhandledError(promise) {\n // Only add to unhandledErrors if not already there. The first one to add to this list\n // will be upon the first rejection so that the root cause (first promise in the\n // rejection chain) is the one listed.\n if (!unhandledErrors.some(p => p._value === promise._value))\n unhandledErrors.push(promise);\n}\n\nfunction markErrorAsHandled(promise) {\n // Called when a reject handled is actually being called.\n // Search in unhandledErrors for any promise whos _value is this promise_value (list\n // contains only rejected promises, and only one item per error)\n var i = unhandledErrors.length;\n while (i) if (unhandledErrors[--i]._value === promise._value) {\n // Found a promise that failed with this same error object pointer,\n // Remove that since there is a listener that actually takes care of it.\n unhandledErrors.splice(i, 1);\n return;\n }\n}\n\nfunction PromiseReject (reason) {\n return new DexiePromise(INTERNAL, false, reason);\n}\n\nexport function wrap (fn, errorCatcher) {\n var psd = PSD;\n return function() {\n var wasRootExec = beginMicroTickScope(),\n outerScope = PSD;\n\n try {\n switchToZone(psd, true);\n return fn.apply(this, arguments);\n } catch (e) {\n errorCatcher && errorCatcher(e);\n } finally {\n switchToZone(outerScope, false);\n if (wasRootExec) endMicroTickScope();\n }\n };\n}\n\n\n//\n// variables used for native await support\n//\nconst task = { awaits: 0, echoes: 0, id: 0}; // The ongoing macro-task when using zone-echoing.\nvar taskCounter = 0; // ID counter for macro tasks.\nvar zoneStack = []; // Stack of left zones to restore asynchronically.\nvar zoneEchoes = 0; // When > 0, zoneLeaveEcho is queued. When 0 and task.echoes is also 0, nothing is queued.\nvar totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then.\n\n\nvar zone_id_counter = 0;\nexport function newScope (fn, props, a1, a2) {\n var parent = PSD,\n psd = Object.create(parent);\n psd.parent = parent;\n psd.ref = 0;\n psd.global = false;\n psd.id = ++zone_id_counter;\n // Prepare for promise patching (done in usePSD):\n var globalEnv = globalPSD.env;\n psd.env = patchGlobalPromise ? {\n Promise: DexiePromise, // Changing window.Promise could be omitted for Chrome and Edge, where IDB+Promise plays well!\n PromiseProp: {value: DexiePromise, configurable: true, writable: true},\n all: DexiePromise.all,\n race: DexiePromise.race,\n allSettled: DexiePromise.allSettled,\n any: DexiePromise.any,\n resolve: DexiePromise.resolve,\n reject: DexiePromise.reject,\n } : {};\n if (props) extend(psd, props);\n \n // unhandleds and onunhandled should not be specifically set here.\n // Leave them on parent prototype.\n // unhandleds.push(err) will push to parent's prototype\n // onunhandled() will call parents onunhandled (with this scope's this-pointer though!)\n ++parent.ref;\n psd.finalize = function () {\n --this.parent.ref || this.parent.finalize();\n }\n var rv = usePSD (psd, fn, a1, a2);\n if (psd.ref === 0) psd.finalize();\n return rv;\n}\n\n// Function to call if scopeFunc returns NativePromise\n// Also for each NativePromise in the arguments to Promise.all()\nexport function incrementExpectedAwaits() {\n if (!task.id) task.id = ++taskCounter;\n ++task.awaits;\n task.echoes += ZONE_ECHO_LIMIT;\n return task.id;\n}\n\n// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called.\n// Also call this when a native await calls then method on a promise. In that case, don't supply\n// sourceTaskId because we already know it refers to current task.\nexport function decrementExpectedAwaits() {\n if (!task.awaits) return false;\n if (--task.awaits === 0) task.id = 0;\n task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0.\n return true;\n}\n\nif ((''+nativePromiseThen).indexOf('[native code]') === -1) {\n // If the native promise' prototype is patched, we cannot rely on zone echoing.\n // Disable that here:\n incrementExpectedAwaits = decrementExpectedAwaits = nop;\n}\n\n// Call from Promise.all() and Promise.race()\nexport function onPossibleParallellAsync (possiblePromise) {\n if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n incrementExpectedAwaits(); \n return possiblePromise.then(x => {\n decrementExpectedAwaits();\n return x;\n }, e => {\n decrementExpectedAwaits();\n return rejection(e);\n });\n }\n return possiblePromise;\n}\n\nfunction zoneEnterEcho(targetZone) {\n ++totalEchoes;\n //console.log(\"Total echoes \", totalEchoes);\n //if (task.echoes === 1) console.warn(\"Cancelling echoing of async context.\");\n if (!task.echoes || --task.echoes === 0) {\n task.echoes = task.awaits = task.id = 0; // Cancel echoing.\n }\n\n zoneStack.push(PSD);\n switchToZone(targetZone, true);\n}\n\nfunction zoneLeaveEcho() {\n var zone = zoneStack[zoneStack.length-1];\n zoneStack.pop();\n switchToZone(zone, false);\n}\n\nfunction switchToZone (targetZone, bEnteringZone) {\n var currentZone = PSD;\n if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {\n // Enter or leave zone asynchronically as well, so that tasks initiated during current tick\n // will be surrounded by the zone when they are invoked.\n queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n }\n if (targetZone === PSD) return;\n\n PSD = targetZone; // The actual zone switch occurs at this line.\n\n // Snapshot on every leave from global zone.\n if (currentZone === globalPSD) globalPSD.env = snapShot();\n\n if (patchGlobalPromise) {\n // Let's patch the global and native Promises (may be same or may be different)\n var GlobalPromise = globalPSD.env.Promise;\n // Swich environments (may be PSD-zone or the global zone. Both apply.)\n var targetEnv = targetZone.env;\n\n if (currentZone.global || targetZone.global) {\n // Leaving or entering global zone. It's time to patch / restore global Promise.\n\n // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular.\n Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);\n\n // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might\n // not be accessing global.Promise but a local reference to it)\n GlobalPromise.all = targetEnv.all;\n GlobalPromise.race = targetEnv.race;\n GlobalPromise.resolve = targetEnv.resolve;\n GlobalPromise.reject = targetEnv.reject;\n if (targetEnv.allSettled) GlobalPromise.allSettled = targetEnv.allSettled;\n if (targetEnv.any) GlobalPromise.any = targetEnv.any;\n }\n }\n}\n\nfunction snapShot () {\n var GlobalPromise = _global.Promise;\n return patchGlobalPromise ? {\n Promise: GlobalPromise,\n PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n all: GlobalPromise.all,\n race: GlobalPromise.race,\n allSettled: GlobalPromise.allSettled,\n any: GlobalPromise.any,\n resolve: GlobalPromise.resolve,\n reject: GlobalPromise.reject,\n } : {};\n}\n\nexport function usePSD (psd, fn, a1, a2, a3) {\n var outerScope = PSD;\n try {\n switchToZone(psd, true);\n return fn(a1, a2, a3);\n } finally {\n switchToZone(outerScope, false);\n }\n}\n\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) {\n return typeof fn !== 'function' ? fn : function () {\n var outerZone = PSD;\n if (possibleAwait) incrementExpectedAwaits();\n switchToZone(zone, true);\n try {\n return fn.apply(this, arguments);\n } finally {\n switchToZone(outerZone, false);\n if (cleanup) queueMicrotask(decrementExpectedAwaits);\n }\n };\n}\n\n/** Execute callback in global context */\nexport function execInGlobalContext(cb) {\n if (Promise === NativePromise && task.echoes === 0) {\n if (zoneEchoes === 0) {\n cb();\n } else {\n enqueueNativeMicroTask(cb);\n }\n } else {\n setTimeout(cb, 0);\n }\n}\n\nexport var rejection = DexiePromise.reject;\n\nexport {DexiePromise};\n","import { PSD, rejection, newScope } from \"../helpers/promise\";\nimport { DexieOptions } from \"../public/types/dexie-constructor\";\nimport { errnames, exceptions } from \"../errors\";\nimport { nop } from \"./chaining-functions\";\nimport { Transaction } from \"../classes/transaction\";\nimport { Dexie } from '../classes/dexie';\n\n/* Generate a temporary transaction when db operations are done outside a transaction scope.\n*/\nexport function tempTransaction (\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n fn: (resolve, reject, trans: Transaction) => any)\n // Last argument is \"writeLocked\". But this doesnt apply to oneshot direct db operations, so we ignore it.\n{\n if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) {\n if (db._state.openComplete) {\n // db.idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError));\n }\n if (!db._state.isBeingOpened) {\n if (!db._state.autoOpen)\n return rejection(new exceptions.DatabaseClosed());\n db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn));\n } else {\n var trans = db._createTransaction(mode, storeNames, db._dbSchema);\n try {\n trans.create();\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(()=>tempTransaction(db, mode, storeNames, fn));\n }\n return rejection(ex);\n }\n return trans._promise(mode, (resolve, reject) => {\n return newScope(() => { // OPTIMIZATION POSSIBLE? newScope() not needed because it's already done in _promise.\n PSD.trans = trans;\n return fn(resolve, reject, trans);\n });\n }).then(result => {\n // Instead of resolving value directly, wait with resolving it until transaction has completed.\n // Otherwise the data would not be in the DB if requesting it in the then() operation.\n // Specifically, to ensure that the following expression will work:\n //\n // db.friends.put({name: \"Arne\"}).then(function () {\n // db.friends.where(\"name\").equals(\"Arne\").count(function(count) {\n // assert (count === 1);\n // });\n // });\n //\n if (mode === 'readwrite') try {trans.idbtrans.commit();} catch {}\n return mode === 'readonly' ? result : trans._completion.then(() => result);\n });/*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major.\n trans._reject(err);\n return rejection(err);\n });*/\n }\n}\n","import { Dexie } from \"../classes/dexie\";\n\nexport const DEXIE_VERSION = '{version}'; // Replaced by build-script.\nexport const maxString = String.fromCharCode(65535);\nexport const minKey = -Infinity; // minKey can be constant. maxKey must be a prop of Dexie (_maxKey)\nexport const INVALID_KEY_ARGUMENT =\n \"Invalid key provided. Keys must be of type string, number, Date or Array.\";\nexport const STRING_EXPECTED = \"String expected.\";\nexport const connections: Dexie[] = [];\nexport const dexieStackFrameFilter = frame => !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\nexport const DBNAMES_DB = '__dbnames';\nexport const READONLY = 'readonly';\nexport const READWRITE = 'readwrite';\n","export function combine(filter1, filter2) {\n return filter1 ?\n filter2 ?\n function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :\n filter1 :\n filter2;\n}\n","import { DBCoreKeyRange, DBCoreRangeType } from '../public/types/dbcore';\n\nexport const AnyRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Any,\n lower: -Infinity,\n lowerOpen: false,\n upper: [[]],\n upperOpen: false\n}\n\nexport const NeverRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Never,\n lower: -Infinity,\n lowerOpen: true,\n upper: -Infinity,\n upperOpen: true\n}\n","import { deepClone, delByKeyPath, getByKeyPath } from './utils';\n\n// This workaround is needed since obj could be a custom-class instance with an\n// uninitialized keyPath. See the following comment for more context:\n// https://github.com/dfahlander/Dexie.js/issues/1280#issuecomment-823557881\nexport function workaroundForUndefinedPrimKey(keyPath: string | ArrayLike) {\n // Workaround only needed for plain non-dotted keyPaths\n return typeof keyPath === \"string\" && !/\\./.test(keyPath) \n ? (obj: object) => {\n if (obj[keyPath] === undefined && (keyPath in obj)) {\n // property exists but is undefined. This will not be liked by Indexeddb.\n // Need to remove the property before adding it but we need to clone it before\n // doing that to not be intrusive.\n obj = deepClone(obj);\n delete obj[keyPath];\n }\n return obj;\n }\n : (obj: object) => obj;\n}","import { exceptions } from \"../../errors\";\n\nexport function Entity(){\n throw exceptions.Type();\n}\n","// Implementation of https://www.w3.org/TR/IndexedDB-3/#compare-two-keys\n\nimport { toStringTag } from './utils';\n\n// ... with the adjustment to return NaN instead of throwing.\nexport function cmp(a: any, b: any): number {\n try {\n const ta = type(a);\n const tb = type(b);\n if (ta !== tb) {\n if (ta === 'Array') return 1;\n if (tb === 'Array') return -1;\n if (ta === 'binary') return 1;\n if (tb === 'binary') return -1;\n if (ta === 'string') return 1;\n if (tb === 'string') return -1;\n if (ta === 'Date') return 1;\n if (tb !== 'Date') return NaN;\n return -1;\n }\n switch (ta) {\n case 'number':\n case 'Date':\n case 'string':\n return a > b ? 1 : a < b ? -1 : 0;\n case 'binary': {\n return compareUint8Arrays(getUint8Array(a), getUint8Array(b));\n }\n case 'Array':\n return compareArrays(a, b);\n }\n } catch {}\n return NaN; // Return value if any given args are valid keys.\n}\n\nexport function compareArrays(a: any[], b: any[]): number {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n const res = cmp(a[i], b[i]);\n if (res !== 0) return res;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\nexport function compareUint8Arrays(\n a: Uint8Array,\n b: Uint8Array\n) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n if (a[i] !== b[i]) return a[i] < b[i] ? -1 : 1;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\n// Implementation of https://www.w3.org/TR/IndexedDB-3/#key-type\nfunction type(x: any) {\n const t = typeof x;\n if (t !== 'object') return t;\n if (ArrayBuffer.isView(x)) return 'binary';\n const tsTag = toStringTag(x); // Cannot use instanceof in Safari\n return tsTag === 'ArrayBuffer' ? 'binary' : (tsTag as 'Array' | 'Date');\n}\n\ntype BinaryType =\n | ArrayBuffer\n | DataView\n | Uint8ClampedArray\n | ArrayBufferView\n | Uint8Array\n | Int8Array\n | Uint16Array\n | Int16Array\n | Uint32Array\n | Int32Array\n | Float32Array\n | Float64Array\n | BigInt64Array \n | BigUint64Array;\n\nfunction getUint8Array(a: BinaryType): Uint8Array {\n if (a instanceof Uint8Array) return a;\n if (ArrayBuffer.isView(a))\n // TypedArray or DataView\n return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return new Uint8Array(a); // ArrayBuffer\n}\n","import { BulkError, exceptions } from '../../errors';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { DexiePromise as Promise, PSD, newScope, rejection, beginMicroTickScope, endMicroTickScope } from '../../helpers/promise';\nimport { Transaction } from '../transaction';\nimport { Dexie } from '../dexie';\nimport { tempTransaction } from '../../functions/temp-transaction';\nimport { Collection } from '../collection';\nimport { isArray, keys, getByKeyPath, setByKeyPath, extend, getProto } from '../../functions/utils';\nimport { maxString } from '../../globals/constants';\nimport { combine } from '../../functions/combine';\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { IndexableType } from '../../public/types/indexable-type';\nimport { debug } from '../../helpers/debug';\nimport { DBCoreTable } from '../../public/types/dbcore';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { workaroundForUndefinedPrimKey } from '../../functions/workaround-undefined-primkey';\nimport { Entity } from '../entity/Entity';\nimport { UpdateSpec } from '../../public';\nimport { cmp } from '../../functions/cmp';\n\n/** class Table\n * \n * https://dexie.org/docs/Table/Table\n */\nexport class Table implements ITable {\n db: Dexie;\n _tx?: Transaction;\n name: string;\n schema: TableSchema;\n hook: TableHooks;\n core: DBCoreTable;\n\n _trans(\n mode: IDBTransactionMode,\n fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike | void,\n writeLocked?: boolean | string) : PromiseExtended\n {\n const trans: Transaction = this._tx || PSD.trans;\n const tableName = this.name;\n // @ts-ignore: Use Chrome's Async Stack Tagging API to allow tracing and simplify debugging for dexie users.\n const task = debug && typeof console !== 'undefined' && console.createTask && console.createTask(`Dexie: ${mode === 'readonly' ? 'read' : 'write' } ${this.name}`);\n \n function checkTableInTransaction(resolve, reject, trans: Transaction) {\n if (!trans.schema[tableName])\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n return fn(trans.idbtrans, trans) as Promise;\n }\n // Surround all in a microtick scope.\n // Reason: Browsers (modern Safari + older others)\n // still as of 2018-10-10 has problems keeping a transaction\n // alive between micro ticks. Safari because if transaction\n // is created but not used in same microtick, it will go\n // away. That specific issue could be solved in DBCore\n // by opening the transaction just before using it instead.\n // But older Firefoxes and IE11 (with Promise polyfills)\n // will still have probs.\n // The beginMicrotickScope()/endMicrotickScope() works\n // in cooperation with Dexie.Promise to orchestrate\n // the micro-ticks in endMicrotickScope() rather than\n // in native engine.\n const wasRootExec = beginMicroTickScope();\n try {\n let p = trans && trans.db._novip === this.db._novip ?\n trans === PSD.trans ?\n trans._promise(mode, checkTableInTransaction, writeLocked) :\n newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) :\n tempTransaction(this.db, mode, [this.name], checkTableInTransaction);\n if (task) { // Dexie.debug = true so we trace errors\n p._consoleTask = task;\n p = p.catch(err => {\n console.trace(err);\n return rejection(err);\n });\n }\n return p; \n } finally {\n if (wasRootExec) endMicroTickScope();\n }\n }\n\n /** Table.get()\n * \n * https://dexie.org/docs/Table/Table.get()\n * \n **/\n get(keyOrCrit, cb?) {\n if (keyOrCrit && keyOrCrit.constructor === Object)\n return this.where(keyOrCrit as { [key: string]: IndexableType }).first(cb);\n if (keyOrCrit == null) return rejection(new exceptions.Type(`Invalid argument to Table.get()`));\n\n return this._trans('readonly', (trans) => {\n return this.core.get({trans, key: keyOrCrit})\n .then(res => this.hook.reading.fire(res));\n }).then(cb);\n }\n\n /** Table.where()\n * \n * https://dexie.org/docs/Table/Table.where()\n * \n **/\n where(indexOrCrit: string | string[] | { [key: string]: IndexableType }) {\n if (typeof indexOrCrit === 'string')\n return new this.db.WhereClause(this, indexOrCrit);\n if (isArray(indexOrCrit))\n return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`);\n // indexOrCrit is an object map of {[keyPath]:value} \n const keyPaths = keys(indexOrCrit);\n if (keyPaths.length === 1)\n // Only one critera. This was the easy case:\n return this\n .where(keyPaths[0])\n .equals(indexOrCrit[keyPaths[0]]);\n\n // Multiple criterias.\n // Let's try finding a compound index that matches all keyPaths in\n // arbritary order:\n const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => {\n if (\n ix.compound &&\n keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0)) {\n for (let i=0; i a.keyPath.length - b.keyPath.length)[0];\n \n if (compoundIndex && this.db._maxKey !== maxString) {\n // Cool! We found such compound index\n // and this browser supports compound indexes (maxKey !== maxString)!\n const keyPathsInValidOrder = (compoundIndex.keyPath as string[]).slice(0, keyPaths.length);\n return this\n .where(keyPathsInValidOrder)\n .equals(keyPathsInValidOrder.map(kp => indexOrCrit[kp]));\n }\n\n if (!compoundIndex && debug) console.warn(\n `The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit from a ` +\n `compound index [${keyPaths.join('+')}]`);\n\n // Ok, now let's fallback to finding at least one matching index\n // and filter the rest.\n const { idxByName } = this.schema;\n const idb = this.db._deps.indexedDB;\n\n function equals (a, b) {\n return idb.cmp(a,b) === 0; // Works with all indexable types including binary keys.\n }\n\n const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => {\n const index = idxByName[keyPath];\n const value = indexOrCrit[keyPath];\n return [\n prevIndex || index, // idx::=Pick index of first matching keypath\n prevIndex || !index ? // filter::=null if not needed, otherwise combine function filter\n combine(\n prevFilterFn,\n index && index.multi ?\n x => {\n const prop = getByKeyPath(x, keyPath);\n return isArray(prop) && prop.some(item => equals(value, item));\n } : x => equals(value, getByKeyPath(x, keyPath)))\n : prevFilterFn\n ];\n }, [null, null]);\n\n return idx ?\n this.where(idx.name).equals(indexOrCrit[idx.keyPath])\n .filter(filterFunction) :\n compoundIndex ?\n this.filter(filterFunction) : // Has compound but browser bad. Allow filter.\n this.where(keyPaths).equals(''); // No index at all. Fail lazily with \"[a+b+c] is not indexed\"\n }\n\n /** Table.filter()\n * \n * https://dexie.org/docs/Table/Table.filter()\n * \n **/\n filter(filterFunction: (obj: any) => boolean) {\n return this.toCollection().and(filterFunction);\n }\n\n /** Table.count()\n * \n * https://dexie.org/docs/Table/Table.count()\n * \n **/\n count(thenShortcut?: any) {\n return this.toCollection().count(thenShortcut);\n }\n\n /** Table.offset()\n * \n * https://dexie.org/docs/Table/Table.offset()\n * \n **/\n offset(offset: number) {\n return this.toCollection().offset(offset);\n }\n\n /** Table.limit()\n * \n * https://dexie.org/docs/Table/Table.limit()\n * \n **/\n limit(numRows: number) {\n return this.toCollection().limit(numRows);\n }\n\n /** Table.each()\n * \n * https://dexie.org/docs/Table/Table.each()\n * \n **/\n each(callback: (obj: any, cursor: { key: IndexableType, primaryKey: IndexableType }) => any) {\n return this.toCollection().each(callback);\n }\n\n /** Table.toArray()\n * \n * https://dexie.org/docs/Table/Table.toArray()\n * \n **/\n toArray(thenShortcut?: any) {\n return this.toCollection().toArray(thenShortcut);\n }\n\n /** Table.toCollection()\n * \n * https://dexie.org/docs/Table/Table.toCollection()\n * \n **/\n toCollection() {\n return new this.db.Collection(new this.db.WhereClause(this));\n }\n\n /** Table.orderBy()\n * \n * https://dexie.org/docs/Table/Table.orderBy()\n * \n **/\n orderBy(index: string | string[]) {\n return new this.db.Collection(\n new this.db.WhereClause(this, isArray(index) ?\n `[${index.join('+')}]` :\n index));\n }\n\n /** Table.reverse()\n * \n * https://dexie.org/docs/Table/Table.reverse()\n * \n **/\n reverse(): Collection {\n return this.toCollection().reverse();\n }\n\n /** Table.mapToClass()\n * \n * https://dexie.org/docs/Table/Table.mapToClass()\n * \n **/\n mapToClass(constructor: Function) {\n const {db, name: tableName} = this;\n this.schema.mappedClass = constructor;\n if (constructor.prototype instanceof Entity) {\n constructor = class extends (constructor as any) {\n get db () { return db; }\n table() { return tableName; }\n }\n }\n // Collect all inherited property names (including method names) by\n // walking the prototype chain. This is to avoid overwriting them from\n // database data - so application code can rely on inherited props never\n // becoming shadowed by database object props.\n const inheritedProps = new Set();\n for (let proto = constructor.prototype; proto; proto = getProto(proto)) {\n Object.getOwnPropertyNames(proto).forEach(propName => inheritedProps.add(propName));\n }\n \n // Now, subscribe to the when(\"reading\") event to make all objects that come out from this table inherit from given class\n // no matter which method to use for reading (Table.get() or Table.where(...)... )\n const readHook = (obj: Object) => {\n if (!obj) return obj; // No valid object. (Value is null or undefined). Return as is.\n // Create a new object that derives from constructor:\n const res = Object.create(constructor.prototype);\n // Clone members (but never those that collide with a property in the prototype\n // hierchary (MUST BE ABLE TO RELY ON Entity methods and props!)):\n for (let m in obj) if (!inheritedProps.has(m)) try { res[m] = obj[m]; } catch (_) { }\n return res;\n };\n\n if (this.schema.readHook) {\n this.hook.reading.unsubscribe(this.schema.readHook);\n }\n this.schema.readHook = readHook;\n this.hook(\"reading\", readHook);\n return constructor;\n }\n\n /** @deprecated */\n defineClass() {\n function Class (content){\n extend(this, content);\n };\n return this.mapToClass(Class);\n }\n\n /** Table.add()\n * \n * https://dexie.org/docs/Table/Table.add()\n * \n **/\n add(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd]});\n }).then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.update()\n * \n * https://dexie.org/docs/Table/Table.update()\n * \n **/\n update(keyOrObject, modifications: { [keyPath: string]: any; } | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n if (key === undefined) return rejection(new exceptions.InvalidArgument(\n \"Given object does not contain its primary key\"));\n /*// object to modify. Also modify given object with the modifications:\n // This part should be here for backward compatibility.\n // If ever feeling too bad about mutating given object, please wait to a new major before removing it,\n // and document the change thoroughly. TODO: Document this change!\n if (!Object.isFrozen(keyOrObject)) try {\n if (typeof modifications !== \"function\") {\n keys(modifications).forEach(keyPath => {\n setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n });\n } else {\n // Now since we support function argument, we should have a similar behavior here as well\n // (as long as we do this mutability stuff on the given object)\n modifications(keyOrObject, {value: keyOrObject, primKey: key});\n }\n } catch {\n // Maybe given object was frozen.\n // This part is not essential. Just move on as nothing happened...\n }*/\n return this.where(\":id\").equals(key).modify(modifications);\n } else {\n // key to modify\n return this.where(\":id\").equals(keyOrObject).modify(modifications);\n }\n }\n\n /** Table.put()\n * \n * https://dexie.org/docs/Table/Table.put()\n * \n **/\n put(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans(\n 'readwrite',\n trans => this.core.mutate({trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.delete()\n * \n * https://dexie.org/docs/Table/Table.delete()\n * \n **/\n delete(key: IndexableType): PromiseExtended {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'delete', keys: [key]}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.clear()\n * \n * https://dexie.org/docs/Table/Table.clear()\n * \n **/\n clear() {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'deleteRange', range: AnyRange}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.bulkGet()\n * \n * https://dexie.org/docs/Table/Table.bulkGet()\n * \n * @param keys \n */\n bulkGet(keys: IndexableType[]) {\n return this._trans('readonly', trans => {\n return this.core.getMany({\n keys,\n trans\n }).then(result => result.map(res => this.hook.reading.fire(res)));\n });\n }\n\n /** Table.bulkAdd()\n * \n * https://dexie.org/docs/Table/Table.bulkAdd()\n * \n **/\n bulkAdd(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToAdd = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate(\n {trans, type: 'add', keys: keys as IndexableType[], values: objectsToAdd, wantResults}\n )\n .then(({numFailures, results,lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkPut()\n * \n * https://dexie.org/docs/Table/Table.bulkPut()\n * \n **/\n bulkPut(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToPut = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n\n return this.core.mutate(\n {trans, type: 'put', keys: keys as IndexableType[], values: objectsToPut, wantResults}\n )\n .then(({numFailures, results, lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkUpdate()\n *\n * https://dexie.org/docs/Table.Table.bulkUpdate()\n */\n bulkUpdate(\n keysAndChanges: readonly { key: any; changes: UpdateSpec }[]\n ): PromiseExtended {\n const coreTable = this.core;\n const keys = keysAndChanges.map((entry) => entry.key);\n const changeSpecs = keysAndChanges.map((entry) => entry.changes);\n const offsetMap: number[] = [];\n return this._trans('readwrite', (trans) => {\n return coreTable.getMany({ trans, keys, cache: 'clone' }).then((objs) => {\n const resultKeys: any[] = [];\n const resultObjs: any[] = [];\n keysAndChanges.forEach(({ key, changes }, idx) => {\n const obj = objs[idx];\n if (obj) {\n for (const keyPath of Object.keys(changes)) {\n const value = changes[keyPath];\n if (keyPath === this.schema.primKey.keyPath) {\n if (cmp(value, key) !== 0) {\n throw new exceptions.Constraint(\n `Cannot update primary key in bulkUpdate()`\n );\n }\n } else {\n setByKeyPath(obj, keyPath, value);\n }\n }\n offsetMap.push(idx);\n resultKeys.push(key);\n resultObjs.push(obj);\n }\n });\n const numEntries = resultKeys.length;\n return coreTable\n .mutate({\n trans,\n type: 'put',\n keys: resultKeys,\n values: resultObjs,\n updates: {\n keys,\n changeSpecs\n }\n })\n .then(({ numFailures, failures }) => {\n if (numFailures === 0) return numEntries;\n // Failure. bulkPut() may have a subset of keys\n // so we must translate returned 'failutes' into the offsets of given argument:\n for (const offset of Object.keys(failures)) {\n const mappedOffset = offsetMap[Number(offset)];\n if (mappedOffset != null) {\n const failure = failures[offset];\n delete failures[offset];\n failures[mappedOffset] = failure;\n }\n }\n throw new BulkError(\n `${this.name}.bulkUpdate(): ${numFailures} of ${numEntries} operations failed`,\n failures\n );\n });\n });\n });\n }\n\n /** Table.bulkDelete()\n * \n * https://dexie.org/docs/Table/Table.bulkDelete()\n * \n **/\n bulkDelete(keys: ReadonlyArray): PromiseExtended {\n const numKeys = keys.length;\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'delete', keys: keys as IndexableType[]});\n }).then(({numFailures, lastResult, failures}) => {\n if (numFailures === 0) return lastResult;\n throw new BulkError(\n `${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures);\n });\n }\n}\n","import {keys, isArray, asap} from '../functions/utils';\nimport {nop, mirror, reverseStoppableEventChain} from '../functions/chaining-functions';\nimport {exceptions} from '../errors';\n\nexport default function Events(ctx) {\n var evs = {};\n var rv = function (eventName, subscriber) {\n if (subscriber) {\n // Subscribe. If additional arguments than just the subscriber was provided, forward them as well.\n var i = arguments.length, args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n evs[eventName].subscribe.apply(null, args);\n return ctx;\n } else if (typeof (eventName) === 'string') {\n // Return interface allowing to fire or unsubscribe from event\n return evs[eventName];\n }\n };\n rv.addEventType = add;\n \n for (var i = 1, l = arguments.length; i < l; ++i) {\n add(arguments[i]);\n }\n \n return rv;\n\n function add(eventName, chainFunction, defaultFunction) {\n if (typeof eventName === 'object') return addConfiguredEvents(eventName);\n if (!chainFunction) chainFunction = reverseStoppableEventChain;\n if (!defaultFunction) defaultFunction = nop;\n\n var context = {\n subscribers: [],\n fire: defaultFunction,\n subscribe: function (cb) {\n if (context.subscribers.indexOf(cb) === -1) {\n context.subscribers.push(cb);\n context.fire = chainFunction(context.fire, cb);\n }\n },\n unsubscribe: function (cb) {\n context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });\n context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n }\n };\n evs[eventName] = rv[eventName] = context;\n return context;\n }\n\n function addConfiguredEvents(cfg) {\n // events(this, {reading: [functionChain, nop]});\n keys(cfg).forEach(function (eventName) {\n var args = cfg[eventName];\n if (isArray(args)) {\n add(eventName, cfg[eventName][0], cfg[eventName][1]);\n } else if (args === 'asap') {\n // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack\n // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten.\n var context = add(eventName, mirror, function fire() {\n // Optimazation-safe cloning of arguments into args.\n var i = arguments.length, args = new Array(i);\n while (i--) args[i] = arguments[i];\n // All each subscriber:\n context.subscribers.forEach(function (fn) {\n asap(function fireEvent() {\n fn.apply(null, args);\n });\n });\n });\n } else throw new exceptions.InvalidArgument(\"Invalid event config\");\n });\n }\n}\n","import { arrayToObject, derive } from './utils';\n\n\nexport function makeClassConstructor (prototype: Object, constructor: Function) {\n /*const propertyDescriptorMap = arrayToObject(\n Object.getOwnPropertyNames(prototype),\n propKey => [propKey, Object.getOwnPropertyDescriptor(prototype, propKey)]);\n\n // Both derive and clone the prototype.\n // derive: So that x instanceof T returns true when T is the class template.\n // clone: Optimizes method access a bit (but actually not nescessary)\n const derivedPrototypeClone = Object.create(prototype, propertyDescriptorMap);\n derivedPrototypeClone.constructor = constructor;\n constructor.prototype = derivedPrototypeClone;\n return constructor as any as TConstructor;*/\n\n // Keep the above code in case we want to clone AND derive the parent prototype.\n // Reason would be optimization of property access.\n // The code below will only create a prototypal inheritance from given constructor function\n // to given prototype.\n derive(constructor).from({prototype});\n return constructor as any as TConstructor; \n}\n","import { Dexie } from '../dexie';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { Transaction } from '../transaction/transaction';\nimport { hookCreatingChain, pureFunctionChain, nop, mirror, hookUpdatingChain, hookDeletingChain } from '../../functions/chaining-functions';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { Table } from './table';\nimport Events from '../../helpers/Events';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\n\nexport interface TableConstructor {\n new (name: string, tableSchema: TableSchema, optionalTrans?: Transaction) : Table;\n prototype: Table;\n}\n\n/** Generates a Table constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTableConstructor (db: Dexie) {\n return makeClassConstructor(\n Table.prototype,\n\n function Table (this: Table, name: string, tableSchema: TableSchema, trans?: Transaction) {\n this.db = db;\n this._tx = trans;\n this.name = name;\n this.schema = tableSchema;\n this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {\n \"creating\": [hookCreatingChain, nop],\n \"reading\": [pureFunctionChain, mirror],\n \"updating\": [hookUpdatingChain, nop],\n \"deleting\": [hookDeletingChain, nop]\n }) as TableHooks;\n }\n\n );\n}\n","import { combine } from \"../../functions/combine\";\nimport { exceptions } from \"../../errors\";\nimport { hasOwn } from \"../../functions/utils\";\nimport { wrap } from \"../../helpers/promise\";\nimport { Collection } from './';\nimport { DBCoreCursor, DBCoreTable, DBCoreTransaction, DBCoreTableSchema, DBCoreRangeType } from '../../public/types/dbcore';\nimport { nop } from '../../functions/chaining-functions';\n\ntype CollectionContext = Collection[\"_ctx\"];\n\nexport function isPlainKeyRange (ctx: CollectionContext, ignoreLimitFilter?: boolean) {\n return !(ctx.filter || ctx.algorithm || ctx.or) &&\n (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n} \n\nexport function addFilter(ctx: CollectionContext, fn: Function) {\n ctx.filter = combine(ctx.filter, fn);\n}\n\nexport function addReplayFilter (ctx: CollectionContext, factory, isLimitFilter?) {\n var curr = ctx.replayFilter;\n ctx.replayFilter = curr ? ()=>combine(curr(), factory()) : factory;\n ctx.justLimit = isLimitFilter && !curr;\n}\n\nexport function addMatchFilter(ctx: CollectionContext, fn) {\n ctx.isMatch = combine(ctx.isMatch, fn);\n}\n\nexport function getIndexOrStore(ctx: CollectionContext, coreSchema: DBCoreTableSchema) {\n // TODO: Rewrite this. No need to know ctx.isPrimKey. ctx.index should hold the keypath.\n // Still, throw if not found!\n if (ctx.isPrimKey) return coreSchema.primaryKey;\n const index = coreSchema.getIndexByKeyPath(ctx.index);\n if (!index) throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + coreSchema.name + \" is not indexed\");\n return index;\n}\n\nexport function openCursor(ctx: CollectionContext, coreTable: DBCoreTable, trans: DBCoreTransaction) {\n const index = getIndexOrStore(ctx, coreTable.schema);\n return coreTable.openCursor({\n trans,\n values: !ctx.keysOnly,\n reverse: ctx.dir === 'prev',\n unique: !!ctx.unique,\n query: {\n index, \n range: ctx.range\n }\n });\n}\n\nexport function iter (\n ctx: CollectionContext, \n fn: (item, cursor: DBCoreCursor, advance: Function)=>void,\n coreTrans: DBCoreTransaction,\n coreTable: DBCoreTable): Promise\n{\n const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n if (!ctx.or) {\n return iterate(\n openCursor(ctx, coreTable, coreTrans),\n combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);\n } else {\n const set = {};\n\n const union = (item: any, cursor: DBCoreCursor, advance) => {\n if (!filter || filter(cursor, advance, result=>cursor.stop(result), err => cursor.fail(err))) {\n var primaryKey = cursor.primaryKey;\n var key = '' + primaryKey;\n if (key === '[object ArrayBuffer]') key = '' + new Uint8Array(primaryKey);\n if (!hasOwn(set, key)) {\n set[key] = true;\n fn(item, cursor, advance);\n }\n }\n }\n\n return Promise.all([\n ctx.or._iterate(union, coreTrans),\n iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)\n ]);\n }\n}\n\nfunction iterate(cursorPromise: Promise, filter, fn, valueMapper): Promise {\n \n // Apply valueMapper (hook('reading') or mappped class)\n var mappedFn = valueMapper ? (x,c,a) => fn(valueMapper(x),c,a) : fn;\n // Wrap fn with PSD and microtick stuff from Promise.\n var wrappedFn = wrap(mappedFn);\n \n return cursorPromise.then(cursor => {\n if (cursor) {\n return cursor.start(()=>{\n var c = ()=>cursor.continue();\n if (!filter || filter(cursor, advancer => c = advancer, val=>{cursor.stop(val);c=nop}, e => {cursor.fail(e);c = nop;}))\n wrappedFn(cursor.value, cursor, advancer => c = advancer);\n c();\n });\n }\n });\n}\n","import { isArray } from \"../functions/utils\";\nimport { PropModSpec } from \"../public/types/prop-modification\";\n\nexport const PropModSymbol: unique symbol = Symbol();\n\n/** Consistent change propagation across offline synced data.\n * \n * This class is executed client- and server side on sync, making\n * an operation consistent across sync for full consistency and accuracy.\n * \n * Example: An object represents a bank account with a balance.\n * One offline user adds $ 1.00 to the balance.\n * Another user (online) adds $ 2.00 to the balance.\n * When first user syncs, the balance becomes the sum of every operation (3.00).\n * \n * -- initial: balance is 0\n * 1. db.bankAccounts.update(1, { balance: new ProdModification({add: 100})}) // user 1 (offline)\n * 2. db.bankAccounts.update(1, { balance: new ProdModification({add: 200})}) // user 2 (online)\n * -- before user 1 syncs, balance is 200 (representing money with integers * 100 to avoid rounding issues)\n * \n * -- balance is 300\n * \n * When new operations are added, they need to be added to:\n * 1. PropModSpec interface\n * 2. Here in PropModification with the logic they represent\n * 3. (Optionally) a sugar function for it, such as const mathAdd = (amount: number | BigInt) => new PropModification({mathAdd: amount})\n */\nexport class PropModification implements PropModSpec {\n [PropModSymbol]?: true;\n replacePrefix?: [string, string];\n add?: number | BigInt | Array;\n remove?: number | BigInt | Array;\n\n execute(value: any): any {\n // add (mathematical or set-wise)\n if (this.add !== undefined) {\n const term = this.add;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(term)) {\n return [...(isArray(value) ? value : []), ...term].sort();\n }\n // Mathematical addition:\n if (typeof term === 'number') return (Number(value) || 0) + term; // if value is not convertible to number, return 0 + term\n if (typeof term === 'bigint') {\n try {\n return BigInt(value) + term;\n } catch {\n return BigInt(0) + term; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid term ${term}`);\n }\n\n // remove (mathematical or set-wise)\n if (this.remove !== undefined) {\n const subtrahend = this.remove;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(subtrahend)) {\n return isArray(value) ? value.filter(item => !subtrahend.includes(item)).sort() : [];\n } \n // Mathematical addition:\n if (typeof subtrahend === 'number') return Number(value) - subtrahend;\n if (typeof subtrahend === 'bigint') {\n try {\n return BigInt(value) - subtrahend;\n } catch {\n return BigInt(0) - subtrahend; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid subtrahend ${subtrahend}`);\n }\n\n // Replace a prefix:\n const prefixToReplace = this.replacePrefix?.[0];\n if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) {\n return this.replacePrefix[1] + value.substring(prefixToReplace.length);\n }\n return value;\n }\n\n constructor(spec: PropModSpec) {\n Object.assign(this, spec);\n }\n}\n","import { Collection as ICollection } from \"../../public/types/collection\";\nimport { Dexie } from \"../dexie\";\nimport { Table } from \"../table\";\nimport { IndexableType, IndexableTypeArrayReadonly } from \"../../public/types/indexable-type\";\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { iter, isPlainKeyRange, getIndexOrStore, addReplayFilter, addFilter, addMatchFilter } from \"./collection-helpers\";\nimport { rejection } from \"../../helpers/promise\";\nimport { combine } from \"../../functions/combine\";\nimport { extend, hasOwn, deepClone, keys, setByKeyPath, getByKeyPath } from \"../../functions/utils\";\nimport { ModifyError } from \"../../errors\";\nimport { ThenShortcut } from \"../../public/types/then-shortcut\";\nimport { Transaction } from '../transaction';\nimport { DBCoreCursor, DBCoreTransaction, DBCoreRangeType, DBCoreMutateResponse, DBCoreKeyRange } from '../../public/types/dbcore';\nimport { cmp } from \"../../functions/cmp\";\nimport { PropModification } from \"../../helpers/prop-modification\";\nimport { UpdateSpec } from \"../../public/types/update-spec\";\n\n/** class Collection\n * \n * https://dexie.org/docs/Collection/Collection\n */\nexport class Collection implements ICollection {\n db: Dexie;\n _ctx: {\n table: Table;\n index?: string | null;\n isPrimKey?: boolean;\n range: DBCoreKeyRange;\n keysOnly: boolean;\n dir: \"next\" | \"prev\";\n unique: \"\" | \"unique\";\n algorithm?: Function | null;\n filter?: Function | null;\n replayFilter: Function | null;\n justLimit: boolean; // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: Function | null;\n offset: number,\n limit: number,\n error: any, // If set, any promise must be rejected with this error\n or: Collection,\n valueMapper: (any) => any\n }\n \n _ondirectionchange?: Function;\n\n _read(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike, cb?): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readonly', fn).then(cb);\n }\n\n _write(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readwrite', fn, \"locked\"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued.\n }\n\n _addAlgorithm(fn) {\n var ctx = this._ctx;\n ctx.algorithm = combine(ctx.algorithm, fn);\n }\n\n _iterate(\n fn: (item, cursor: DBCoreCursor, advance: Function) => void,\n coreTrans: DBCoreTransaction) : Promise\n {\n return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n }\n\n /** Collection.clone()\n * \n * https://dexie.org/docs/Collection/Collection.clone()\n * \n **/\n clone(props?): this {\n var rv = Object.create(this.constructor.prototype),\n ctx = Object.create(this._ctx);\n if (props) extend(ctx, props);\n rv._ctx = ctx;\n return rv;\n }\n\n /** Collection.raw()\n * \n * https://dexie.org/docs/Collection/Collection.raw()\n * \n **/\n raw(): this {\n this._ctx.valueMapper = null;\n return this;\n }\n\n /** Collection.each()\n * \n * https://dexie.org/docs/Collection/Collection.each()\n * \n **/\n each(fn: (obj, cursor: DBCoreCursor) => any): PromiseExtended {\n var ctx = this._ctx;\n\n return this._read(trans => iter(ctx, fn, trans, ctx.table.core));\n }\n\n /** Collection.count()\n * \n * https://dexie.org/docs/Collection/Collection.count()\n * \n **/\n count(cb?) {\n return this._read(trans => {\n const ctx = this._ctx;\n const coreTable = ctx.table.core;\n if (isPlainKeyRange(ctx, true)) {\n // This is a plain key range. We can use the count() method if the index.\n return coreTable.count({\n trans,\n query: {\n index: getIndexOrStore(ctx, coreTable.schema),\n range: ctx.range\n }\n }).then(count => Math.min(count, ctx.limit));\n } else {\n // Algorithms, filters or expressions are applied. Need to count manually.\n var count = 0;\n return iter(ctx, () => { ++count; return false; }, trans, coreTable)\n .then(()=>count);\n }\n }).then(cb);\n }\n\n /** Collection.sortBy()\n * \n * https://dexie.org/docs/Collection/Collection.sortBy()\n * \n **/\n sortBy(keyPath: string): PromiseExtended;\n sortBy(keyPath: string, thenShortcut: ThenShortcut) : PromiseExtended;\n sortBy(keyPath: string, cb?: ThenShortcut) {\n const parts = keyPath.split('.').reverse(),\n lastPart = parts[0],\n lastIndex = parts.length - 1;\n function getval(obj, i) {\n if (i) return getval(obj[parts[i]], i - 1);\n return obj[lastPart];\n }\n var order = this._ctx.dir === \"next\" ? 1 : -1;\n\n function sorter(a, b) {\n var aVal = getval(a, lastIndex),\n bVal = getval(b, lastIndex);\n return aVal < bVal ? -order : aVal > bVal ? order : 0;\n }\n return this.toArray(function (a) {\n return a.sort(sorter);\n }).then(cb);\n }\n\n /** Collection.toArray()\n * \n * https://dexie.org/docs/Collection/Collection.toArray()\n * \n **/\n toArray(cb?): PromiseExtended {\n return this._read(trans => {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAll() or\n // IDBKeyRange.getAll():\n const {valueMapper} = ctx;\n const index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n limit: ctx.limit,\n values: true,\n query: {\n index,\n range: ctx.range\n }\n }).then(({result}) => valueMapper ? result.map(valueMapper) : result);\n } else {\n // Getting array through a cursor.\n const a = [];\n return iter(ctx, item => a.push(item), trans, ctx.table.core).then(()=>a);\n }\n }, cb);\n }\n\n /** Collection.offset()\n * \n * https://dexie.org/docs/Collection/Collection.offset()\n * \n **/\n offset(offset: number) : Collection{\n var ctx = this._ctx;\n if (offset <= 0) return this;\n ctx.offset += offset; // For count()\n if (isPlainKeyRange(ctx)) {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return (cursor, advance) => {\n if (offsetLeft === 0) return true;\n if (offsetLeft === 1) { --offsetLeft; return false; }\n advance(() => {\n cursor.advance(offsetLeft);\n offsetLeft = 0;\n });\n return false;\n };\n });\n } else {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return () => (--offsetLeft < 0);\n });\n }\n return this;\n }\n\n /** Collection.limit()\n * \n * https://dexie.org/docs/Collection/Collection.limit()\n * \n **/\n limit(numRows: number) : Collection {\n this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count()\n addReplayFilter(this._ctx, () => {\n var rowsLeft = numRows;\n return function (cursor, advance, resolve) {\n if (--rowsLeft <= 0) advance(resolve); // Stop after this item has been included\n return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here.\n };\n }, true);\n return this;\n }\n\n /** Collection.until()\n * \n * https://dexie.org/docs/Collection/Collection.until()\n * \n **/\n until(filterFunction: (x) => boolean, bIncludeStopEntry?) {\n addFilter(this._ctx, function (cursor, advance, resolve) {\n if (filterFunction(cursor.value)) {\n advance(resolve);\n return bIncludeStopEntry;\n } else {\n return true;\n }\n });\n return this;\n }\n\n /** Collection.first()\n * \n * https://dexie.org/docs/Collection/Collection.first()\n * \n **/\n first(cb?) {\n return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.last()\n * \n * https://dexie.org/docs/Collection/Collection.last()\n * \n **/\n last(cb?) {\n return this.reverse().first(cb);\n }\n\n /** Collection.filter()\n * \n * https://dexie.org/docs/Collection/Collection.filter()\n * \n **/\n filter(filterFunction: (x) => boolean): Collection {\n /// function(val){return true/false}\n addFilter(this._ctx, function (cursor) {\n return filterFunction(cursor.value);\n });\n // match filters not used in Dexie.js but can be used by 3rd part libraries to test a\n // collection for a match without querying DB. Used by Dexie.Observable.\n addMatchFilter(this._ctx, filterFunction);\n return this;\n }\n\n /** Collection.and()\n * \n * https://dexie.org/docs/Collection/Collection.and()\n * \n **/\n and(filter: (x) => boolean) {\n return this.filter(filter);\n }\n\n /** Collection.or()\n * \n * https://dexie.org/docs/Collection/Collection.or()\n * \n **/\n or(indexName: string) {\n return new this.db.WhereClause(this._ctx.table, indexName, this);\n }\n\n /** Collection.reverse()\n * \n * https://dexie.org/docs/Collection/Collection.reverse()\n * \n **/\n reverse() {\n this._ctx.dir = (this._ctx.dir === \"prev\" ? \"next\" : \"prev\");\n if (this._ondirectionchange) this._ondirectionchange(this._ctx.dir);\n return this;\n }\n\n /** Collection.desc()\n * \n * https://dexie.org/docs/Collection/Collection.desc()\n * \n **/\n desc() {\n return this.reverse();\n }\n\n /** Collection.eachKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachKey()\n * \n **/\n eachKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n }\n\n /** Collection.eachUniqueKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachUniqueKey()\n * \n **/\n eachUniqueKey(cb?) {\n this._ctx.unique = \"unique\";\n return this.eachKey(cb);\n }\n\n /** Collection.eachPrimaryKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachPrimaryKey()\n * \n **/\n eachPrimaryKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n }\n\n /** Collection.keys()\n * \n * https://dexie.org/docs/Collection/Collection.keys()\n * \n **/\n keys(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.key);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.primaryKeys()\n * \n * https://dexie.org/docs/Collection/Collection.primaryKeys()\n * \n **/\n primaryKeys(cb?) : PromiseExtended {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAllKeys() or\n // IDBKeyRange.getAllKeys():\n return this._read(trans => {\n var index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n values: false,\n limit: ctx.limit,\n query: {\n index,\n range: ctx.range\n }});\n }).then(({result})=>result).then(cb);\n }\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.primaryKey);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.uniqueKeys()\n * \n * https://dexie.org/docs/Collection/Collection.uniqueKeys()\n * \n **/\n uniqueKeys(cb?) {\n this._ctx.unique = \"unique\";\n return this.keys(cb);\n }\n\n /** Collection.firstKey()\n * \n * https://dexie.org/docs/Collection/Collection.firstKey()\n * \n **/\n firstKey(cb?) {\n return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.lastKey()\n * \n * https://dexie.org/docs/Collection/Collection.lastKey()\n * \n **/\n lastKey(cb?) {\n return this.reverse().firstKey(cb);\n }\n\n /** Collection.distinct()\n * \n * https://dexie.org/docs/Collection/Collection.distinct()\n * \n **/\n distinct() {\n var ctx = this._ctx,\n idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n if (!idx || !idx.multi) return this; // distinct() only makes differencies on multiEntry indexes.\n var set = {};\n addFilter(this._ctx, function (cursor: DBCoreCursor) {\n var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string\n var found = hasOwn(set, strKey);\n set[strKey] = true;\n return !found;\n });\n return this;\n }\n\n //\n // Methods that mutate storage\n //\n\n /** Collection.modify()\n * \n * https://dexie.org/docs/Collection/Collection.modify()\n * \n **/\n modify(changes: UpdateSpec | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n var ctx = this._ctx;\n return this._write(trans => {\n var modifyer: (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean\n if (typeof changes === 'function') {\n // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item)\n modifyer = changes as (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean;\n } else {\n // changes is a set of {keyPath: value} and no one is listening to the updating hook.\n var keyPaths = keys(changes);\n var numKeys = keyPaths.length;\n modifyer = function (item) {\n let anythingModified = false;\n for (let i = 0; i < numKeys; ++i) {\n let keyPath = keyPaths[i];\n let val = changes[keyPath];\n let origVal = getByKeyPath(item, keyPath);\n\n if (val instanceof PropModification) {\n setByKeyPath(item, keyPath, val.execute(origVal));\n anythingModified = true;\n } else if (origVal !== val) {\n setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n anythingModified = true;\n }\n }\n return anythingModified;\n };\n }\n\n const coreTable = ctx.table.core;\n const {outbound, extractKey} = coreTable.schema.primaryKey;\n const limit = this.db._options.modifyChunkSize || 200;\n const totalFailures = [];\n let successCount = 0;\n const failedKeys: IndexableType[] = [];\n const applyMutateResult = (expectedCount: number, res: DBCoreMutateResponse) => {\n const {failures, numFailures} = res;\n successCount += expectedCount - numFailures;\n for (let pos of keys(failures)) {\n totalFailures.push(failures[pos]);\n }\n }\n return this.clone().primaryKeys().then(keys => {\n const criteria = isPlainKeyRange(ctx) &&\n ctx.limit === Infinity &&\n (typeof changes !== 'function' || changes === deleteCallback) && {\n index: ctx.index,\n range: ctx.range\n };\n\n const nextChunk = (offset: number) => {\n const count = Math.min(limit, keys.length - offset);\n return coreTable.getMany({\n trans,\n keys: keys.slice(offset, offset + count),\n cache: \"immutable\" // Optimize for 2 things:\n // 1) observability-middleware can track changes better.\n // 2) hooks middleware don't have to query the existing values again when tracking changes.\n // We can use \"immutable\" because we promise to not touch the values we retrieve here!\n }).then(values => {\n const addValues = [];\n const putValues = [];\n const putKeys = outbound ? [] : null;\n const deleteKeys = [];\n for (let i=0; i 0 &&\n coreTable.mutate({trans, type: 'add', values: addValues})\n .then(res => {\n for (let pos in res.failures) {\n // Remove from deleteKeys the key of the object that failed to change its primary key\n deleteKeys.splice(parseInt(pos), 1);\n }\n applyMutateResult(addValues.length, res);\n })\n ).then(()=>(putValues.length > 0 || (criteria && typeof changes === 'object')) &&\n coreTable.mutate({\n trans,\n type: 'put',\n keys: putKeys,\n values: putValues,\n criteria,\n changeSpec: typeof changes !== 'function'\n && changes,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(putValues.length, res))\n ).then(()=>(deleteKeys.length > 0 || (criteria && changes === deleteCallback)) &&\n coreTable.mutate({\n trans,\n type: 'delete',\n keys: deleteKeys,\n criteria,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(deleteKeys.length, res))\n ).then(()=>{\n return keys.length > offset + count && nextChunk(offset + limit);\n });\n });\n }\n\n return nextChunk(0).then(()=>{\n if (totalFailures.length > 0)\n throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys as IndexableTypeArrayReadonly);\n\n return keys.length;\n });\n });\n\n });\n }\n\n /** Collection.delete()\n * \n * https://dexie.org/docs/Collection/Collection.delete()\n * \n **/\n delete() : PromiseExtended {\n var ctx = this._ctx,\n range = ctx.range;\n //deletingHook = ctx.table.hook.deleting.fire,\n //hasDeleteHook = deletingHook !== nop;\n if (isPlainKeyRange(ctx) &&\n (ctx.isPrimKey || range.type === DBCoreRangeType.Any)) // if no range, we'll use clear().\n {\n // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208)\n // For chromium, this is the way most optimized version.\n // For IE/Edge, this could hang the indexedDB engine and make operating system instable\n // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7)\n return this._write(trans => {\n // Our API contract is to return a count of deleted items, so we have to count() before delete().\n const {primaryKey} = ctx.table.core.schema;\n const coreRange = range;\n return ctx.table.core.count({trans, query: {index: primaryKey, range: coreRange}}).then(count => {\n return ctx.table.core.mutate({trans, type: 'deleteRange', range: coreRange})\n .then(({failures, lastResult, results, numFailures}) => {\n if (numFailures) throw new ModifyError(\"Could not delete some values\",\n Object.keys(failures).map(pos => failures[pos]),\n count - numFailures);\n return count - numFailures;\n });\n });\n });\n }\n\n return this.modify(deleteCallback);\n }\n}\n\nconst deleteCallback = (value, ctx) => ctx.value = null;\n","import { Dexie } from '../../classes/dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Collection } from './collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\nimport { mirror } from '../../functions/chaining-functions';\n\n/** Constructs a Collection instance. */\nexport interface CollectionConstructor {\n new(whereClause?: WhereClause | null, keyRangeGenerator?: () => DBCoreKeyRange): Collection;\n prototype: Collection;\n}\n\n/** Generates a Collection constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createCollectionConstructor(db: Dexie) {\n return makeClassConstructor(\n Collection.prototype,\n\n function Collection(\n this: Collection,\n whereClause?: WhereClause | null,\n keyRangeGenerator?: () => DBCoreKeyRange)\n {\n this.db = db;\n let keyRange = AnyRange, error = null;\n if (keyRangeGenerator) try {\n keyRange = keyRangeGenerator();\n } catch (ex) {\n error = ex;\n }\n\n const whereCtx = whereClause._ctx;\n const table = whereCtx.table;\n const readingHook = table.hook.reading.fire;\n this._ctx = {\n table: table,\n index: whereCtx.index,\n isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),\n range: keyRange,\n keysOnly: false,\n dir: \"next\",\n unique: \"\",\n algorithm: null,\n filter: null,\n replayFilter: null,\n justLimit: true, // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: null,\n offset: 0,\n limit: Infinity,\n error: error, // If set, any promise must be rejected with this error\n or: whereCtx.or,\n valueMapper: readingHook !== mirror ? readingHook : null\n };\n }\n );\n}\n","import { IndexableType } from '../public/types/indexable-type';\n\nexport function simpleCompare(a, b) {\n return a < b ? -1 : a === b ? 0 : 1;\n}\n\nexport function simpleCompareReverse(a, b) {\n return a > b ? -1 : a === b ? 0 : 1;\n}\n","import { WhereClause } from './where-clause';\nimport { Collection } from '../collection';\nimport { STRING_EXPECTED } from '../../globals/constants';\nimport { simpleCompare, simpleCompareReverse } from '../../functions/compare-functions';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange, DBCoreRangeType } from '../../public/types/dbcore';\n\nexport function fail(collectionOrWhereClause: Collection | WhereClause, err, T?) {\n var collection = collectionOrWhereClause instanceof WhereClause ?\n new collectionOrWhereClause.Collection (collectionOrWhereClause) :\n collectionOrWhereClause;\n \n collection._ctx.error = T ? new T(err) : new TypeError(err);\n return collection;\n}\n\nexport function emptyCollection(whereClause: WhereClause) {\n return new whereClause.Collection (whereClause, () => rangeEqual(\"\")).limit(0);\n}\n\nexport function upperFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toUpperCase() :\n (s: string) => s.toLowerCase();\n}\n\nexport function lowerFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toLowerCase() :\n (s: string) => s.toUpperCase();\n}\n\nexport function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n var length = Math.min(key.length, lowerNeedle.length);\n var llp = -1;\n for (var i = 0; i < length; ++i) {\n var lwrKeyChar = lowerKey[i];\n if (lwrKeyChar !== lowerNeedle[i]) {\n if (cmp(key[i], upperNeedle[i]) < 0) return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n if (cmp(key[i], lowerNeedle[i]) < 0) return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n if (llp >= 0) return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n return null;\n }\n if (cmp(key[i], lwrKeyChar) < 0) llp = i;\n }\n if (length < lowerNeedle.length && dir === \"next\") return key + upperNeedle.substr(key.length);\n if (length < key.length && dir === \"prev\") return key.substr(0, upperNeedle.length);\n return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));\n}\n\nexport function addIgnoreCaseAlgorithm(whereClause: WhereClause, match, needles, suffix) {\n /// \n var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix,\n needlesLen = needles.length;\n if (!needles.every(s => typeof s === 'string')) {\n return fail(whereClause, STRING_EXPECTED);\n }\n function initDirection(dir) {\n upper = upperFactory(dir);\n lower = lowerFactory(dir);\n compare = (dir === \"next\" ? simpleCompare : simpleCompareReverse);\n var needleBounds = needles.map(function (needle){\n return {lower: lower(needle), upper: upper(needle)};\n }).sort(function(a,b) {\n return compare(a.lower, b.lower);\n });\n upperNeedles = needleBounds.map(function (nb){ return nb.upper; });\n lowerNeedles = needleBounds.map(function (nb){ return nb.lower; });\n direction = dir;\n nextKeySuffix = (dir === \"next\" ? \"\" : suffix);\n }\n initDirection(\"next\");\n\n var c = new whereClause.Collection (\n whereClause,\n ()=>createRange(upperNeedles[0], lowerNeedles[needlesLen-1] + suffix)\n );\n\n c._ondirectionchange = function (direction) {\n // This event onlys occur before filter is called the first time.\n initDirection(direction);\n };\n\n var firstPossibleNeedle = 0;\n\n c._addAlgorithm(function (cursor, advance, resolve) {\n /// \n /// \n /// \n var key = cursor.key;\n if (typeof key !== 'string') return false;\n var lowerKey = lower(key);\n if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n return true;\n } else {\n var lowestPossibleCasing = null;\n for (var i=firstPossibleNeedle; i 0) {\n lowestPossibleCasing = casing;\n }\n }\n if (lowestPossibleCasing !== null) {\n advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });\n } else {\n advance(resolve);\n }\n return false;\n }\n });\n return c;\n}\n\nexport function createRange (lower: IndexableType, upper: IndexableType, lowerOpen?: boolean, upperOpen?: boolean): DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Range,\n lower,\n upper,\n lowerOpen,\n upperOpen\n };\n}\n\nexport function rangeEqual (value: IndexableType) : DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Equal,\n lower: value,\n upper: value\n };\n}\n","import { WhereClause as IWhereClause } from \"../../public/types/where-clause\";\nimport { Collection } from \"../collection\";\nimport { Table } from \"../table\";\nimport { IndexableType } from \"../../public/types/indexable-type\";\nimport { emptyCollection, fail, addIgnoreCaseAlgorithm, createRange, rangeEqual } from './where-clause-helpers';\nimport { INVALID_KEY_ARGUMENT, STRING_EXPECTED, maxString, minKey } from '../../globals/constants';\nimport { getArrayOf, NO_CHAR_ARRAY } from '../../functions/utils';\nimport { exceptions } from '../../errors';\nimport { Dexie } from '../dexie';\nimport { Collection as ICollection} from \"../../public/types/collection\";\n\n/** class WhereClause\n * \n * https://dexie.org/docs/WhereClause/WhereClause\n */\nexport class WhereClause implements IWhereClause {\n db: Dexie;\n _IDBKeyRange: typeof IDBKeyRange;\n _ctx: {\n table: Table;\n index: string;\n or: Collection;\n }\n _cmp: (a: IndexableType, b: IndexableType) => number;\n _ascending: (a: IndexableType, b: IndexableType) => number;\n _descending: (a: IndexableType, b: IndexableType) => number;\n _min: (a: IndexableType, b: IndexableType) => IndexableType;\n _max: (a: IndexableType, b: IndexableType) => IndexableType;\n\n get Collection() {\n return this._ctx.table.db.Collection;\n }\n\n /** WhereClause.between()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.between()\n * \n **/\n between(lower: IndexableType, upper: IndexableType, includeLower?: boolean, includeUpper?: boolean) {\n includeLower = includeLower !== false; // Default to true\n includeUpper = includeUpper === true; // Default to false\n try {\n if ((this._cmp(lower, upper) > 0) ||\n (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))\n return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection.\n return new this.Collection(this, ()=>createRange(lower, upper, !includeLower, !includeUpper));\n } catch (e) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n }\n\n /** WhereClause.equals()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equals()\n * \n **/\n equals(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => rangeEqual(value)) as ICollection;\n }\n\n /** WhereClause.above()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.above()\n * \n **/\n above(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, true));\n }\n\n /** WhereClause.aboveOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.aboveOrEqual()\n * \n **/\n aboveOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, false));\n }\n\n /** WhereClause.below()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.below()\n * \n **/\n below(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value, false, true));\n }\n\n /** WhereClause.belowOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.belowOrEqual()\n * \n **/\n belowOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value));\n }\n\n /** WhereClause.startsWith()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWith()\n * \n **/\n startsWith(str: string) {\n if (typeof str !== 'string') return fail(this, STRING_EXPECTED);\n return this.between(str, str + maxString, true, true);\n }\n\n /** WhereClause.startsWithIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithIgnoreCase()\n * \n **/\n startsWithIgnoreCase(str: string) {\n if (str === \"\") return this.startsWith(str);\n return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString);\n }\n\n /** WhereClause.equalsIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equalsIgnoreCase()\n * \n **/\n equalsIgnoreCase(str: string) {\n return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], \"\");\n }\n\n /** WhereClause.anyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOfIgnoreCase()\n * \n **/\n anyOfIgnoreCase(...values: string[]): Collection;\n anyOfIgnoreCase(values: string[]): Collection;\n anyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, \"\");\n }\n\n /** WhereClause.startsWithAnyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOfIgnoreCase()\n * \n **/\n startsWithAnyOfIgnoreCase(...values: string[]): Collection;\n startsWithAnyOfIgnoreCase(values: string[]): Collection;\n startsWithAnyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString);\n }\n\n /** WhereClause.anyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOf()\n * \n **/\n anyOf(...values: string[]): Collection;\n anyOf(values: string[]): Collection;\n anyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n let compare = this._cmp;\n try { set.sort(compare); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n if (set.length === 0) return emptyCollection(this);\n const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1]));\n\n c._ondirectionchange = direction => {\n compare = (direction === \"next\" ?\n this._ascending :\n this._descending);\n set.sort(compare);\n };\n\n let i = 0;\n c._addAlgorithm((cursor, advance, resolve) => {\n const key = cursor.key;\n while (compare(key, set[i]) > 0) {\n // The cursor has passed beyond this key. Check next.\n ++i;\n if (i === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (compare(key, set[i]) === 0) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => { cursor.continue(set[i]); });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.notEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.notEqual()\n * \n **/\n notEqual(value: IndexableType) {\n return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.noneOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.noneOf()\n * \n **/\n noneOf(...values: string[]): Collection;\n noneOf(values: string[]): Collection;\n noneOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return new this.Collection(this); // Return entire collection.\n try { set.sort(this._ascending); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n // Transform [\"a\",\"b\",\"c\"] to a set of ranges for between/above/below: [[minKey,\"a\"], [\"a\",\"b\"], [\"b\",\"c\"], [\"c\",maxKey]]\n const ranges = set.reduce(\n (res, val) => res ?\n res.concat([[res[res.length - 1][1], val]]) :\n [[minKey, val]],\n null);\n ranges.push([set[set.length - 1], this.db._maxKey]);\n return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.inAnyRange()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.inAnyRange()\n * \n **/\n inAnyRange(\n ranges: ReadonlyArray<{ 0: IndexableType, 1: IndexableType }>,\n options?: { includeLowers?: boolean, includeUppers?: boolean })\n {\n const cmp = this._cmp,\n ascending = this._ascending,\n descending = this._descending,\n min = this._min,\n max = this._max;\n\n if (ranges.length === 0) return emptyCollection(this);\n if (!ranges.every(range =>\n range[0] !== undefined &&\n range[1] !== undefined &&\n ascending(range[0], range[1]) <= 0)) {\n return fail(\n this,\n \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\",\n exceptions.InvalidArgument);\n }\n const includeLowers = !options || options.includeLowers !== false; // Default to true\n const includeUppers = options && options.includeUppers === true; // Default to false\n\n function addRange(ranges, newRange) {\n let i = 0, l = ranges.length;\n for (; i < l; ++i) {\n const range = ranges[i];\n if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n range[0] = min(range[0], newRange[0]);\n range[1] = max(range[1], newRange[1]);\n break;\n }\n }\n if (i === l)\n ranges.push(newRange);\n return ranges;\n }\n\n let sortDirection = ascending;\n function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n\n // Join overlapping ranges\n let set;\n try {\n set = ranges.reduce(addRange, []);\n set.sort(rangeSorter);\n } catch (ex) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n\n let rangePos = 0;\n const keyIsBeyondCurrentEntry = includeUppers ?\n key => ascending(key, set[rangePos][1]) > 0 :\n key => ascending(key, set[rangePos][1]) >= 0;\n\n const keyIsBeforeCurrentEntry = includeLowers ?\n key => descending(key, set[rangePos][0]) > 0 :\n key => descending(key, set[rangePos][0]) >= 0;\n\n function keyWithinCurrentRange(key) {\n return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n }\n\n let checkKey = keyIsBeyondCurrentEntry;\n\n const c = new this.Collection(\n this,\n () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers));\n\n c._ondirectionchange = direction => {\n if (direction === \"next\") {\n checkKey = keyIsBeyondCurrentEntry;\n sortDirection = ascending;\n } else {\n checkKey = keyIsBeforeCurrentEntry;\n sortDirection = descending;\n }\n set.sort(rangeSorter);\n };\n\n c._addAlgorithm((cursor, advance, resolve) => {\n var key = cursor.key;\n while (checkKey(key)) {\n // The cursor has passed beyond this key. Check next.\n ++rangePos;\n if (rangePos === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (keyWithinCurrentRange(key)) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) {\n // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border.\n // Continue to next key but don't include this one.\n return false;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => {\n if (sortDirection === ascending) cursor.continue(set[rangePos][0]);\n else cursor.continue(set[rangePos][1]);\n });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.startsWithAnyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOf()\n * \n **/\n startsWithAnyOf(...prefixes: string[]): Collection;\n startsWithAnyOf(prefixes: string[]): Collection;\n startsWithAnyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n\n if (!set.every(s => typeof s === 'string')) {\n return fail(this, \"startsWithAnyOf() only works with strings\");\n }\n if (set.length === 0) return emptyCollection(this);\n\n return this.inAnyRange(set.map((str: string) => [str, str + maxString]));\n }\n\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { WhereClause } from './where-clause';\nimport { Table } from '../table';\nimport { Collection } from '../collection';\nimport { exceptions } from '../../errors';\nimport { cmp } from '../../functions/cmp';\n\nexport interface WhereClauseConstructor {\n new(table: Table, index?: string, orCollection?: Collection): WhereClause;\n prototype: WhereClause;\n}\n\n/** Generates a WhereClause constructor.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createWhereClauseConstructor(db: Dexie) {\n return makeClassConstructor(\n WhereClause.prototype,\n\n function WhereClause(this: WhereClause, table: Table, index?: string, orCollection?: Collection) {\n this.db = db;\n this._ctx = {\n table: table,\n index: index === \":id\" ? null : index,\n or: orCollection\n };\n this._cmp = this._ascending = cmp;\n this._descending = (a, b) => cmp(b, a);\n this._max = (a, b) => cmp(a,b) > 0 ? a : b;\n this._min = (a, b) => cmp(a,b) < 0 ? a : b;\n this._IDBKeyRange = db._deps.IDBKeyRange;\n if (!this._IDBKeyRange) throw new exceptions.MissingAPI();\n }\n );\n}\n","import { wrap } from \"../helpers/promise\";\n\nexport function eventRejectHandler(reject) {\n return wrap(function (event) {\n preventDefault(event);\n reject (event.target.error);\n return false;\n });\n}\n\nexport function eventSuccessHandler (resolve) {\n return wrap(function (event){\n resolve(event.target.result);\n });\n}\n\nexport function hookedEventRejectHandler (reject) {\n return wrap(function (event) {\n // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks.\n \n var req = event.target,\n err = req.error,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n hookErrorHandler = ctx && ctx.onerror;\n hookErrorHandler && hookErrorHandler(err);\n preventDefault(event);\n reject (err);\n return false;\n });\n}\n\nexport function hookedEventSuccessHandler(resolve) {\n // wrap() is needed when calling hooks because the rare scenario of:\n // * hook does a db operation that fails immediately (IDB throws exception)\n // For calling db operations on correct transaction, wrap makes sure to set PSD correctly.\n // wrap() will also execute in a virtual tick.\n // * If not wrapped in a virtual tick, direct exception will launch a new physical tick.\n // * If this was the last event in the bulk, the promise will resolve after a physical tick\n // and the transaction will have committed already.\n // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise,\n // because it is always marked with _lib = true when created using Transaction._promise().\n return wrap(function(event) {\n var req = event.target,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key.\n hookSuccessHandler = ctx && ctx.onsuccess;\n hookSuccessHandler && hookSuccessHandler(result);\n resolve && resolve(result);\n }, resolve);\n}\n\n\nexport function preventDefault(event) {\n if (event.stopPropagation) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.stopPropagation();\n if (event.preventDefault) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.preventDefault();\n}\n\nexport function BulkErrorHandlerCatchAll(errorList, done?, supportHooks?) {\n return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(e => {\n errorList.push(e);\n done && done();\n });\n}\n\n","import Events from '../helpers/Events';\nimport { GlobalDexieEvents } from '../public/types/db-events';\n\nexport const DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated' as 'storagemutated';\n\n// Name of the global event fired using DOM dispatchEvent (if not in node).\n// Reason for propagating this as a DOM event is for getting reactivity across\n// multiple versions of Dexie within the same app (as long as they are\n// compatible with regards to the event data).\n// If the ObservabilitySet protocol change in a way that would not be backward\n// compatible, make sure also update the event name to a new number at the end\n// so that two Dexie instances of different versions continue to work together\n// - maybe not able to communicate but won't fail due to unexpected data in\n// the detail property of the CustomEvent. If so, also make sure to udpate\n// docs and explain at which Dexie version the new name and format of the event\n// is being used.\nexport const STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1';\n\nexport const globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME) as GlobalDexieEvents;\n","import { Transaction as ITransaction } from '../../public/types/transaction';\nimport { DexiePromise, wrap, rejection } from \"../../helpers/promise\";\nimport { DbSchema } from '../../public/types/db-schema';\nimport { assert, hasOwn } from '../../functions/utils';\nimport { PSD, usePSD } from '../../helpers/promise';\nimport { Dexie } from '../dexie';\nimport { exceptions } from '../../errors';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { preventDefault } from '../../functions/event-wrappers';\nimport { newScope } from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { Table } from '../table';\nimport { globalEvents } from '../../globals/global-events';\n\n/** Transaction\n * \n * https://dexie.org/docs/Transaction/Transaction\n * \n **/\nexport class Transaction implements ITransaction {\n db: Dexie;\n active: boolean;\n mode: IDBTransactionMode;\n chromeTransactionDurability: ChromeTransactionDurability;\n idbtrans: IDBTransaction;\n storeNames: string[];\n explicit?: boolean;\n on: any;\n parent?: Transaction;\n schema: DbSchema;\n _memoizedTables: {[tableName: string]: Table};\n\n _reculock: number;\n _blockedFuncs: { 0: () => any, 1: any }[];\n _resolve: () => void;\n _reject: (Error) => void;\n _waitingFor: DexiePromise; // for waitFor()\n _waitingQueue: Function[]; // for waitFor()\n _spinCount: number; // Just for debugging waitFor()\n _completion: DexiePromise;\n\n //\n // Transaction internal methods (not required by API users, but needed internally and eventually by dexie extensions)\n //\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _lock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n // Temporary set all requests into a pending queue if they are called before database is ready.\n ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage)\n if (this._reculock === 1 && !PSD.global) PSD.lockOwnerFor = this;\n return this;\n }\n\n /** Transaction._unlock()\n * \n * Internal method.\n */\n _unlock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n if (--this._reculock === 0) {\n if (!PSD.global) PSD.lockOwnerFor = null;\n while (this._blockedFuncs.length > 0 && !this._locked()) {\n var fnAndPSD = this._blockedFuncs.shift();\n try { usePSD(fnAndPSD[1], fnAndPSD[0]); } catch (e) { }\n }\n }\n return this;\n }\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _locked() {\n // Checks if any write-lock is applied on this transaction.\n // To simplify the Dexie API for extension implementations, we support recursive locks.\n // This is accomplished by using \"Promise Specific Data\" (PSD).\n // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ).\n // PSD is local to code executing on top of the call stacks of any of any code executed by Promise():\n // * callback given to the Promise() constructor (function (resolve, reject){...})\n // * callbacks given to then()/catch()/finally() methods (function (value){...})\n // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise.\n // Derivation is done so that the inner PSD __proto__ points to the outer PSD.\n // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock.\n return this._reculock && PSD.lockOwnerFor !== this;\n }\n\n /** Transaction.create()\n * \n * Internal method.\n * \n */\n create(idbtrans?: IDBTransaction & {[prop: string]: any}) {\n if (!this.mode) return this;\n const idbdb = this.db.idbdb;\n const dbOpenError = this.db._state.dbOpenError;\n assert(!this.idbtrans);\n if (!idbtrans && !idbdb) {\n switch (dbOpenError && dbOpenError.name) {\n case \"DatabaseClosedError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.DatabaseClosed(dbOpenError);\n case \"MissingAPIError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n default:\n // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()!\n throw new exceptions.OpenFailed(dbOpenError);\n }\n }\n if (!this.active) throw new exceptions.TransactionInactive();\n assert(this._completion._state === null); // Completion Promise must still be pending.\n\n idbtrans = this.idbtrans = idbtrans ||\n (this.db.core \n ? this.db.core.transaction(this.storeNames, this.mode as 'readwrite' | 'readonly', { durability: this.chromeTransactionDurability })\n : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })\n ) as IDBTransaction;\n\n idbtrans.onerror = wrap(ev => {\n preventDefault(ev);// Prohibit default bubbling to window.error\n this._reject(idbtrans.error);\n });\n idbtrans.onabort = wrap(ev => {\n preventDefault(ev);\n this.active && this._reject(new exceptions.Abort(idbtrans.error));\n this.active = false;\n this.on(\"abort\").fire(ev);\n });\n idbtrans.oncomplete = wrap(() => {\n this.active = false;\n this._resolve();\n if ('mutatedParts' in idbtrans) {\n globalEvents.storagemutated.fire(idbtrans[\"mutatedParts\"]);\n }\n });\n return this;\n }\n\n /** Transaction._promise()\n * \n * Internal method.\n */\n _promise(\n mode: IDBTransactionMode,\n fn: (resolve, reject, trans: Transaction) => PromiseLike | void,\n bWriteLock?: string | boolean): DexiePromise\n {\n if (mode === 'readwrite' && this.mode !== 'readwrite')\n return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n\n if (!this.active)\n return rejection(new exceptions.TransactionInactive());\n\n if (this._locked()) {\n return new DexiePromise((resolve, reject) => {\n this._blockedFuncs.push([() => {\n this._promise(mode, fn, bWriteLock).then(resolve, reject);\n }, PSD]);\n });\n\n } else if (bWriteLock) {\n return newScope(() => {\n var p = new DexiePromise((resolve, reject) => {\n this._lock();\n const rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p.finally(() => this._unlock());\n p._lib = true;\n return p;\n });\n\n } else {\n var p = new DexiePromise((resolve, reject) => {\n var rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p._lib = true;\n return p;\n }\n }\n\n /** Transaction._root()\n * \n * Internal method. Retrieves the root transaction in the tree of sub transactions.\n */\n _root() {\n return this.parent ? this.parent._root() : this;\n }\n\n /** Transaction.waitFor()\n * \n * Internal method. Can be accessed from the public API through\n * Dexie.waitFor(): https://dexie.org/docs/Dexie/Dexie.waitFor()\n * \n **/\n waitFor(promiseLike: PromiseLike) {\n // Always operate on the root transaction (in case this is a sub stransaction)\n var root = this._root();\n // For stability reasons, convert parameter to promise no matter what type is passed to waitFor().\n // (We must be able to call .then() on it.)\n const promise = DexiePromise.resolve(promiseLike);\n if (root._waitingFor) {\n // Already called waitFor(). Wait for both to complete.\n root._waitingFor = root._waitingFor.then(() => promise);\n } else {\n // We're not in waiting state. Start waiting state.\n root._waitingFor = promise;\n root._waitingQueue = [];\n // Start interacting with indexedDB until promise completes:\n var store = root.idbtrans.objectStore(root.storeNames[0]);\n (function spin() {\n ++root._spinCount; // For debugging only\n while (root._waitingQueue.length) (root._waitingQueue.shift())();\n if (root._waitingFor) store.get(-Infinity).onsuccess = spin;\n }());\n }\n var currentWaitPromise = root._waitingFor;\n return new DexiePromise((resolve, reject) => {\n promise.then(\n res => root._waitingQueue.push(wrap(resolve.bind(null, res))),\n err => root._waitingQueue.push(wrap(reject.bind(null, err)))\n ).finally(() => {\n if (root._waitingFor === currentWaitPromise) {\n // No one added a wait after us. Safe to stop the spinning.\n root._waitingFor = null;\n }\n });\n });\n } \n\n /** Transaction.abort()\n * \n * https://dexie.org/docs/Transaction/Transaction.abort()\n */\n abort() {\n if (this.active) {\n this.active = false;\n if (this.idbtrans) this.idbtrans.abort();\n this._reject(new exceptions.Abort());\n }\n }\n\n /** Transaction.table()\n * \n * https://dexie.org/docs/Transaction/Transaction.table()\n */\n table(tableName: string) {\n const memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n if (hasOwn(memoizedTables, tableName))\n return memoizedTables[tableName];\n const tableSchema = this.schema[tableName];\n if (!tableSchema) {\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\"); \n }\n\n const transactionBoundTable = new this.db.Table(tableName, tableSchema, this);\n transactionBoundTable.core = this.db.core.table(tableName);\n memoizedTables[tableName] = transactionBoundTable;\n return transactionBoundTable;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Transaction } from './transaction';\nimport { DbSchema } from '../../public/types/db-schema';\nimport Events from '../../helpers/Events';\nimport Promise, { rejection } from '../../helpers/promise';\n\nexport interface TransactionConstructor {\n new (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction) : T;\n prototype: T;\n}\n\n/** Generates a Transaction constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTransactionConstructor(db: Dexie) {\n return makeClassConstructor>(\n Transaction.prototype,\n function Transaction (\n this: Transaction,\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction)\n {\n this.db = db;\n this.mode = mode;\n this.storeNames = storeNames;\n this.schema = dbschema;\n this.chromeTransactionDurability = chromeTransactionDurability;\n this.idbtrans = null;\n this.on = Events(this, \"complete\", \"error\", \"abort\");\n this.parent = parent || null;\n this.active = true;\n this._reculock = 0;\n this._blockedFuncs = [];\n this._resolve = null;\n this._reject = null;\n this._waitingFor = null;\n this._waitingQueue = null;\n this._spinCount = 0; // Just for debugging waitFor()\n this._completion = new Promise ((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n \n this._completion.then(\n ()=> {\n this.active = false;\n this.on.complete.fire();\n },\n e => {\n var wasActive = this.active;\n this.active = false;\n this.on.error.fire(e);\n this.parent ?\n this.parent._reject(e) :\n wasActive && this.idbtrans && this.idbtrans.abort();\n return rejection(e); // Indicate we actually DO NOT catch this error.\n });\n \n });\n}\n","import { IndexSpec } from '../public/types/index-spec';\n\nexport function createIndexSpec(\n name: string,\n keyPath: string | string[],\n unique: boolean,\n multi: boolean,\n auto: boolean,\n compound: boolean,\n isPrimKey: boolean\n): IndexSpec {\n return {\n name,\n keyPath,\n unique,\n multi,\n auto,\n compound,\n src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + nameFromKeyPath(keyPath)\n }\n}\n\nexport function nameFromKeyPath (keyPath?: string | string[]): string {\n return typeof keyPath === 'string' ?\n keyPath :\n keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : \"\";\n}\n","import { IndexSpec } from '../public/types/index-spec';\nimport { TableSchema } from '../public/types/table-schema';\nimport { createIndexSpec } from './index-spec';\nimport { arrayToObject } from '../functions/utils';\n\nexport function createTableSchema (\n name: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n): TableSchema {\n return {\n name,\n primKey,\n indexes,\n mappedClass: null,\n idxByName: arrayToObject(indexes, index => [index.name, index])\n };\n}\n","import { maxString } from '../globals/constants';\n\nexport function safariMultiStoreFix(storeNames: string[]) {\n return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\n\nexport function getNativeGetDatabaseNamesFn(indexedDB) {\n var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n return fn && fn.bind(indexedDB);\n}\n\nexport let getMaxKey = (IdbKeyRange: typeof IDBKeyRange) => {\n try {\n IdbKeyRange.only([[]]);\n getMaxKey = () => [[]];\n return [[]];\n } catch (e) {\n getMaxKey = () => maxString;\n return maxString;\n }\n}\n","import { getByKeyPath } from '../functions/utils';\n\nexport function getKeyExtractor (keyPath: null | string | string[]) : (a: any) => any {\n if (keyPath == null) {\n return () => undefined;\n } else if (typeof keyPath === 'string') {\n return getSinglePathKeyExtractor(keyPath);\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n\nexport function getSinglePathKeyExtractor(keyPath: string) {\n const split = keyPath.split('.');\n if (split.length === 1) {\n return obj => obj[keyPath];\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n","import {\n DBCore,\n DBCoreCursor,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryResponse,\n DBCoreRangeType,\n DBCoreSchema,\n DBCoreTableSchema,\n DBCoreTable,\n DBCoreMutateResponse,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { eventRejectHandler, preventDefault } from '../functions/event-wrappers';\nimport { wrap } from '../helpers/promise';\nimport { getMaxKey } from '../functions/quirks';\nimport { getKeyExtractor } from './get-key-extractor';\n\nexport function arrayify(arrayLike: {length: number, [index: number]: T}): T[] {\n return [].slice.call(arrayLike);\n}\nexport function pick(obj: T, props: Prop[]): Pick {\n const result = {} as Pick;\n props.forEach(prop => result[prop] = obj[prop]);\n return result;\n}\n\nlet _id_counter = 0;\n\nexport function getKeyPathAlias(keyPath: null | string | string[]) {\n return keyPath == null ?\n \":id\" :\n typeof keyPath === 'string' ?\n keyPath :\n `[${keyPath.join('+')}]`;\n}\n\nexport function createDBCore (\n db: IDBDatabase,\n IdbKeyRange: typeof IDBKeyRange,\n tmpTrans: IDBTransaction) : DBCore\n{\n function extractSchema(db: IDBDatabase, trans: IDBTransaction) : {schema: DBCoreSchema, hasGetAll: boolean} {\n const tables = arrayify(db.objectStoreNames);\n return {\n schema: {\n name: db.name,\n tables: tables.map(table => trans.objectStore(table)).map(store => {\n const {keyPath, autoIncrement} = store;\n const compound = isArray(keyPath);\n const outbound = keyPath == null;\n const indexByKeyPath: {[keyPathAlias: string]: DBCoreIndex} = {};\n const result = {\n name: store.name,\n primaryKey: {\n name: null,\n isPrimaryKey: true,\n outbound,\n compound,\n keyPath,\n autoIncrement,\n unique: true,\n extractKey: getKeyExtractor(keyPath)\n } as DBCoreIndex,\n indexes: arrayify(store.indexNames).map(indexName => store.index(indexName))\n .map(index => {\n const {name, unique, multiEntry, keyPath} = index;\n const compound = isArray(keyPath);\n const result: DBCoreIndex = {\n name,\n compound,\n keyPath,\n unique,\n multiEntry,\n extractKey: getKeyExtractor(keyPath)\n };\n indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n return result;\n }),\n getIndexByKeyPath: (keyPath: null | string | string[]) => indexByKeyPath[getKeyPathAlias(keyPath)]\n };\n indexByKeyPath[\":id\"] = result.primaryKey;\n if (keyPath != null) {\n indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;\n }\n return result;\n })\n },\n hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&\n !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) // Bug with getAll() on Safari ver<604. See discussion following PR #579\n };\n }\n\n function makeIDBKeyRange (range: DBCoreKeyRange) : IDBKeyRange | null {\n if (range.type === DBCoreRangeType.Any) return null;\n if (range.type === DBCoreRangeType.Never) throw new Error(\"Cannot convert never type to IDBKeyRange\");\n const {lower, upper, lowerOpen, upperOpen} = range;\n const idbRange = lower === undefined ?\n upper === undefined ?\n null : //IDBKeyRange.lowerBound(-Infinity, false) : // Any range (TODO: Should we return null instead?)\n IdbKeyRange.upperBound(upper, !!upperOpen) : // below\n upper === undefined ?\n IdbKeyRange.lowerBound(lower, !!lowerOpen) : // above\n IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);\n return idbRange;\n }\n\n function createDbCoreTable(tableSchema: DBCoreTableSchema): DBCoreTable {\n const tableName = tableSchema.name;\n\n function mutate ({trans, type, keys, values, range}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const outbound = store.keyPath == null;\n const isAddOrPut = type === \"put\" || type === \"add\";\n if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n throw new Error (\"Invalid operation type: \" + type);\n\n const {length} = keys || values || {length: 1}; // keys.length if keys. values.length if values. 1 if range.\n if (keys && values && keys.length !== values.length) {\n throw new Error(\"Given keys array must have same length as given values array.\");\n }\n if (length === 0)\n // No items to write. Don't even bother!\n return resolve({numFailures: 0, failures: {}, results: [], lastResult: undefined});\n\n let req: IDBRequest;\n const reqs: IDBRequest[] = [];\n \n const failures: {[operationNumber: number]: Error} = [];\n let numFailures = 0;\n const errorHandler = \n event => {\n ++numFailures;\n preventDefault(event);\n };\n \n if (type === 'deleteRange') {\n // Here the argument is the range\n if (range.type === DBCoreRangeType.Never)\n return resolve({numFailures, failures, results: [], lastResult: undefined}); // Deleting the Never range shoulnt do anything.\n if (range.type === DBCoreRangeType.Any)\n reqs.push(req = store.clear()); // Deleting the Any range is equivalent to store.clear()\n else\n reqs.push(req = store.delete(makeIDBKeyRange(range)));\n } else {\n // No matter add, put or delete - find out arrays of first and second arguments to it.\n const [args1, args2] = isAddOrPut ?\n outbound ?\n [values, keys] :\n [values, null] :\n [keys, null];\n\n if (isAddOrPut) {\n for (let i=0; i {\n const lastResult = event.target.result;\n reqs.forEach((req, i) => req.error != null && (failures[i] = req.error));\n resolve({\n numFailures,\n failures,\n results: type === \"delete\" ? keys : reqs.map(req => req.result),\n lastResult\n });\n };\n \n req.onerror = event => { // wrap() not needed. All paths calling outside will wrap!\n errorHandler(event);\n done(event);\n };\n \n req.onsuccess = done;\n });\n }\n \n function openCursor ({trans, values, query, reverse, unique}: DBCoreOpenCursorRequest): Promise\n {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n // source\n const source = index.isPrimaryKey ?\n store :\n store.index(index.name);\n // direction\n const direction = reverse ?\n unique ?\n \"prevunique\" :\n \"prev\" :\n unique ?\n \"nextunique\" :\n \"next\";\n // request\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(makeIDBKeyRange(range), direction) :\n source.openKeyCursor(makeIDBKeyRange(range), direction);\n \n // iteration\n req.onerror = eventRejectHandler(reject);\n req.onsuccess = wrap(ev => {\n\n const cursor = req.result as unknown as DBCoreCursor;\n if (!cursor) {\n resolve(null);\n return;\n }\n (cursor as any).___id = ++_id_counter;\n (cursor as any).done = false;\n const _cursorContinue = cursor.continue.bind(cursor);\n let _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n if (_cursorContinuePrimaryKey) _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n const _cursorAdvance = cursor.advance.bind(cursor);\n const doThrowCursorIsNotStarted = ()=>{throw new Error(\"Cursor not started\");}\n const doThrowCursorIsStopped = ()=>{throw new Error(\"Cursor not stopped\");}\n (cursor as any).trans = trans;\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;\n cursor.fail = wrap(reject);\n cursor.next = function (this: DBCoreCursor) {\n // next() must work with \"this\" pointer in order to function correctly for ProxyCursors (derived objects)\n // without having to re-define next() on each child.\n let gotOne = 1;\n return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this);\n };\n cursor.start = (callback) => {\n //console.log(\"Starting cursor\", (cursor as any).___id);\n const iterationPromise = new Promise((resolveIteration, rejectIteration) =>{\n resolveIteration = wrap(resolveIteration);\n req.onerror = eventRejectHandler(rejectIteration);\n cursor.fail = rejectIteration;\n cursor.stop = value => {\n //console.log(\"Cursor stop\", cursor);\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n resolveIteration(value);\n };\n });\n // Now change req.onsuccess to a callback that doesn't call initCursor but just observer.next()\n const guardedCallback = () => {\n if (req.result) {\n //console.log(\"Next result\", cursor);\n try {\n callback();\n } catch (err) {\n cursor.fail(err);\n }\n } else {\n (cursor as any).done = true;\n cursor.start = ()=>{throw new Error(\"Cursor behind last entry\");}\n cursor.stop();\n }\n }\n req.onsuccess = wrap(ev => {\n //cursor.continue = _cursorContinue;\n //cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n //cursor.advance = _cursorAdvance;\n req.onsuccess = guardedCallback;\n guardedCallback();\n });\n cursor.continue = _cursorContinue;\n cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n cursor.advance = _cursorAdvance;\n guardedCallback();\n return iterationPromise;\n };\n resolve(cursor);\n }, reject); \n });\n }\n \n function query (hasGetAll: boolean) {\n return (request: DBCoreQueryRequest) => {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {trans, values, limit, query} = request;\n const nonInfinitLimit = limit === Infinity ? undefined : limit;\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n if (limit === 0) return resolve({result: []});\n if (hasGetAll) {\n const req = values ?\n (source as any).getAll(idbKeyRange, nonInfinitLimit) :\n (source as any).getAllKeys(idbKeyRange, nonInfinitLimit);\n req.onsuccess = event => resolve({result: event.target.result});\n req.onerror = eventRejectHandler(reject);\n } else {\n let count = 0;\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(idbKeyRange) :\n source.openKeyCursor(idbKeyRange)\n const result = [];\n req.onsuccess = event => {\n const cursor = req.result as IDBCursorWithValue;\n if (!cursor) return resolve({result});\n result.push(values ? cursor.value : cursor.primaryKey);\n if (++count === limit) return resolve({result});\n cursor.continue();\n };\n req.onerror = eventRejectHandler(reject);\n }\n });\n };\n }\n \n return {\n name: tableName,\n schema: tableSchema,\n \n mutate,\n\n getMany ({trans, keys}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const length = keys.length;\n const result = new Array(length);\n let keyCount = 0;\n let callbackCount = 0;\n let valueCount = 0;\n let req: IDBRequest & {_pos?: number};\n \n const successHandler = event => {\n const req = event.target;\n if ((result[req._pos] = req.result) != null) ++valueCount;\n if (++callbackCount === keyCount) resolve(result);\n };\n const errorHandler = eventRejectHandler(reject);\n \n for (let i=0; i((resolve, reject) => {\n resolve = wrap (resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const req = store.get(key);\n req.onsuccess = event => resolve((event.target as any).result);\n req.onerror = eventRejectHandler(reject);\n });\n },\n\n query: query(hasGetAll),\n \n openCursor,\n\n count ({query, trans}) {\n const {index, range} = query;\n return new Promise((resolve, reject) => {\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n const req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n req.onsuccess = wrap(ev => resolve((ev.target as IDBRequest).result));\n req.onerror = eventRejectHandler(reject);\n });\n }\n };\n }\n\n const {schema, hasGetAll} = extractSchema(db, tmpTrans);\n const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema));\n const tableMap: {[name: string]: DBCoreTable} = {};\n tables.forEach(table => tableMap[table.name] = table);\n return {\n stack: \"dbcore\",\n \n transaction: db.transaction.bind(db),\n\n table(name: string) {\n const result = tableMap[name];\n if (!result) throw new Error(`Table '${name}' not found`);\n return tableMap[name];\n },\n\n MIN_KEY: -Infinity,\n\n MAX_KEY: getMaxKey(IdbKeyRange),\n\n schema\n\n };\n}\n","import { Dexie } from './';\nimport { createDBCore } from '../../dbcore/dbcore-indexeddb';\nimport { DBCore } from '../../public/types/dbcore';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { DexieStacks, Middleware } from '../../public/types/middleware';\nimport { exceptions } from '../../errors';\n\nfunction createMiddlewareStack(\n stackImpl: {stack: string},\n middlewares: Middleware<{stack: string}>[]): TStack {\n return middlewares.reduce((down, {create}) => ({...down, ...create(down)}), stackImpl) as TStack;\n} \n\nfunction createMiddlewareStacks(\n middlewares: {[StackName in keyof DexieStacks]?: Middleware[]},\n idbdb: IDBDatabase,\n {IDBKeyRange, indexedDB}: DexieDOMDependencies,\n tmpTrans: IDBTransaction): {[StackName in keyof DexieStacks]?: DexieStacks[StackName]}\n{\n const dbcore = createMiddlewareStack(\n createDBCore(idbdb, IDBKeyRange, tmpTrans),\n middlewares.dbcore);\n \n // TODO: Create other stacks the same way as above. They might be dependant on the result\n // of creating dbcore stack.\n\n return {\n dbcore\n };\n}\n\nexport function generateMiddlewareStacks(db: Dexie, tmpTrans: IDBTransaction) {\n const idbdb = tmpTrans.db;\n const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n db.core = stacks.dbcore!;\n db.tables.forEach(table => {\n const tableName = table.name;\n if (db.core.schema.tables.some(tbl => tbl.name === tableName)) {\n table.core = db.core.table(tableName);\n if (db[tableName] instanceof db.Table) {\n db[tableName].core = table.core;\n }\n }\n });\n}\n","import { Dexie } from '../dexie';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { _global } from \"../../globals/global\";\nimport { setProp, keys, slice, isArray, shallowClone, isAsyncFunction, defineProperty, getPropertyDescriptor } from '../../functions/utils';\nimport { Transaction } from '../transaction';\nimport { Version } from './version';\nimport Promise, { PSD, newScope, NativePromise, decrementExpectedAwaits, incrementExpectedAwaits } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { IndexSpec } from '../../public/types/index-spec';\nimport { createIndexSpec, nameFromKeyPath } from '../../helpers/index-spec';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { generateMiddlewareStacks } from '../dexie/generate-middleware-stacks';\nimport { debug } from '../../helpers/debug';\nimport { PromiseExtended } from '../../public/types/promise-extended';\n\nexport function setApiOnPlace(db: Dexie, objs: Object[], tableNames: string[], dbschema: DbSchema) {\n tableNames.forEach(tableName => {\n const schema = dbschema[tableName];\n objs.forEach(obj => {\n const propDesc = getPropertyDescriptor(obj, tableName);\n if (!propDesc || (\"value\" in propDesc && propDesc.value === undefined)) {\n // Either the prop is not declared, or it is initialized to undefined.\n if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n // obj is a Transaction prototype (or prototype of a subclass to Transaction)\n // Make the API a getter that returns this.table(tableName)\n setProp(obj, tableName, {\n get(this: Transaction) { return this.table(tableName); },\n set(value: any) {\n // Issue #1039\n // Let \"this.schema = dbschema;\" and other props in transaction constructor work even if there's a name collision with the table name.\n defineProperty(this, tableName, {value, writable: true, configurable: true, enumerable: true});\n }\n });\n } else {\n // Table will not be bound to a transaction (will use Dexie.currentTransaction)\n obj[tableName] = new db.Table(tableName, schema);\n }\n }\n });\n });\n}\n\nexport function removeTablesApi(db: Dexie, objs: Object[]) {\n objs.forEach(obj => {\n for (let key in obj) {\n if (obj[key] instanceof db.Table) delete obj[key];\n }\n });\n}\n\nexport function lowerVersionFirst(a: Version, b: Version) {\n return a._cfg.version - b._cfg.version;\n}\n\nexport function runUpgraders(db: Dexie, oldVersion: number, idbUpgradeTrans: IDBTransaction, reject) {\n const globalSchema = db._dbSchema;\n if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) {\n globalSchema.$meta = createTableSchema(\"$meta\", parseIndexSyntax(\"\")[0], []);\n db._storeNames.push('$meta');\n }\n const trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n trans.create(idbUpgradeTrans);\n trans._completion.catch(reject);\n const rejectTransaction = trans._reject.bind(trans);\n const transless = PSD.transless || PSD;\n newScope(() => {\n PSD.trans = trans;\n PSD.transless = transless;\n if (oldVersion === 0) {\n // Create tables:\n keys(globalSchema).forEach(tableName => {\n createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n });\n generateMiddlewareStacks(db, idbUpgradeTrans);\n Promise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction);\n } else {\n generateMiddlewareStacks(db, idbUpgradeTrans);\n return getExistingVersion(db, trans, oldVersion)\n .then(oldVersion => updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans))\n .catch(rejectTransaction);\n }\n });\n}\n\nexport type UpgradeQueueItem = (idbtrans: IDBTransaction) => PromiseLike | void;\n\nexport function patchCurrentVersion(db: Dexie, idbUpgradeTrans: IDBTransaction) {\n createMissingTables(db._dbSchema, idbUpgradeTrans);\n if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) {\n // Rolled over to the next 10-ies due to many schema upgrades without bumping version.\n // No problem! We pin the database to its expected version by adding the $meta table so that next\n // time the programmer bumps the version and attaches, an upgrader, that upgrader will indeed run,\n // as well any further upgraders coming after that.\n idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version');\n }\n const globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans);\n const diff = getSchemaDiff(globalSchema, db._dbSchema);\n for (const tableChange of diff.change) {\n if (tableChange.change.length || tableChange.recreate) {\n console.warn(`Unable to patch indexes of table ${tableChange.name} because it has changes on the type of index or primary key.`);\n return;\n }\n const store = idbUpgradeTrans.objectStore(tableChange.name);\n tableChange.add.forEach(idx => {\n if (debug) console.debug(`Dexie upgrade patch: Creating missing index ${tableChange.name}.${idx.src}`);\n addIndex(store, idx);\n });\n }\n}\n\nfunction getExistingVersion(db: Dexie, trans: Transaction, oldVersion: number): PromiseExtended {\n // In normal case, existing version is the native installed version divided by 10.\n // However, in case more than 10 schema changes have been made on the same version (such as while\n // developing an app), the native version may have passed beyond a multiple of 10 within the same version.\n // When that happens, a table $meta will have been created, containing a single entry with key \"version\"\n // and the value of the real old version to use when running upgraders going forward.\n if (trans.storeNames.includes('$meta')) {\n return trans.table('$meta').get('version').then(metaVersion => {\n return metaVersion != null ? metaVersion : oldVersion\n })\n } else {\n return Promise.resolve(oldVersion);\n }\n}\n\nfunction updateTablesAndIndexes(\n db: Dexie,\n oldVersion: number,\n trans: Transaction,\n idbUpgradeTrans: IDBTransaction)\n{\n // Upgrade version to version, step-by-step from oldest to newest version.\n // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version)\n const queue: UpgradeQueueItem[] = [];\n const versions = db._versions;\n let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n let anyContentUpgraderHasRun = false;\n \n const versToRun = versions.filter(v => v._cfg.version >= oldVersion);\n if (versToRun.length === 0) {\n // Important not to continue at this point.\n // Coming here means we've already patched schema in patchCurrentVersion() after having\n // incremented native version to a value above the declared highest version.\n // When being in this mode, it means that there might be different versions the db competing\n // about it with different version of the schema. Therefore, we must avoid deleting tables\n // or indexes here so that both versions can co-exist until the application has been upgraded to\n // a version that declares no lower than the native version.\n // If after that, a downgrade happens again, we'll end up here again, accepting both versions\n // And we'll stay in this state until app developer releases a new declared version.\n return Promise.resolve(); \n }\n \n versToRun.forEach(version => {\n queue.push(() => {\n const oldSchema = globalSchema;\n const newSchema = version._cfg.dbschema;\n adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n\n globalSchema = db._dbSchema = newSchema;\n\n const diff = getSchemaDiff(oldSchema, newSchema);\n // Add tables \n diff.add.forEach(tuple => {\n createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n });\n // Change tables\n diff.change.forEach(change => {\n if (change.recreate) {\n throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n } else {\n const store = idbUpgradeTrans.objectStore(change.name);\n // Add indexes\n change.add.forEach(idx => addIndex(store, idx));\n // Update indexes\n change.change.forEach(idx => {\n store.deleteIndex(idx.name);\n addIndex(store, idx);\n });\n // Delete indexes\n change.del.forEach(idxName => store.deleteIndex(idxName));\n }\n });\n\n const contentUpgrade = version._cfg.contentUpgrade;\n\n if (contentUpgrade && version._cfg.version > oldVersion) {\n // Update db.core with new tables and indexes:\n generateMiddlewareStacks(db, idbUpgradeTrans);\n trans._memoizedTables = {}; // Invalidate memoization as transaction shape may change between versions.\n\n anyContentUpgraderHasRun = true;\n\n // Add to-be-deleted tables to contentUpgrade transaction\n let upgradeSchema = shallowClone(newSchema);\n diff.del.forEach(table => {\n upgradeSchema[table] = oldSchema[table];\n });\n\n // Safe to affect Transaction.prototype globally in this moment,\n // because when this code runs, there may not be any other code\n // that can access any transaction instance, else than this particular\n // upgrader function.\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema);\n trans.schema = upgradeSchema;\n\n // Support for native async await.\n const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade);\n if (contentUpgradeIsAsync) {\n incrementExpectedAwaits();\n }\n \n let returnValue: any;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = contentUpgrade(trans);\n if (returnValue) {\n if (contentUpgradeIsAsync) {\n // contentUpgrade is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n }\n }\n });\n return (returnValue && typeof returnValue.then === 'function' ?\n Promise.resolve(returnValue) : promiseFollowed.then(()=>returnValue));\n }\n });\n queue.push(idbtrans => {\n const newSchema = version._cfg.dbschema;\n // Delete old tables\n deleteRemovedTables(newSchema, idbtrans);\n // Restore the final API\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);\n trans.schema = db._dbSchema;\n });\n // Maintain the $meta table after this version's tables and indexes has been created and content upgraders have run.\n queue.push(idbtrans => {\n if (db.idbdb.objectStoreNames.contains('$meta')) {\n if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) {\n // Remove $meta table if it's no more needed - we are in line with the native version\n db.idbdb.deleteObjectStore('$meta');\n delete db._dbSchema.$meta;\n db._storeNames = db._storeNames.filter(name => name !== '$meta');\n } else {\n // We're still not in line with the native version. Make sure to update the virtual version\n // to the successfully run version\n idbtrans.objectStore('$meta').put(version._cfg.version, 'version');\n }\n }\n }); \n });\n\n // Now, create a queue execution engine\n function runQueue() {\n return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n Promise.resolve();\n }\n\n return runQueue().then(() => {\n createMissingTables(globalSchema, idbUpgradeTrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version)\n });\n}\n\nexport interface SchemaDiff {\n del: string[],\n add: [string, TableSchema][];\n change: TableSchemaDiff[];\n}\n\nexport interface TableSchemaDiff {\n name: string,\n recreate: boolean,\n del: string[],\n add: IndexSpec[],\n change: IndexSpec[]\n}\n\nexport function getSchemaDiff(oldSchema: DbSchema, newSchema: DbSchema): SchemaDiff {\n const diff: SchemaDiff = {\n del: [], // Array of table names\n add: [], // Array of [tableName, newDefinition]\n change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}\n };\n let table: string;\n for (table in oldSchema) {\n if (!newSchema[table]) diff.del.push(table);\n }\n for (table in newSchema) {\n const oldDef = oldSchema[table],\n newDef = newSchema[table];\n if (!oldDef) {\n diff.add.push([table, newDef]);\n } else {\n const change = {\n name: table,\n def: newDef,\n recreate: false,\n del: [],\n add: [],\n change: []\n };\n if (\n (\n // compare keyPaths no matter if string or string[]\n // compare falsy keypaths same no matter if they are null or empty string.\n ''+(oldDef.primKey.keyPath||'')\n ) !== (\n ''+(newDef.primKey.keyPath||'')\n ) ||\n // Compare the autoIncrement flag also\n (oldDef.primKey.auto !== newDef.primKey.auto))\n {\n // Primary key has changed. Remove and re-add table.\n change.recreate = true;\n diff.change.push(change);\n } else {\n // Same primary key. Just find out what differs:\n const oldIndexes = oldDef.idxByName;\n const newIndexes = newDef.idxByName;\n let idxName: string;\n for (idxName in oldIndexes) {\n if (!newIndexes[idxName]) change.del.push(idxName);\n }\n for (idxName in newIndexes) {\n const oldIdx = oldIndexes[idxName],\n newIdx = newIndexes[idxName];\n if (!oldIdx) change.add.push(newIdx);\n else if (oldIdx.src !== newIdx.src) change.change.push(newIdx);\n }\n if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n diff.change.push(change);\n }\n }\n }\n }\n return diff;\n}\n\nexport function createTable(\n idbtrans: IDBTransaction,\n tableName: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n) {\n const store = idbtrans.db.createObjectStore(\n tableName,\n primKey.keyPath ?\n { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n { autoIncrement: primKey.auto }\n );\n indexes.forEach(idx => addIndex(store, idx));\n return store;\n}\n\nexport function createMissingTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n keys(newSchema).forEach(tableName => {\n if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n if (debug) console.debug('Dexie: Creating missing table', tableName);\n createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n }\n });\n}\n\nexport function deleteRemovedTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName =>\n newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName));\n}\n\nexport function addIndex(store: IDBObjectStore, idx: IndexSpec) {\n store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\n\nfunction buildGlobalSchema(\n db: Dexie,\n idbdb: IDBDatabase,\n tmpTrans: IDBTransaction\n) {\n const globalSchema = {};\n const dbStoreNames = slice(idbdb.objectStoreNames, 0);\n dbStoreNames.forEach(storeName => {\n const store = tmpTrans.objectStore(storeName);\n let keyPath = store.keyPath;\n const primKey = createIndexSpec(\n nameFromKeyPath(keyPath),\n keyPath || \"\",\n true,\n false,\n !!store.autoIncrement,\n keyPath && typeof keyPath !== \"string\",\n true\n );\n const indexes: IndexSpec[] = [];\n for (let j = 0; j < store.indexNames.length; ++j) {\n const idbindex = store.index(store.indexNames[j]);\n keyPath = idbindex.keyPath;\n var index = createIndexSpec(\n idbindex.name,\n keyPath,\n !!idbindex.unique,\n !!idbindex.multiEntry,\n false,\n keyPath && typeof keyPath !== \"string\",\n false\n );\n indexes.push(index);\n }\n globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n });\n return globalSchema;\n}\n\nexport function readGlobalSchema(db: Dexie, idbdb: IDBDatabase, tmpTrans: IDBTransaction) {\n db.verno = idbdb.version / 10;\n const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);\n db._storeNames = slice(idbdb.objectStoreNames, 0);\n setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\n\nexport function verifyInstalledSchema(db: Dexie, tmpTrans: IDBTransaction): boolean {\n const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans);\n const diff = getSchemaDiff(installedSchema, db._dbSchema);\n return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length));\n}\n\nexport function adjustToExistingIndexNames(db: Dexie, schema: DbSchema, idbtrans: IDBTransaction) {\n // Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db\n const storeNames = idbtrans.db.objectStoreNames;\n\n for (let i = 0; i < storeNames.length; ++i) {\n const storeName = storeNames[i];\n const store = idbtrans.objectStore(storeName);\n db._hasGetAll = 'getAll' in store;\n\n for (let j = 0; j < store.indexNames.length; ++j) {\n const indexName = store.indexNames[j];\n const keyPath = store.index(indexName).keyPath;\n const dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n if (schema[storeName]) {\n const indexSpec = schema[storeName].idxByName[dexieName];\n if (indexSpec) {\n indexSpec.name = indexName;\n delete schema[storeName].idxByName[dexieName];\n schema[storeName].idxByName[indexName] = indexSpec;\n }\n }\n }\n }\n\n // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579\n if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604)\n {\n db._hasGetAll = false;\n }\n}\n\nexport function parseIndexSyntax(primKeyAndIndexes: string): IndexSpec[] {\n return primKeyAndIndexes.split(',').map((index, indexNum) => {\n index = index.trim();\n const name = index.replace(/([&*]|\\+\\+)/g, \"\"); // Remove \"&\", \"++\" and \"*\"\n // Let keyPath of \"[a+b]\" be [\"a\",\"b\"]:\n const keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n\n return createIndexSpec(\n name,\n keyPath || null,\n /\\&/.test(index),\n /\\*/.test(index),\n /\\+\\+/.test(index),\n isArray(keyPath),\n indexNum === 0\n );\n });\n}\n","import { Version as IVersion } from '../../public/types/version';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { extend, keys } from '../../functions/utils';\nimport { Dexie } from '../dexie';\nimport { Transaction } from '../transaction';\nimport { removeTablesApi, setApiOnPlace, parseIndexSyntax } from './schema-helpers';\nimport { exceptions } from '../../errors';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\n\n/** class Version\n *\n * https://dexie.org/docs/Version/Version\n */\nexport class Version implements IVersion {\n db: Dexie;\n _cfg: {\n version: number,\n storesSource: { [tableName: string]: string | null },\n dbschema: DbSchema,\n tables: {},\n contentUpgrade: Function | null\n }\n\n _parseStoresSpec(stores: { [tableName: string]: string | null }, outSchema: DbSchema): any {\n keys(stores).forEach(tableName => {\n if (stores[tableName] !== null) {\n var indexes = parseIndexSyntax(stores[tableName]);\n var primKey = indexes.shift();\n primKey.unique = true;\n if (primKey.multi) throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n indexes.forEach(idx => {\n if (idx.auto) throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n if (!idx.keyPath) throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n });\n outSchema[tableName] = createTableSchema(tableName, primKey, indexes);\n }\n });\n }\n\n stores(stores: { [key: string]: string | null; }): IVersion {\n const db = this.db;\n this._cfg.storesSource = this._cfg.storesSource ?\n extend(this._cfg.storesSource, stores) :\n stores;\n const versions = db._versions;\n\n // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax.\n const storesSpec: { [key: string]: string; } = {};\n let dbschema = {};\n versions.forEach(version => { // 'versions' is always sorted by lowest version first.\n extend(storesSpec, version._cfg.storesSource);\n dbschema = (version._cfg.dbschema = {});\n version._parseStoresSpec(storesSpec, dbschema);\n });\n // Update the latest schema to this version\n db._dbSchema = dbschema;\n // Update APIs\n removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);\n setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n db._storeNames = keys(dbschema);\n return this;\n }\n\n upgrade(upgradeFunction: (trans: Transaction) => PromiseLike | void): Version {\n this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction);\n return this;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Version } from './version';\n\nexport interface VersionConstructor {\n new(versionNumber: number): Version;\n prototype: Version;\n}\n\n/** Generates a Version constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createVersionConstructor(db: Dexie) {\n return makeClassConstructor(\n Version.prototype,\n\n function Version(this: Version, versionNumber: number) {\n this.db = db;\n this._cfg = {\n version: versionNumber,\n storesSource: null,\n dbschema: {},\n tables: {},\n contentUpgrade: null\n };\n });\n\n}\n","import { Dexie } from \"../classes/dexie/dexie\";\nimport { Table } from \"../public/types/table\";\nimport { DBNAMES_DB } from \"../globals/constants\";\nimport { DexieDOMDependencies } from \"../public/types/dexie-dom-dependencies\";\nimport { nop } from \"../functions/chaining-functions\";\n\ntype IDBKeyNamesVar = typeof IDBKeyRange;\n\nfunction getDbNamesTable(indexedDB: IDBFactory, IDBKeyRange: IDBKeyNamesVar) {\n let dbNamesDB = indexedDB[\"_dbNamesDB\"];\n if (!dbNamesDB) {\n dbNamesDB = indexedDB[\"_dbNamesDB\"] = new Dexie(DBNAMES_DB, {\n addons: [],\n indexedDB,\n IDBKeyRange,\n });\n dbNamesDB.version(1).stores({ dbnames: \"name\" });\n }\n return dbNamesDB.table(\"dbnames\") as Table<{ name: string }, string>;\n}\n\nfunction hasDatabasesNative(indexedDB: IDBFactory) {\n return indexedDB && typeof indexedDB.databases === \"function\";\n}\n\nexport function getDatabaseNames({\n indexedDB,\n IDBKeyRange,\n}: DexieDOMDependencies) {\n return hasDatabasesNative(indexedDB)\n ? Promise.resolve(indexedDB.databases()).then((infos) =>\n infos\n // Select name prop of infos:\n .map((info) => info.name)\n // Filter out DBNAMES_DB as previous Dexie or browser version would not have included it in the result.\n .filter((name) => name !== DBNAMES_DB)\n )\n : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys();\n}\n\nexport function _onDatabaseCreated(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).put({name}).catch(nop);\n}\n\nexport function _onDatabaseDeleted(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop);\n}\n","import { newScope } from '../../helpers/promise';\nimport { PSD } from '../../helpers/promise';\n\nexport function vip (fn) {\n // To be used by subscribers to the on('ready') event.\n // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing.\n // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD\n // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since\n // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that.\n // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip()\n // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by\n // the caller will not resolve until database is opened.\n return newScope(function () {\n PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing.\n return fn();\n });\n}\n\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import { cmp } from \"../functions/cmp\";\nimport { extend, iteratorSymbol, props } from '../functions/utils';\nimport { IndexableType } from '../public';\nimport {\n EmptyRange,\n IntervalTree,\n IntervalTreeNode,\n RangeSetConstructor,\n RangeSetPrototype,\n} from \"../public/types/rangeset\";\n\n/* An interval tree implementation to efficiently detect overlapping ranges of queried indexes.\n *\n * https://en.wikipedia.org/wiki/Interval_tree\n * \n */\n\nfunction isEmptyRange(node: IntervalTree | {from: IndexableType, to: IndexableType}): node is EmptyRange {\n return !(\"from\" in node);\n}\n\nexport type RangeSet = RangeSetPrototype & IntervalTree;\n\nexport const RangeSet = function(fromOrTree: any, to?: any) {\n if (this) {\n // Called with new()\n extend(this, arguments.length ? {d:1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree} : {d:0});\n } else {\n // Called without new()\n const rv = new RangeSet();\n if (fromOrTree && (\"d\" in fromOrTree)) {\n extend(rv, fromOrTree);\n }\n return rv;\n }\n} as RangeSetConstructor;\n\nprops(RangeSet.prototype, {\n add(rangeSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n mergeRanges(this, rangeSet);\n return this;\n },\n addKey(key: IndexableType) {\n addRange(this, key, key);\n return this;\n },\n addKeys(keys: IndexableType[]) {\n keys.forEach(key => addRange(this, key, key));\n return this;\n },\n\n [iteratorSymbol](): Iterator {\n return getRangeSetIterator(this);\n }\n});\n\nfunction addRange(target: IntervalTree, from: IndexableType, to: IndexableType) {\n const diff = cmp(from, to);\n // cmp() returns NaN if one of the args are IDB-invalid keys.\n // Avoid storing invalid keys in rangeset:\n if (isNaN(diff)) return;\n\n // Caller is trying to add a range where from is greater than to:\n if (diff > 0) throw RangeError();\n \n if (isEmptyRange(target)) return extend(target, { from, to, d: 1 });\n const left = target.l;\n const right = target.r;\n if (cmp(to, target.from) < 0) {\n left\n ? addRange(left, from, to)\n : (target.l = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.to) > 0) {\n right\n ? addRange(right, from, to)\n : (target.r = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n // Now we have some kind of overlap. We will be able to merge the new range into the node or let it be swallowed.\n\n // Grow left?\n if (cmp(from, target.from) < 0) {\n target.from = from;\n target.l = null; // Cut off for now. Re-add later.\n target.d = right ? right.d + 1 : 1;\n }\n // Grow right?\n if (cmp(to, target.to) > 0) {\n target.to = to;\n target.r = null; // Cut off for now. Re-add later.\n target.d = target.l ? target.l.d + 1 : 1;\n }\n const rightWasCutOff = !target.r;\n // Re-add left?\n if (left && !target.l) {\n //Ranges to the left may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, left);\n }\n // Re-add right?\n if (right && rightWasCutOff) {\n //Ranges to the right may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, right);\n }\n}\n\nexport function mergeRanges(target: IntervalTree, newSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n function _addRangeSet(\n target: IntervalTree,\n { from, to, l, r }: IntervalTreeNode | {from: IndexableType, to: IndexableType, l?: undefined, r?: undefined}\n ) {\n addRange(target, from, to);\n if (l) _addRangeSet(target, l);\n if (r) _addRangeSet(target, r);\n }\n\n if(!isEmptyRange(newSet)) _addRangeSet(target, newSet);\n}\n\nexport function rangesOverlap(\n rangeSet1: IntervalTree,\n rangeSet2: IntervalTree\n): boolean {\n // Start iterating other from scratch.\n const i1 = getRangeSetIterator(rangeSet2);\n let nextResult1 = i1.next();\n if (nextResult1.done) return false;\n let a = nextResult1.value;\n\n // Start iterating this from start of other\n const i2 = getRangeSetIterator(rangeSet1);\n let nextResult2 = i2.next(a.from); // Start from beginning of other range\n let b = nextResult2.value;\n\n while (!nextResult1.done && !nextResult2.done) {\n if (cmp(b!.from, a.to) <= 0 && cmp(b!.to, a.from) >= 0) return true;\n cmp(a.from, b!.from) < 0\n ? (a = (nextResult1 = i1.next(b!.from)).value!) // a is behind. forward it to beginning of next b-range\n : (b = (nextResult2 = i2.next(a.from)).value); // b is behind. forward it to beginning of next a-range\n }\n return false;\n}\n\ntype RangeSetIteratorState =\n | {\n up?: RangeSetIteratorState;\n n: IntervalTreeNode;\n s: 0 | 1 | 2 | 3;\n }\n | undefined\n | null;\nexport function getRangeSetIterator(\n node: EmptyRange | IntervalTreeNode\n): Generator {\n let state: RangeSetIteratorState = isEmptyRange(node) ? null : { s: 0, n: node };\n\n return {\n next(key?) {\n const keyProvided = arguments.length > 0;\n while (state) {\n switch (state.s) {\n case 0:\n // Initial state for node.\n // Fast forward to leftmost node.\n state.s = 1;\n if (keyProvided) {\n while (state.n.l && cmp(key, state.n.from) < 0)\n state = { up: state, n: state.n.l, s: 1 };\n } else {\n while (state.n.l) state = { up: state, n: state.n.l, s: 1 };\n }\n // intentionally fall into case 1:\n case 1:\n // We're on a node where it's left part is already handled or does not exist.\n state.s = 2;\n if (!keyProvided || cmp(key, state.n.to) <= 0)\n return { value: state.n, done: false };\n case 2:\n // We've emitted our node and should continue with the right part or let parent take over from it's state 1\n if (state.n.r) {\n state.s = 3; // So when child is done, we know we're done.\n state = { up: state, n: state.n.r, s: 0 };\n continue; // Will fall in to case 0 with fast forward to left leaf of this subtree.\n }\n // intentionally fall into case 3:\n case 3:\n state = state.up;\n }\n }\n return { done: true };\n },\n } as Generator;\n}\n\nfunction rebalance(target: IntervalTreeNode) {\n const diff = (target.r?.d || 0) - (target.l?.d || 0);\n const r = diff > 1 ? \"r\" : diff < -1 ? \"l\" : \"\";\n if (r) {\n\n // Rotate (https://en.wikipedia.org/wiki/Tree_rotation)\n //\n // \n // [OLDROOT]\n // [OLDROOT.L] [NEWROOT]\n // [NEWROOT.L] [NEWROOT.R]\n //\n // Is going to become:\n //\n // \n // [NEWROOT]\n // [OLDROOT] [NEWROOT.R]\n // [OLDROOT.L] [NEWROOT.L] \n\n // * clone now has the props of OLDROOT\n // Plan:\n // * target must be given the props of NEWROOT\n // * target[l] must point to a new OLDROOT\n // * target[r] must point to NEWROOT.R\n // * OLDROOT[r] must point to NEWROOT.L\n const l = r === \"r\" ? \"l\" : \"r\"; // Support both left/right rotation\n const rootClone = { ...target };\n // We're gonna copy props from target's right node into target so that target will\n // have same range as old target[r] (instead of changing pointers, we copy values.\n // that way we do not need to adjust pointers in parents).\n const oldRootRight = target[r]; \n target.from = oldRootRight.from;\n target.to = oldRootRight.to;\n target[r] = oldRootRight[r];\n rootClone[r] = oldRootRight[l];\n target[l] = rootClone;\n rootClone.d = computeDepth(rootClone);\n }\n target.d = computeDepth(target);\n}\n\nfunction computeDepth({ r, l }: Pick) {\n return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;\n}\n","import { cloneSimpleObjectTree, deepClone, keys, objectIsEmpty } from \"../functions/utils\";\nimport { mergeRanges, RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\n\nexport function extendObservabilitySet(\n target: ObservabilitySet,\n newSet: ObservabilitySet\n): ObservabilitySet {\n keys(newSet).forEach(part => {\n if (target[part]) mergeRanges(target[part], newSet[part]);\n else target[part] = cloneSimpleObjectTree(newSet[part]); // Somewhat faster\n });\n return target;\n}\n","import { rangesOverlap } from '../helpers/rangeset';\nimport { ObservabilitySet } from '../public/types/db-events';\n\nexport function obsSetsOverlap(os1: ObservabilitySet, os2: ObservabilitySet) {\n return os1.all || os2.all || Object.keys(os1).some(\n (key) => os2[key] && rangesOverlap(os2[key], os1[key])\n );\n}\n","import { type GlobalQueryCache } from \"../../public/types/cache\";\n\nexport const cache: GlobalQueryCache = {}\n","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport { extendObservabilitySet } from '../extend-observability-set';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { cache } from './cache';\n\nlet unsignaledParts: ObservabilitySet = {};\nlet isTaskEnqueued = false;\n\nexport function signalSubscribersLazily(part: ObservabilitySet, optimistic = false) {\n extendObservabilitySet(unsignaledParts, part);\n if (!isTaskEnqueued) {\n isTaskEnqueued = true;\n setTimeout(() => {\n isTaskEnqueued = false;\n const parts = unsignaledParts;\n unsignaledParts = {};\n signalSubscribersNow(parts, false);\n }, 0);\n }\n}\n\nexport function signalSubscribersNow(\n updatedParts: ObservabilitySet,\n deleteAffectedCacheEntries = false\n) {\n const queriesToSignal = new Set<() => void>();\n if (updatedParts.all) {\n // Signal all subscribers to requery.\n for (const tblCache of Object.values(cache)) {\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n } else {\n for (const key in updatedParts) {\n const parts = /^idb\\:\\/\\/(.*)\\/(.*)\\//.exec(key);\n if (parts) {\n const [, dbName, tableName] = parts;\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (tblCache)\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n }\n }\n // Now when affected cache entries are removed, signal collected subscribers to requery.\n queriesToSignal.forEach((requery) => requery());\n}\n\nfunction collectTableSubscribers(\n tblCache: TblQueryCache,\n updatedParts: ObservabilitySet,\n outQueriesToSignal: Set<() => void>,\n deleteAffectedCacheEntries: boolean\n) {\n const updatedEntryLists: [string, CacheEntry[]][] = [];\n for (const [indexName, entries] of Object.entries(tblCache.queries.query)) {\n const filteredEntries: CacheEntry[] = [];\n for (const entry of entries) {\n if (obsSetsOverlap(updatedParts, entry.obsSet)) {\n // This query is affected by the mutation. Remove it from cache\n // and signal all subscribers to requery.\n entry.subscribers.forEach((requery) => outQueriesToSignal.add(requery));\n } else if (deleteAffectedCacheEntries) {\n filteredEntries.push(entry);\n }\n }\n // Collect cache entries to be updated\n if (deleteAffectedCacheEntries)\n updatedEntryLists.push([indexName, filteredEntries]);\n }\n if (deleteAffectedCacheEntries) {\n for (const [indexName, filteredEntries] of updatedEntryLists) {\n tblCache.queries.query[indexName] = filteredEntries;\n }\n }\n}\n","import { Dexie } from './dexie';\nimport * as Debug from '../../helpers/debug';\nimport { rejection } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { eventRejectHandler, preventDefault } from '../../functions/event-wrappers';\nimport Promise, { wrap } from '../../helpers/promise';\nimport { connections } from '../../globals/constants';\nimport { runUpgraders, readGlobalSchema, adjustToExistingIndexNames, verifyInstalledSchema, patchCurrentVersion } from '../version/schema-helpers';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { _onDatabaseCreated } from '../../helpers/database-enumerator';\nimport { vip } from './vip';\nimport { promisableChain, nop } from '../../functions/chaining-functions';\nimport { generateMiddlewareStacks } from './generate-middleware-stacks';\nimport { slice } from '../../functions/utils';\nimport safari14Workaround from 'safari-14-idb-fix';\nimport { type ObservabilitySet } from '../../public/types/db-events';\nimport { RangeSet } from '../../helpers/rangeset';\nimport { DEXIE_STORAGE_MUTATED_EVENT_NAME, globalEvents } from '../../globals/global-events';\nimport { signalSubscribersNow } from '../../live-query/cache/signalSubscribers';\n\nexport function dexieOpen (db: Dexie) {\n const state = db._state;\n const {indexedDB} = db._deps;\n if (state.isBeingOpened || db.idbdb)\n return state.dbReadyPromise.then(() => state.dbOpenError ?\n rejection (state.dbOpenError) :\n db);\n state.isBeingOpened = true;\n state.dbOpenError = null;\n state.openComplete = false;\n const openCanceller = state.openCanceller;\n let nativeVerToOpen = Math.round(db.verno * 10);\n let schemaPatchMode = false;\n\n function throwIfCancelled() {\n // If state.openCanceller object reference is replaced, it means db.close() has been called,\n // meaning this open flow should be cancelled.\n if (state.openCanceller !== openCanceller) throw new exceptions.DatabaseClosed('db.open() was cancelled');\n }\n \n // Function pointers to call when the core opening process completes.\n let resolveDbReady = state.dbReadyResolve,\n // upgradeTransaction to abort on failure.\n upgradeTransaction: (IDBTransaction | null) = null,\n wasCreated = false;\n\n const tryOpenDB = () => new Promise((resolve, reject) => {\n throwIfCancelled();\n // If no API, throw!\n if (!indexedDB) throw new exceptions.MissingAPI();\n const dbName = db.name;\n \n const req = state.autoSchema || !nativeVerToOpen ?\n indexedDB.open(dbName) :\n indexedDB.open(dbName, nativeVerToOpen);\n if (!req) throw new exceptions.MissingAPI(); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134\n req.onerror = eventRejectHandler(reject);\n req.onblocked = wrap(db._fireOnBlocked);\n req.onupgradeneeded = wrap (e => {\n upgradeTransaction = req.transaction;\n if (state.autoSchema && !db._options.allowEmptyDB) { // Unless an addon has specified db._allowEmptyDB, lets make the call fail.\n // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases.\n // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we\n // do not create a new database by accident here.\n req.onerror = preventDefault; // Prohibit onabort error from firing before we're done!\n upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.)\n // Close database and delete it.\n req.result.close();\n const delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here!\n delreq.onsuccess = delreq.onerror = wrap(() => {\n reject (new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`));\n });\n } else {\n upgradeTransaction.onerror = eventRejectHandler(reject);\n const oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix.\n wasCreated = oldVer < 1;\n db.idbdb = req.result;\n if (schemaPatchMode) {\n patchCurrentVersion(db, upgradeTransaction);\n }\n runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n }\n }, reject);\n \n req.onsuccess = wrap (() => {\n // Core opening procedure complete. Now let's just record some stuff.\n upgradeTransaction = null;\n const idbdb = db.idbdb = req.result;\n\n const objectStoreNames = slice(idbdb.objectStoreNames);\n if (objectStoreNames.length > 0) try {\n const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n if (state.autoSchema) readGlobalSchema(db, idbdb, tmpTrans);\n else {\n adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) {\n console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this.`);\n idbdb.close();\n nativeVerToOpen = idbdb.version + 1;\n schemaPatchMode = true;\n return resolve (tryOpenDB()); // Try again with new version (nativeVerToOpen\n }\n }\n generateMiddlewareStacks(db, tmpTrans);\n } catch (e) {\n // Safari 8 may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120.\n // BUGBUG: It will bail out anyway as of Dexie 3.\n // Should we support Safari 8 anymore? Believe all\n // Dexie users use the shim for that platform anyway?!\n // If removing Safari 8 support, go ahead and remove the safariMultiStoreFix() function\n // as well as absurd upgrade version quirk for Safari.\n }\n \n connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari.\n \n idbdb.onversionchange = wrap(ev => {\n state.vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari)\n db.on(\"versionchange\").fire(ev);\n });\n \n idbdb.onclose = wrap(ev => {\n db.on(\"close\").fire(ev);\n });\n\n if (wasCreated) _onDatabaseCreated(db._deps, dbName);\n\n resolve();\n\n }, reject);\n }).catch(err => {\n switch (err?.name) {\n case \"UnknownError\":\n if (state.PR1398_maxLoop > 0) {\n // Bug in Chrome after clearing site data\n // https://github.com/dexie/Dexie.js/issues/543#issuecomment-1795736695\n state.PR1398_maxLoop--;\n console.warn('Dexie: Workaround for Chrome UnknownError on open()');\n return tryOpenDB();\n }\n break;\n case \"VersionError\":\n if (nativeVerToOpen > 0) {\n nativeVerToOpen = 0;\n return tryOpenDB();\n }\n break;\n }\n return Promise.reject(err);\n });\n \n // safari14Workaround = Workaround by jakearchibald for new nasty bug in safari 14.\n return Promise.race([\n openCanceller,\n (typeof navigator === 'undefined' ? Promise.resolve() : safari14Workaround()).then(tryOpenDB)\n ]).then(() => {\n // Before finally resolving the dbReadyPromise and this promise,\n // call and await all on('ready') subscribers:\n // Dexie.vip() makes subscribers able to use the database while being opened.\n // This is a must since these subscribers take part of the opening procedure.\n throwIfCancelled();\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>db.on.ready.fire(db.vip))).then(function fireRemainders() {\n if (state.onReadyBeingFired.length > 0) {\n // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed.\n let remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>remainders(db.vip))).then(fireRemainders)\n }\n });\n }).finally(()=>{\n if (state.openCanceller === openCanceller) {\n // Only modify state if not cancelled in the mean time.\n state.onReadyBeingFired = null;\n state.isBeingOpened = false;\n }\n }).catch(err => {\n state.dbOpenError = err; // Record the error. It will be used to reject further promises of db operations.\n try {\n // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit.\n upgradeTransaction && upgradeTransaction.abort();\n } catch { }\n if (openCanceller === state.openCanceller) {\n // Still in the same open flow - The error reason was not due to external call to db.close().\n // Make sure to call db.close() to finalize resources.\n db._close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh.\n }\n return rejection (err);\n }).finally(()=>{\n state.openComplete = true;\n resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters.\n }).then(()=>{\n if (wasCreated) {\n // Propagate full range on primary keys and indexes on all tables now that the DB is ready and opened,\n // and all upgraders and on('ready') subscribers have run.\n const everything: ObservabilitySet = {};\n db.tables.forEach(table => {\n table.schema.indexes.forEach(idx => {\n if (idx.name) everything[`idb://${db.name}/${table.name}/${idx.name}`] = new RangeSet(-Infinity, [[[]]]);\n });\n everything[`idb://${db.name}/${table.name}/`] = everything[`idb://${db.name}/${table.name}/:dels`] = new RangeSet(-Infinity, [[[]]]);\n });\n // Database was created. If another tab had it open when it was deleted and reopened, that tab must be updated now.\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything);\n // Wipe the cache and trigger optimistic queries:\n signalSubscribersNow(everything, true);\n }\n // Resolve the db.open() with the db instance.\n return db;\n });\n}\n","import { isArray } from '../functions/utils';\n\nexport function awaitIterator (iterator: Iterator) {\n var callNext = result => iterator.next(result),\n doThrow = error => iterator.throw(error),\n onSuccess = step(callNext),\n onError = step(doThrow);\n\n function step(getNext: (any)=>any) {\n return (val?) => {\n var next = getNext(val),\n value = next.value;\n\n return next.done ? value :\n (!value || typeof value.then !== 'function' ?\n isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :\n value.then(onSuccess, onError));\n };\n }\n\n return step(callNext)();\n}\n","import { TransactionMode } from '../../public/types/transaction-mode';\nimport { errnames, exceptions } from '../../errors';\nimport { flatten, isAsyncFunction } from '../../functions/utils';\nimport { Dexie } from './dexie';\nimport { Transaction } from '../transaction';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise, {\n PSD,\n NativePromise,\n decrementExpectedAwaits,\n rejection,\n incrementExpectedAwaits\n} from '../../helpers/promise';\n\nexport function extractTransactionArgs(mode: TransactionMode, _tableArgs_, scopeFunc) {\n // Let table arguments be all arguments between mode and last argument.\n var i = arguments.length;\n if (i < 2) throw new exceptions.InvalidArgument(\"Too few arguments\");\n // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments)\n // and clone arguments except the first one into local var 'args'.\n var args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments.\n scopeFunc = args.pop();\n var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays.\n return [mode, tables, scopeFunc];\n}\n\nexport function enterTransactionScope(\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n parentTransaction: Transaction | undefined,\n scopeFunc: ()=>PromiseLike | any\n) {\n return Promise.resolve().then(() => {\n // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction().\n const transless = PSD.transless || PSD;\n // Our transaction.\n //return new Promise((resolve, reject) => {\n const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n trans.explicit = true;\n // Let the transaction instance be part of a Promise-specific data (PSD) value.\n const zoneProps = {\n trans: trans,\n transless: transless\n };\n\n if (parentTransaction) {\n // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing)\n trans.idbtrans = parentTransaction.idbtrans;\n } else {\n try {\n trans.create(); // Create the native transaction so that complete() or error() will trigger even if no operation is made upon it.\n // @ts-ignore Mark the idbtrans object with \"_explicit\". DBCore middleware won't have access to Dexie trans but will need to have this info.\n trans.idbtrans._explicit = true;\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(() => enterTransactionScope(\n db,\n mode,\n storeNames,\n null,\n scopeFunc\n ));\n }\n return rejection(ex);\n }\n }\n\n // Support for native async await.\n const scopeFuncIsAsync = isAsyncFunction(scopeFunc);\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n\n let returnValue;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = scopeFunc.call(trans, trans);\n if (returnValue) {\n if (scopeFuncIsAsync) {\n // scopeFunc is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n } else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {\n // scopeFunc returned an iterator with throw-support. Handle yield as await.\n returnValue = awaitIterator(returnValue);\n }\n }\n }, zoneProps);\n return (returnValue && typeof returnValue.then === 'function' ?\n // Promise returned. User uses promise-style transactions.\n Promise.resolve(returnValue).then(x => trans.active ?\n x // Transaction still active. Continue.\n : rejection(new exceptions.PrematureCommit(\n \"Transaction committed too early. See http://bit.ly/2kdckMn\")))\n // No promise returned. Wait for all outstanding promises before continuing. \n : promiseFollowed.then(() => returnValue)\n ).then(x => {\n // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion:\n if (parentTransaction) trans._resolve();\n // wait for trans._completion\n // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves)\n return trans._completion.then(() => x);\n }).catch(e => {\n trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc!\n return rejection(e);\n });\n });\n}\n","import {\n DBCore,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryRequest,\n DBCoreRangeType,\n DBCoreOpenCursorRequest,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreTable,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { getKeyExtractor } from './get-key-extractor';\nimport { getKeyPathAlias } from './dbcore-indexeddb';\nimport { Middleware } from '../public/types/middleware';\n\ninterface VirtualIndex extends DBCoreIndex {\n /** True if this index is virtual, i.e. represents a compound index internally,\n * but makes it act as as having a subset of its keyPaths.\n */\n isVirtual: boolean;\n\n /** Number of keypaths that this index comprises. Can be 0..N.\n * Note: This is the length of the *virtual index*, not the real index.\n */\n keyLength: number;\n\n /** Number of popped keypaths from the real index.\n */\n keyTail: number;\n\n /** LowLevelIndex represents the actual IndexedDB index behind it */\n lowLevelIndex: DBCoreIndex;\n}\n\n// Move into some util:\nexport function pad (a: any | any[], value: any, count: number) {\n const result = isArray(a) ? a.slice() : [a];\n for (let i=0; i 0;\n const virtualIndex = {\n ...lowLevelIndex,\n name: isVirtual\n ? `${keyPathAlias}(virtual-from:${lowLevelIndex.name})`\n : lowLevelIndex.name,\n lowLevelIndex,\n isVirtual,\n keyTail,\n keyLength,\n extractKey: getKeyExtractor(keyPath),\n unique: !isVirtual && lowLevelIndex.unique\n };\n indexList.push(virtualIndex);\n if (!virtualIndex.isPrimaryKey) {\n allVirtualIndexes.push(virtualIndex);\n }\n if (keyLength > 1) {\n const virtualKeyPath = keyLength === 2 ?\n keyPath[0] : // This is a compound [a, b]. Add a virtual normal index a.\n keyPath.slice(0, keyLength - 1); // This is compound [a,b,c]. Add virtual compound [a,b].\n addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n }\n indexList.sort((a,b) => a.keyTail - b.keyTail); // Shortest keyTail is the best one (represents real index)\n return virtualIndex;\n }\n \n const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n indexLookup[\":id\"] = [primaryKey];\n for (const index of schema.indexes) {\n addVirtualIndexes(index.keyPath, 0, index);\n }\n \n function findBestIndex(keyPath: null | string | string[]): VirtualIndex {\n const result = indexLookup[getKeyPathAlias(keyPath)];\n return result && result[0];\n }\n \n function translateRange (range: DBCoreKeyRange, keyTail: number): DBCoreKeyRange {\n return {\n type: range.type === DBCoreRangeType.Equal ?\n DBCoreRangeType.Range :\n range.type,\n lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),\n lowerOpen: true, // doesn't matter true or false\n upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),\n upperOpen: true // doesn't matter true or false\n };\n }\n \n function translateRequest (req: DBCoreQueryRequest): DBCoreQueryRequest;\n function translateRequest (req: DBCoreOpenCursorRequest): DBCoreOpenCursorRequest;\n function translateRequest (req: DBCoreCountRequest): DBCoreCountRequest {\n const index = req.query.index as VirtualIndex;\n return index.isVirtual ? {\n ...req,\n query: {\n index: index.lowLevelIndex,\n range: translateRange(req.query.range, index.keyTail)\n }\n } : req;\n }\n \n const result: DBCoreTable = {\n ...table,\n schema: {\n ...schema,\n primaryKey,\n indexes: allVirtualIndexes,\n getIndexByKeyPath: findBestIndex\n },\n\n count(req) {\n return table.count(translateRequest(req));\n }, \n \n query(req) {\n return table.query(translateRequest(req));\n },\n \n openCursor(req) {\n const {keyTail, isVirtual, keyLength} = (req.query.index as VirtualIndex);\n if (!isVirtual) return table.openCursor(req);\n \n function createVirtualCursor(cursor: DBCoreCursor) : DBCoreCursor {\n function _continue (key?: any) {\n key != null ?\n cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :\n req.unique ?\n cursor.continue(\n cursor.key.slice(0, keyLength)\n .concat(req.reverse\n ? down.MIN_KEY\n : down.MAX_KEY, keyTail)\n ) :\n cursor.continue()\n }\n const virtualCursor = Object.create(cursor, {\n continue: {value: _continue},\n continuePrimaryKey: {\n value(key: any, primaryKey: any) {\n cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n }\n },\n primaryKey: {\n get() {\n return cursor.primaryKey;\n }\n },\n key: {\n get() {\n const key = cursor.key as any[]; // A virtual cursor always operates on compound key\n return keyLength === 1 ?\n key[0] : // Cursor.key should not be an array.\n key.slice(0, keyLength); // Cursor.key should be first part of array.\n }\n },\n value: {\n get() {\n return cursor.value;\n }\n }\n });\n return virtualCursor;\n }\n \n return table.openCursor(translateRequest(req))\n .then(cursor => cursor && createVirtualCursor(cursor));\n }\n };\n return result;\n }\n }\n}\n\nexport const virtualIndexMiddleware : Middleware = {\n stack: \"dbcore\",\n name: \"VirtualIndexMiddleware\",\n level: 1,\n create: createVirtualIndexMiddleware\n};\n\n","import { keys, hasOwn, toStringTag } from './utils';\n\nexport function getObjectDiff(a: any, b: any, rv?: any, prfx?: string) {\n // Compares objects a and b and produces a diff object.\n rv = rv || {};\n prfx = prfx || '';\n keys(a).forEach((prop) => {\n if (!hasOwn(b, prop)) {\n // Property removed\n rv[prfx + prop] = undefined;\n } else {\n var ap = a[prop],\n bp = b[prop];\n if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {\n const apTypeName = toStringTag(ap);\n const bpTypeName = toStringTag(bp);\n\n if (apTypeName !== bpTypeName) {\n rv[prfx + prop] = b[prop]; // Property changed to other type\n } else if (apTypeName === 'Object') {\n // Pojo objects (not Date, ArrayBuffer, Array etc). Go deep.\n getObjectDiff(ap, bp, rv, prfx + prop + '.');\n } else if (ap !== bp) {\n // Values differ.\n // Could have checked if Date, arrays or binary types have same\n // content here but I think that would be a suboptimation.\n // Prefer simplicity.\n rv[prfx + prop] = b[prop];\n }\n } else if (ap !== bp) rv[prfx + prop] = b[prop]; // Primitive value changed\n }\n });\n keys(b).forEach((prop) => {\n if (!hasOwn(a, prop)) {\n rv[prfx + prop] = b[prop]; // Property added\n }\n });\n return rv;\n}\n","import {\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreIndex,\n DBCoreTable,\n} from \"../public/types/dbcore\";\n\nexport function getEffectiveKeys (\n primaryKey: DBCoreIndex,\n req: (Pick & {keys?: any[]}) | Pick)\n{\n //const {outbound} = primaryKey;\n if (req.type === 'delete') return req.keys;\n return req.keys || req.values.map(primaryKey.extractKey)\n}\n","import {\n DBCore,\n DBCoreTable,\n DBCoreMutateResponse,\n DBCoreDeleteRangeRequest,\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreTransaction,\n DBCoreKeyRange\n} from \"../public/types/dbcore\";\nimport { nop } from '../functions/chaining-functions';\nimport { hasOwn, setByKeyPath } from '../functions/utils';\nimport { getObjectDiff } from \"../functions/get-object-diff\";\nimport { PSD } from '../helpers/promise';\n//import { LockableTableMiddleware } from '../dbcore/lockable-table-middleware';\nimport { getEffectiveKeys } from '../dbcore/get-effective-keys';\nimport { Middleware } from '../public/types/middleware';\nimport { Transaction } from '../classes/transaction';\n\nexport const hooksMiddleware: Middleware = {\n stack: \"dbcore\",\n name: \"HooksMiddleware\",\n level: 2,\n create: (downCore: DBCore) => ({\n ...downCore,\n table(tableName: string) {\n const downTable = downCore.table(tableName);\n const {primaryKey} = downTable.schema;\n \n const tableMiddleware: DBCoreTable = {\n ...downTable,\n mutate(req):Promise {\n const dxTrans = PSD.trans as Transaction;\n // Hooks can be transaction-bound. Need to grab them from transaction.table and not\n // db.table!\n const {deleting, creating, updating} = dxTrans.table(tableName).hook;\n switch (req.type) {\n case 'add':\n if (creating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'put':\n if (creating.fire === nop && updating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'delete':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'deleteRange':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>deleteRange(req), true);\n }\n // Any of the breaks above happened (no hooks) - do the default:\n return downTable.mutate(req);\n\n\n function addPutOrDelete(req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest): Promise {\n const dxTrans = PSD.trans;\n const keys = req.keys || getEffectiveKeys(primaryKey, req);\n if (!keys) throw new Error(\"Keys missing\");\n // Clone Request and set keys arg\n req = req.type === 'add' || req.type === 'put' ?\n {...req, keys} :\n {...req};\n if (req.type !== 'delete') req.values = [...req.values];\n if (req.keys) req.keys = [...req.keys];\n \n return getExistingValues(downTable, req, keys).then (existingValues => {\n const contexts = keys.map((key, i) => {\n const existingValue = existingValues[i];\n const ctx = { onerror: null, onsuccess: null };\n if (req.type === 'delete') {\n // delete operation\n deleting.fire.call(ctx, key, existingValue, dxTrans);\n } else if (req.type === 'add' || existingValue === undefined) {\n // The add() or put() resulted in a create\n const generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);\n if (key == null && generatedPrimaryKey != null) {\n key = generatedPrimaryKey;\n req.keys[i] = key;\n if (!primaryKey.outbound) {\n setByKeyPath(req.values[i], primaryKey.keyPath, key);\n }\n }\n } else {\n // The put() operation resulted in an update\n const objectDiff = getObjectDiff(existingValue, req.values[i]);\n const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n if (additionalChanges) {\n const requestedValue = req.values[i];\n Object.keys(additionalChanges).forEach(keyPath => {\n if (hasOwn(requestedValue, keyPath)) {\n // keyPath is already present as a literal property of the object\n requestedValue[keyPath] = additionalChanges[keyPath];\n } else {\n // keyPath represents a new or existing path into the object\n setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]);\n }\n });\n }\n }\n return ctx;\n });\n return downTable.mutate(req).then(({failures, results, numFailures, lastResult}) => {\n for (let i=0; i {\n contexts.forEach(ctx => ctx.onerror && ctx.onerror(error));\n return Promise.reject(error);\n });\n });\n }\n \n function deleteRange(req: DBCoreDeleteRangeRequest): Promise {\n return deleteNextChunk(req.trans, req.range, 10000);\n }\n \n function deleteNextChunk(trans: DBCoreTransaction, range: DBCoreKeyRange, limit: number) {\n // Query what keys in the DB within the given range\n return downTable.query({trans, values: false, query: {index: primaryKey, range}, limit})\n .then(({result}) => {\n // Given a set of keys, bulk delete those using the same procedure as in addPutOrDelete().\n // This will make sure that deleting hook is called.\n return addPutOrDelete({type: 'delete', keys: result, trans}).then(res => {\n if (res.numFailures > 0) return Promise.reject(res.failures[0]);\n if (result.length < limit) {\n return {failures: [], numFailures: 0, lastResult: undefined} as DBCoreMutateResponse;\n } else {\n return deleteNextChunk(trans, {...range, lower: result[result.length - 1], lowerOpen: true}, limit);\n }\n });\n })\n }\n }\n };\n //const {lock, lockableMiddleware} = LockableTableMiddleware(tableMiddleware);\n\n return tableMiddleware;\n },\n }) as DBCore\n};\n\nfunction getExistingValues(\n table: DBCoreTable,\n req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest,\n effectiveKeys: any[]\n) {\n return req.type === \"add\"\n ? Promise.resolve([])\n : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: \"immutable\" });\n}\n","import { deepClone } from \"../functions/utils\";\nimport { DBCore } from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport Promise from \"../helpers/promise\";\nimport { cmp } from '../functions/cmp';\n\nexport function getFromTransactionCache(\n keys: readonly any[],\n cache: { keys: any[]; values: any[] } | undefined | null,\n clone?: boolean\n) {\n try {\n if (!cache) return null;\n if (cache.keys.length < keys.length) return null;\n const result: any[] = [];\n // Compare if the exact same order of keys was retrieved in same transaction:\n // Allow some cached keys to be omitted from provided set of keys\n // Use case: 1. getMany(keys) 2. update a subset of those 3. call put with the updated ones ==> middlewares should be able to find old values\n for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) {\n if (cmp(cache.keys[i], keys[j]) !== 0) continue;\n result.push(clone ? deepClone(cache.values[i]) : cache.values[i]);\n ++j;\n }\n // If got all keys caller was looking for, return result.\n return result.length === keys.length ? result : null;\n } catch {\n return null;\n }\n}\n\nexport const cacheExistingValuesMiddleware: Middleware = {\n stack: \"dbcore\",\n level: -1,\n create: (core) => {\n return {\n table: (tableName) => {\n const table = core.table(tableName);\n return {\n ...table,\n getMany: (req) => {\n if (!req.cache) {\n return table.getMany(req);\n }\n const cachedResult = getFromTransactionCache(\n req.keys,\n req.trans[\"_cache\"],\n req.cache === \"clone\"\n );\n if (cachedResult) {\n return Promise.resolve(cachedResult);\n }\n return table.getMany(req).then((res) => {\n req.trans[\"_cache\"] = {\n keys: req.keys,\n values: req.cache === \"clone\" ? deepClone(res) : res,\n };\n return res;\n });\n },\n mutate: (req) => {\n // Invalidate cache on any mutate except \"add\" which can't change existing values:\n if (req.type !== \"add\") req.trans[\"_cache\"] = null;\n return table.mutate(req);\n },\n };\n },\n };\n },\n};\n","import { DBCore, DBCoreTable } from '../../public/types/dbcore';\nimport { LiveQueryContext } from '../live-query';\n\nexport function isCachableContext(ctx: LiveQueryContext, table: DBCoreTable) {\n return (\n ctx.trans.mode === 'readonly' &&\n !!ctx.subscr &&\n !ctx.trans.explicit &&\n ctx.trans.db._options.cache !== 'disabled' &&\n !table.schema.primaryKey.outbound\n );\n}\n\n","import { DBCoreCountRequest, DBCoreGetManyRequest, DBCoreGetRequest, DBCoreOpenCursorRequest, DBCoreQueryRequest } from '../../public/types/dbcore';\n\n\nexport function isCachableRequest(type: string, req: Partial) {\n switch (type) {\n case 'query':\n return req.values && !req.unique;\n case 'get':\n return false;\n case 'getMany':\n return false;\n case 'count':\n return false;\n case 'openCursor':\n return false;\n }\n}\n","import { LiveQueryContext } from \".\";\nimport { getFromTransactionCache } from \"../dbcore/cache-existing-values-middleware\";\nimport { getEffectiveKeys } from \"../dbcore/get-effective-keys\";\nimport { exceptions } from \"../errors\";\nimport { cmp } from \"../functions/cmp\";\nimport { isArray, keys } from \"../functions/utils\";\nimport { PSD } from \"../helpers/promise\";\nimport { RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport {\n DBCore,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreGetManyRequest,\n DBCoreGetRequest,\n DBCoreIndex,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreQueryResponse,\n DBCoreTable,\n DBCoreTableSchema,\n DBCoreTransaction,\n} from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport { isCachableContext } from \"./cache/is-cachable-context\";\nimport { isCachableRequest } from \"./cache/is-cachable-request\";\nimport { extendObservabilitySet } from \"./extend-observability-set\";\n\nexport const observabilityMiddleware: Middleware = {\n stack: \"dbcore\",\n level: 0,\n name: \"Observability\",\n create: (core) => {\n const dbName = core.schema.name;\n const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);\n\n return {\n ...core,\n transaction: (stores, mode, options) => {\n if (PSD.subscr && mode !== 'readonly') {\n throw new exceptions.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${(PSD as LiveQueryContext).querier}`);\n }\n return core.transaction(stores, mode, options);\n },\n table: (tableName) => {\n const table = core.table(tableName);\n const { schema } = table;\n const { primaryKey, indexes } = schema;\n const { extractKey, outbound } = primaryKey;\n const indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(\n (index) => index.compound && (index.keyPath as string[]).includes(primaryKey.keyPath as string)\n );\n const tableClone: DBCoreTable = {\n ...table,\n mutate: (req) => {\n const trans = req.trans as DBCoreTransaction & {\n mutatedParts?: ObservabilitySet;\n };\n const mutatedParts = req.mutatedParts || (req.mutatedParts = {});\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (mutatedParts[part] ||\n (mutatedParts[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n\n const { type } = req;\n let [keys, newObjs] =\n req.type === \"deleteRange\"\n ? [req.range] // keys will be an DBCoreKeyRange object - transformed later on to a [from,to]-style range.\n : req.type === \"delete\"\n ? [req.keys] // keys known already here. newObjs will be undefined.\n : req.values.length < 50\n ? [getEffectiveKeys(primaryKey, req).filter(id => id), req.values] // keys except autoIncremented - they will be added later on.\n : []; // keys and newObjs will both be undefined - changeSpec will become true (changed for entire table)\n\n const oldCache = req.trans[\"_cache\"];\n\n // Add the mutated table and optionally keys to the mutatedTables set on the transaction.\n // Used by subscribers to txcommit event and for Collection.prototype.subscribe().\n if (isArray(keys)) {\n // keys is an array - delete, add or put of less than 50 rows.\n // Individual keys (add put or delete)\n pkRangeSet.addKeys(keys);\n // Only get oldObjs if they have been cached recently\n // (This applies to Collection.modify() only, but also if updating/deleting hooks have subscribers)\n const oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null;\n\n // Supply detailed values per index for both old and new objects:\n if (!oldObjs) {\n // add, delete or put and we don't know old values.\n // Indicate this in the \":dels\" part, for the sake of count() and primaryKeys() queries only!\n delsRangeSet.addKeys(keys);\n }\n if (oldObjs || newObjs) {\n // No matter if knowning oldObjs or not, track the indices if it's a put, add or delete.\n trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);\n }\n } else if (keys) {\n // keys is a DBCoreKeyRange object. Transform it to [from,to]-style range.\n // As we can't know deleted index ranges, mark index-based subscriptions must trigger.\n const range = { from: keys.lower, to: keys.upper };\n delsRangeSet.add(range);\n // deleteRange. keys is a DBCoreKeyRange objects. Transform it to [from,to]-style range.\n pkRangeSet.add(range);\n } else {\n // Too many requests to record the details without slowing down write performance.\n // Let's just record a generic large range on primary key, the virtual :dels index and\n // all secondary indices:\n pkRangeSet.add(FULL_RANGE);\n delsRangeSet.add(FULL_RANGE);\n schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE));\n }\n\n return table.mutate(req).then((res) => {\n // Merge the mutated parts from the request into the transaction's mutatedParts\n // now when the request went fine.\n if (keys && (req.type === 'add' || req.type === 'put')) {\n // Less than 50 requests (keys truthy) (otherwise we've added full range anyway)\n // autoincrement means we might not have got all keys until now\n pkRangeSet.addKeys(res.results);\n if (indexesWithAutoIncPK) {\n // Dexie Issue 1946:\n // If an auto-incremented primary key is part of a compound index,\n // we need to compute the resulting value of that index after inserting\n // the rows.\n indexesWithAutoIncPK.forEach(idx => {\n // Extract values of this compound index where primary key is not yet set:\n const idxVals = req.values.map(v => idx.extractKey(v));\n // Find the position of the primary key in the index:\n const pkPos = (idx.keyPath as string[]).findIndex(prop => prop === primaryKey.keyPath);\n // Update idxVals with the resulting primary keys to complete the index value:\n res.results!.forEach(pk => idxVals[pkPos] = pk);\n // Add the updated index to the rangeset:\n getRangeSet(idx.name).addKeys(idxVals);\n });\n }\n }\n trans.mutatedParts = extendObservabilitySet (\n trans.mutatedParts || {},\n mutatedParts\n );\n return res;\n });\n },\n };\n\n const getRange: (req: any) => [DBCoreIndex, RangeSet] = ({\n query: { index, range },\n }:\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest) => [\n index,\n new RangeSet(range.lower ?? core.MIN_KEY, range.upper ?? core.MAX_KEY),\n ];\n\n const readSubscribers: {[method in\n Exclude]: \n (req: any) => [DBCoreIndex, RangeSet]\n } = {\n get: (req) => [primaryKey, new RangeSet(req.key)],\n getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)],\n count: getRange,\n query: getRange,\n openCursor: getRange,\n }\n\n keys(readSubscribers).forEach((method: 'get' | 'getMany' | 'count' | 'query' | 'openCursor') => {\n tableClone[method] = function (\n req:\n | DBCoreGetRequest\n | DBCoreGetManyRequest\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest\n ) {\n const { subscr } = PSD as LiveQueryContext;\n const isLiveQuery = !!subscr;\n let cachable = isCachableContext(PSD as LiveQueryContext, table) && isCachableRequest(method, req);\n const obsSet = cachable\n ? req.obsSet = {} // Implicit read transaction - track changes for this query only for the request's duration\n : subscr; // Explicit read transaction - track changes across entire live query\n\n if (isLiveQuery) {\n // Current zone want's to track all queries so they can be subscribed to.\n // (The query is executed within a \"liveQuery\" zone)\n // Check whether the query applies to a certain set of ranges:\n // Track what we should be observing:\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (obsSet[part] ||\n (obsSet[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const [queriedIndex, queriedRanges] = readSubscribers[method](req);\n // A generic rule here: queried ranges should always be subscribed to.\n if (method === 'query' && queriedIndex.isPrimaryKey && !(req as DBCoreQueryRequest).values) {\n // A pure primay-key based Collection where only .primaryKeys() is requested. Don't wakeup on other changes than added or deleted primary keys within queried range.\n delsRangeSet.add(queriedRanges);\n } else {\n getRangeSet(queriedIndex.name || \"\").add(queriedRanges);\n }\n if (!queriedIndex.isPrimaryKey) {\n // Only count(), query() and openCursor() operates on secondary indices.\n // Since put(), delete() and deleteRange() mutations may happen without knowing oldObjs,\n // the mutate() method will be missing what secondary indices that are being deleted from\n // the subscribed range. We are working around this issue by recording all the resulting\n // primary keys from the queries. This only works for those kinds of queries where we can\n // derive the primary key from the result.\n // In this block we are accomplishing this using various strategies depending on the properties\n // of the query result.\n\n if (method === \"count\") {\n // We've got a problem! Delete and put mutations happen without known the oldObjs.\n // Those mutation could change the count.\n // Solution: Dedicated \":dels\" url represends a subscription to all mutations without oldObjs\n // (specially triggered in the mutators put(), delete() and deleteRange() when they don't know oldObject)\n delsRangeSet.add(FULL_RANGE);\n } else {\n // openCursor() or query()\n\n // Prepare a keysPromise in case the we're doing an IDBIndex.getAll() on a store with outbound keys.\n const keysPromise =\n method === \"query\" &&\n outbound &&\n (req as DBCoreQueryRequest).values &&\n table.query({\n ...(req as DBCoreQueryRequest),\n values: false,\n });\n\n return table[method].apply(this, arguments).then((res) => {\n if (method === \"query\") {\n if (outbound && (req as DBCoreQueryRequest).values) {\n // If keys are outbound, we can't use extractKey to map what keys to observe.\n // We've queried an index (like 'dateTime') on an outbound table\n // and retrieve a list of objects\n // from who we cannot know their primary keys.\n // \"Luckily\" though, we've prepared the keysPromise to assist us in exact this condition.\n return keysPromise.then(\n ({ result: resultingKeys }: DBCoreQueryResponse) => {\n pkRangeSet.addKeys(resultingKeys);\n return res;\n }\n );\n }\n // query() inbound values, keys or outbound keys. Secondary indexes only since\n // for primary keys we would only add results within the already registered range.\n const pKeys = (req as DBCoreQueryRequest).values\n ? (res as DBCoreQueryResponse).result.map(extractKey)\n : (res as DBCoreQueryResponse).result;\n if ((req as DBCoreQueryRequest).values) {\n // Subscribe to any mutation made on the returned keys,\n // so that we detect both deletions and updated properties.\n pkRangeSet.addKeys(pKeys);\n } else {\n // Subscribe only to mutations on the returned keys\n // in case the mutator was unable to know oldObjs.\n // If it has oldObj, the mutator won't put anything in \":dels\" because\n // it can more fine-grained put the exact removed and added index value in the correct\n // index range that we subscribe to in the queried range sets.\n // We don't load values so a change on a property outside our index will not\n // require us to re-execute the query.\n delsRangeSet.addKeys(pKeys);\n }\n } else if (method === \"openCursor\") {\n // Caller requests a cursor.\n // For the same reason as when method===\"query\", we only need to observe\n // those keys whose values are possibly used or rendered - which could\n // only happen on keys where they get the cursor's key, primaryKey or value.\n const cursor: DBCoreCursor | null = res;\n const wantValues = (req as DBCoreOpenCursorRequest).values;\n return (\n cursor &&\n Object.create(cursor, {\n key: {\n get() {\n delsRangeSet.addKey(cursor.primaryKey);\n return cursor.key;\n },\n },\n primaryKey: {\n get() {\n const pkey = cursor.primaryKey;\n delsRangeSet.addKey(pkey);\n return pkey;\n },\n },\n value: {\n get() {\n wantValues && pkRangeSet.addKey(cursor.primaryKey);\n return cursor.value;\n },\n },\n })\n );\n }\n return res;\n });\n }\n }\n }\n return table[method].apply(this, arguments);\n };\n });\n return tableClone;\n },\n };\n },\n};\n\nfunction trackAffectedIndexes(\n getRangeSet: (index: string) => RangeSet,\n schema: DBCoreTableSchema,\n oldObjs: readonly any[] | undefined,\n newObjs: readonly any[] | undefined\n) {\n function addAffectedIndex(ix: DBCoreIndex) {\n const rangeSet = getRangeSet(ix.name || \"\");\n function extractKey(obj: any) {\n return obj != null ? ix.extractKey(obj) : null;\n }\n const addKeyOrKeys = (key: any) => ix.multiEntry && isArray(key)\n // multiEntry and the old property was an array - add each array entry to the rangeSet:\n ? key.forEach(key => rangeSet.addKey(key))\n // Not multiEntry or the old property was not an array - add each array entry to the rangeSet:\n : rangeSet.addKey(key);\n\n (oldObjs || newObjs).forEach((_, i) => {\n const oldKey = oldObjs && extractKey(oldObjs[i]);\n const newKey = newObjs && extractKey(newObjs[i]);\n if (cmp(oldKey, newKey) !== 0) {\n // The index has changed. Add both old and new value of the index.\n if (oldKey != null) addKeyOrKeys(oldKey); // If oldKey is invalid key, addKey() will be a noop.\n if (newKey != null) addKeyOrKeys(newKey); // If newKey is invalid key, addKey() will be a noop.\n }\n });\n }\n schema.indexes.forEach(addAffectedIndex);\n}\n","import { delArrayItem, isArray } from '../../functions/utils';\nimport { TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreMutateRequest,\n DBCoreMutateResponse,\n} from '../../public/types/dbcore';\n\nexport function adjustOptimisticFromFailures(\n tblCache: TblQueryCache,\n req: DBCoreMutateRequest,\n res: DBCoreMutateResponse\n): DBCoreMutateRequest {\n if (res.numFailures === 0) return req;\n if (req.type === 'deleteRange') {\n // numFailures > 0 means the deleteRange operation failed in its whole.\n return null;\n }\n\n const numBulkOps = req.keys\n ? req.keys.length\n : 'values' in req && req.values\n ? req.values.length\n : 1;\n if (res.numFailures === numBulkOps) {\n // Same number of failures as the number of ops. This means that all ops failed.\n return null;\n }\n\n const clone: DBCoreMutateRequest = { ...req };\n\n if (isArray(clone.keys)) {\n clone.keys = clone.keys.filter((_, i) => !(i in res.failures));\n }\n if ('values' in clone && isArray(clone.values)) {\n clone.values = clone.values.filter((_, i) => !(i in res.failures));\n }\n return clone;\n}\n","import { cmp } from '../../functions/cmp';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function isAboveLower(key: IndexableType, range: DBCoreKeyRange) {\n return range.lower === undefined\n ? true // lower is less than anything because it is undefined\n : range.lowerOpen\n ? cmp(key, range.lower) > 0 // lowerOpen: Exclude lower bound\n : cmp(key, range.lower) >= 0; // !lowerOpen: Include lower bound\n}\n\nexport function isBelowUpper(key: IndexableType, range: DBCoreKeyRange) {\n return range.upper === undefined\n ? true // upper is greater than anything because it is undefined\n : range.upperOpen\n ? cmp(key, range.upper) < 0 // upperOpen: Exclude upper bound\n : cmp(key, range.upper) <= 0; // !upperOpen: Include upper bound\n}\n\nexport function isWithinRange(key: IndexableType, range: DBCoreKeyRange) {\n return isAboveLower(key, range) && isBelowUpper(key, range);\n}\n","import { cmp } from '../../functions/cmp';\nimport { deepClone, isArray } from '../../functions/utils';\nimport { RangeSet, rangesOverlap } from '../../helpers/rangeset';\nimport { CacheEntry } from '../../public/types/cache';\nimport {\n DBCoreIndex,\n DBCoreMutateRequest,\n DBCoreQueryRequest,\n DBCoreTable,\n} from '../../public/types/dbcore';\nimport { isWithinRange } from './is-within-range';\n\nexport function applyOptimisticOps(\n result: any[],\n req: DBCoreQueryRequest,\n ops: DBCoreMutateRequest[] | undefined,\n table: DBCoreTable,\n cacheEntry: CacheEntry,\n immutable: boolean\n): any[] {\n if (!ops || ops.length === 0) return result;\n const index = req.query.index;\n const { multiEntry } = index;\n const queryRange = req.query.range;\n const primaryKey = table.schema.primaryKey;\n const extractPrimKey = primaryKey.extractKey!;\n const extractIndex = index.extractKey!;\n const extractLowLevelIndex = (index.lowLevelIndex || index).extractKey!;\n\n let finalResult = ops.reduce((result, op) => {\n let modifedResult = result;\n const includedValues =\n op.type === 'add' || op.type === 'put'\n ? op.values.filter((v) => {\n const key = extractIndex(v);\n return multiEntry && isArray(key) // multiEntry index work like plain index unless key is array\n ? key.some((k) => isWithinRange(k, queryRange)) // multiEntry and array key\n : isWithinRange(key, queryRange); // multiEntry but not array key\n }).map(v => {\n v = deepClone(v);// v might come from user so we can't just freeze it.\n if (immutable) Object.freeze(v);\n return v;\n })\n : [];\n switch (op.type) {\n case 'add':\n modifedResult = result.concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'put':\n const keySet = new RangeSet().addKeys(\n op.values.map((v) => extractPrimKey(v))\n );\n modifedResult = result\n .filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keySet);\n })\n .concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'delete':\n const keysToDelete = new RangeSet().addKeys(op.keys);\n modifedResult = result.filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keysToDelete);\n });\n\n break;\n case 'deleteRange':\n const range = op.range;\n modifedResult = result.filter((item) => !isWithinRange(extractPrimKey(item), range));\n break;\n }\n return modifedResult;\n }, result);\n\n // If no changes were made, we can return the original result.\n if (finalResult === result) return result;\n\n // Sort the result on sortIndex:\n finalResult.sort((a, b) =>\n cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) ||\n cmp(extractPrimKey(a), extractPrimKey(b))\n );\n\n // If we have a limit we need to respect it:\n if (req.limit && req.limit < Infinity) {\n if (finalResult.length > req.limit) {\n finalResult.length = req.limit; // Cut of any extras after sorting correctly.\n } else if (result.length === req.limit && finalResult.length < req.limit) {\n // We're missing some items because of the limit. We need to add them back.\n // The easiest way is to mark the cache entry as dirty, which will cause\n // it to be requeried after the write-transaction successfully completes.\n cacheEntry.dirty = true;\n }\n }\n return immutable ? Object.freeze(finalResult) as any[] : finalResult;\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function areRangesEqual(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n cmp(r1.lower, r2.lower) === 0 &&\n cmp(r1.upper, r2.upper) === 0 &&\n !!r1.lowerOpen === !!r2.lowerOpen &&\n !!r1.upperOpen === !!r2.upperOpen\n );\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function compareLowers(lower1: any, lower2: any, lowerOpen1: boolean, lowerOpen2: boolean) {\n if (lower1 === undefined) return lower2 !== undefined ? -1 : 0;\n if (lower2 === undefined) return 1; // since lower1 !== undefined\n const c = cmp(lower1, lower2);\n if (c === 0) {\n if (lowerOpen1 && lowerOpen2) return 0;\n if (lowerOpen1) return 1\n if (lowerOpen2) return -1;\n }\n return c;\n}\n\nexport function compareUppers(upper1: any, upper2: any, upperOpen1: boolean, upperOpen2: boolean) {\n if (upper1 === undefined) return upper2 !== undefined ? 1 : 0;\n if (upper2 === undefined) return -1; // since upper1 !== undefined\n const c = cmp(upper1, upper2);\n if (c === 0) {\n if (upperOpen1 && upperOpen2) return 0;\n if (upperOpen1) return -1\n if (upperOpen2) return 1;\n }\n return c;\n}\n\nexport function isSuperRange(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 &&\n compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0\n );\n}","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreCountRequest,\n DBCoreQueryRequest,\n} from '../../public/types/dbcore';\nimport { areRangesEqual } from './are-ranges-equal';\nimport { cache } from './cache';\nimport { isSuperRange } from './is-super-range';\n\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query',\n req: DBCoreQueryRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'count',\n req: DBCoreCountRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query' | 'count',\n req: Partial & Partial\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]] {\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return [];\n const queries = tblCache.queries[type];\n if (!queries) return [null, false, tblCache, null];\n const indexName = req.query ? req.query.index.name : null;\n const entries = queries[indexName || ''];\n if (!entries) return [null, false, tblCache, null];\n\n switch (type) {\n case 'query':\n const equalEntry = entries.find(\n (entry) =>\n (entry.req as DBCoreQueryRequest).limit === req.limit &&\n (entry.req as DBCoreQueryRequest).values === req.values &&\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n if (equalEntry)\n return [\n equalEntry,\n true, // exact match\n tblCache,\n entries,\n ];\n const superEntry = entries.find((entry) => {\n const limit = 'limit' in entry.req ? entry.req.limit : Infinity;\n return (\n limit >= req.limit &&\n (req.values ? (entry.req as DBCoreQueryRequest).values : true) &&\n isSuperRange(entry.req.query.range, req.query.range)\n );\n });\n return [superEntry, false, tblCache, entries];\n case 'count':\n const countQuery = entries.find((entry) =>\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n return [countQuery, !!countQuery, tblCache, entries];\n }\n}\n","import { delArrayItem } from \"../../functions/utils\";\nimport { CacheEntry } from \"../../public/types/cache\";\n\nexport function subscribeToCacheEntry(cacheEntry: CacheEntry, container: CacheEntry[], requery: ()=>void, signal: AbortSignal) {\n cacheEntry.subscribers.add(requery);\n signal.addEventListener(\"abort\", () => {\n cacheEntry.subscribers.delete(requery);\n if (cacheEntry.subscribers.size === 0) {\n enqueForDeletion(cacheEntry, container);\n }\n });\n}\n\n\nfunction enqueForDeletion(cacheEntry: CacheEntry, container: CacheEntry[]) {\n setTimeout(() => {\n if (cacheEntry.subscribers.size === 0) { // Still empty (no new subscribers readded after grace time)\n delArrayItem(container, cacheEntry);\n }\n }, 3000);\n}\n","import { LiveQueryContext } from '..';\nimport type { Transaction } from '../../classes/transaction';\nimport { getEffectiveKeys } from '../../dbcore/get-effective-keys';\nimport { deepClone, delArrayItem, setByKeyPath } from '../../functions/utils';\nimport DexiePromise, { PSD } from '../../helpers/promise';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport {\n DBCore, DBCoreMutateRequest, DBCoreMutateResponse, DBCoreQueryRequest,\n DBCoreQueryResponse\n} from '../../public/types/dbcore';\nimport { Middleware } from '../../public/types/middleware';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { adjustOptimisticFromFailures } from './adjust-optimistic-request-from-failures';\nimport { applyOptimisticOps } from './apply-optimistic-ops';\nimport { cache } from './cache';\nimport { findCompatibleQuery } from './find-compatible-query';\nimport { isCachableContext } from './is-cachable-context';\nimport { isCachableRequest } from './is-cachable-request';\nimport { signalSubscribersLazily } from './signalSubscribers';\nimport { subscribeToCacheEntry } from './subscribe-cachentry';\n\nexport const cacheMiddleware: Middleware = {\n stack: 'dbcore',\n level: 0,\n name: 'Cache',\n create: (core) => {\n const dbName = core.schema.name;\n const coreMW: DBCore = {\n ...core,\n transaction: (stores, mode, options) => {\n const idbtrans = core.transaction(\n stores,\n mode,\n options\n ) as IDBTransaction & {\n mutatedParts?: ObservabilitySet;\n _explicit?: boolean;\n };\n // Maintain TblQueryCache.ops array when transactions commit or abort\n if (mode === 'readwrite') {\n const ac = new AbortController();\n const { signal } = ac;\n const endTransaction = (wasCommitted: boolean) => () => {\n ac.abort();\n if (mode === 'readwrite') {\n // Collect which subscribers to notify:\n const affectedSubscribers = new Set<()=>void>();\n\n // Go through all tables in transaction and check if they have any optimistic updates\n for (const storeName of stores) {\n const tblCache = cache[`idb://${dbName}/${storeName}`];\n if (tblCache) {\n const table = core.table(storeName);\n // Pick optimistic ops that are part of this transaction\n const ops = tblCache.optimisticOps.filter(\n (op) => op.trans === idbtrans\n );\n // Transaction was marked as _explicit in enterTransactionScope(), transaction-helpers.ts.\n if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) {\n // Invalidate all queries that overlap with the mutated parts and signal their subscribers\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) {\n delArrayItem(entries, entry); // Remove the entry from the cache so it can be refreshed\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n } else if (ops.length > 0) {\n // Remove them from the optimisticOps array\n tblCache.optimisticOps = tblCache.optimisticOps.filter(\n (op) => op.trans !== idbtrans\n );\n // Commit or abort the optimistic updates\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (\n entry.res != null && // if entry.promise but not entry.res, we're fine. Query will resume now and get the result.\n idbtrans.mutatedParts/* &&\n obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)*/\n ) {\n if (wasCommitted && !entry.dirty) {\n const freezeResults = Object.isFrozen(entry.res);\n const modRes = applyOptimisticOps(\n entry.res as any[],\n entry.req,\n ops,\n table,\n entry,\n freezeResults\n );\n if (entry.dirty) {\n // Found out at this point that the entry is dirty - not to rely on!\n delArrayItem(entries, entry);\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n } else if (modRes !== entry.res) {\n entry.res = modRes;\n // Update promise\n entry.promise = DexiePromise.resolve({result: modRes} satisfies DBCoreQueryResponse);\n \n // No need to notify subscribers. They already have this value.\n // We have just updated the value of the cache without having to\n // requery the database - because we know the result for this\n // query based on computing the operations and applying them\n // to the previous result.\n }\n } else {\n if (entry.dirty) {\n // If the entry is dirty we need to get rid of it so that\n // a new entry will be created when the query is run again.\n delArrayItem(entries, entry);\n }\n // If we're not committing, we need to notify subscribers that the\n // optimistic updates are no longer valid.\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n }\n }\n }\n }\n affectedSubscribers.forEach((requery) => requery());\n }\n };\n idbtrans.addEventListener('abort', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('error', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('complete', endTransaction(true), {\n signal,\n });\n }\n return idbtrans;\n },\n table(tableName: string) {\n const downTable = core.table(tableName);\n const primKey = downTable.schema.primaryKey;\n const tableMW = {\n ...downTable,\n mutate(req: DBCoreMutateRequest): Promise {\n const trans = PSD.trans as Transaction;\n if (\n primKey.outbound || // Non-inbound tables are harded to apply optimistic updates on because we can't know primary key of results\n trans.db._options.cache === 'disabled' || // User has opted-out from caching\n trans.explicit // It's an explicit write transaction being made. Don't affect cache until transaction commits.\n ) {\n // Just forward the request to the core.\n return downTable.mutate(req);\n }\n // Find the TblQueryCache for this table:\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return downTable.mutate(req);\n\n const promise = downTable.mutate(req);\n if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(key => key == null))) {\n // There are some autoIncremented keys not set yet. Need to wait for completion before we can reliably enqueue the operation.\n // (or there are too many objects so we lazy out to avoid performance bottleneck for large bulk inserts)\n promise.then((res) => { // We need to extract result keys and generate cloned values with the keys set (so that applyOptimisticOps can work)\n // But we have a problem! The req.mutatedParts is still not complete so we have to actively add the keys to the unsignaledParts set manually.\n const reqWithResolvedKeys = {\n ...req,\n values: req.values.map((value, i) => {\n const valueWithKey = primKey.keyPath?.includes('.')\n ? deepClone(value)\n : {\n ...value,\n };\n setByKeyPath(valueWithKey, primKey.keyPath, res.results![i]);\n return valueWithKey;\n })\n };\n const adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res);\n tblCache.optimisticOps.push(adjustedReq);\n // Signal subscribers after the observability middleware has complemented req.mutatedParts with the new keys.\n // We must queue the task so that we get the req.mutatedParts updated by observability middleware first.\n // If we refactor the dependency between observability middleware and this middleware we might not need to queue the task.\n queueMicrotask(()=>req.mutatedParts && signalSubscribersLazily(req.mutatedParts)); // Reason for double laziness: in user awaits put and then does another put, signal once.\n });\n } else {\n // Enque the operation immediately\n tblCache.optimisticOps.push(req);\n // Signal subscribers that there are mutated parts\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts);\n promise.then((res) => {\n if (res.numFailures > 0) {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n const adjustedReq = adjustOptimisticFromFailures(tblCache, req, res);\n if (adjustedReq) {\n tblCache.optimisticOps.push(adjustedReq);\n }\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n }\n });\n promise.catch(()=> {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n });\n }\n return promise;\n },\n query(req: DBCoreQueryRequest): Promise {\n if (!isCachableContext(PSD, downTable) || !isCachableRequest(\"query\", req)) return downTable.query(req);\n const freezeResults =\n (PSD as LiveQueryContext).trans?.db._options.cache === 'immutable';\n const { requery, signal } = PSD as LiveQueryContext;\n let [cacheEntry, exactMatch, tblCache, container] =\n findCompatibleQuery(dbName, tableName, 'query', req);\n if (cacheEntry && exactMatch) {\n cacheEntry.obsSet = req.obsSet!; // So that optimistic result is monitored.\n // How? - because observability-middleware will track result where optimistic\n // mutations are applied and record it in the cacheEntry.\n // TODO: CHANGE THIS! The difference is resultKeys only.\n // Wanted behavior:\n // * cacheEntry obsSet should represent the obsSet without optimistic updates (so it can be checked when merging ops in tx commit)\n // * cacheEntry optimisticObsSet should represent the obsSet with current optimistic updates. It should be updated when adding an op\n // by adding the primary keys of the put/add/delete operation to the set.\n // * observability-middleware should stop recording req.obsSet when a cache entry exact match is found because it won't be used anyway.\n // I'm thinking of merging observability-middleware with cache-middleware into one single middleware because the dependencies are too\n // tight between them.\n } else {\n // --> TODO here: If not exact match, check if we have a superset to extract\n // the data from.\n\n // No cached result found. We need to query the database and cache the result.\n const promise = downTable.query(req).then((res) => {\n // Freeze or clone results\n const result = res.result;\n if (cacheEntry) cacheEntry.res = result;\n if (freezeResults) {\n // For performance reasons don't deep freeze.\n // Only freeze the top-level array and its items.\n // This is good enough to teach users that the result must be treated as immutable\n // without enforcing it recursively on the entire result (which is not even possible\n // for things like Date objects and typed arrays)\n for (let i = 0, l = result.length; i < l; ++i) {\n Object.freeze(result[i]);\n }\n Object.freeze(result);\n } else {\n // If not frozen, we need to clone the result to avoid user mutating the cache\n // When we do this, user's must feel conformable with the fact that the result\n // can be mutated deeply - user is not expected to have any respect for immutability.\n res.result = deepClone(result);\n }\n return res;\n }).catch(error => {\n // In case the query operation failed, we need to remove it from the cache\n // so that subsequent calls does not get the same error but re-evaluate\n // the query.\n if (container && cacheEntry) delArrayItem(container, cacheEntry);\n return Promise.reject(error);\n });\n cacheEntry = {\n obsSet: req.obsSet!,\n promise,\n subscribers: new Set(),\n type: 'query',\n req,\n dirty: false,\n };\n if (container) {\n container.push(cacheEntry);\n } else {\n container = [cacheEntry];\n if (!tblCache) {\n tblCache = cache[`idb://${dbName}/${tableName}`] = {\n queries: {\n query: {},\n count: {},\n },\n objs: new Map(),\n optimisticOps: [],\n unsignaledParts: {}\n };\n }\n tblCache.queries.query[req.query.index.name || ''] = container;\n }\n }\n subscribeToCacheEntry(cacheEntry, container!, requery, signal);\n return cacheEntry.promise.then((res: DBCoreQueryResponse) => {\n return {\n result: applyOptimisticOps(\n res.result,\n req,\n tblCache?.optimisticOps,\n downTable,\n cacheEntry!,\n freezeResults\n ) as any[], // readonly any[]\n };\n });\n },\n };\n return tableMW;\n },\n };\n return coreMW;\n },\n};\n\n\n","import { type Dexie } from \"../classes/dexie\";\nimport { type Table } from \"../classes/table\";\nimport { type Transaction } from \"../classes/transaction\";\n\nexport function vipify(\n target: T,\n vipDb: Dexie\n): T {\n return new Proxy(target, {\n get (target, prop, receiver) {\n // The \"db\" prop of the table or transaction is the only one we need to\n // override. The rest of the props can be accessed from the original\n // object.\n if (prop === 'db') return vipDb;\n return Reflect.get(target, prop, receiver);\n }\n });\n}\n","// Import types from the public API\nimport { Dexie as IDexie } from \"../../public/types/dexie\";\nimport { DexieOptions, DexieConstructor } from \"../../public/types/dexie-constructor\";\nimport { DbEvents } from \"../../public/types/db-events\";\n//import { PromiseExtended, PromiseExtendedConstructor } from '../../public/types/promise-extended';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from \"../../public/types/table-schema\";\nimport { DbSchema } from '../../public/types/db-schema';\n\n// Internal imports\nimport { Table, TableConstructor, createTableConstructor } from \"../table\";\nimport { Collection, CollectionConstructor, createCollectionConstructor } from '../collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { WhereClauseConstructor, createWhereClauseConstructor } from '../where-clause/where-clause-constructor';\nimport { Transaction } from '../transaction';\nimport { TransactionConstructor, createTransactionConstructor } from '../transaction/transaction-constructor';\nimport { Version } from \"../version/version\";\nimport { VersionConstructor, createVersionConstructor } from '../version/version-constructor';\n\n// Other imports...\nimport { DexieEventSet } from '../../public/types/dexie-event-set';\nimport { DexieExceptionClasses } from '../../public/types/errors';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\nimport Promise, { PSD, globalPSD } from '../../helpers/promise';\nimport { extend, override, keys, hasOwn } from '../../functions/utils';\nimport Events from '../../helpers/Events';\nimport { maxString, connections, READONLY, READWRITE } from '../../globals/constants';\nimport { getMaxKey } from '../../functions/quirks';\nimport { exceptions } from '../../errors';\nimport { lowerVersionFirst } from '../version/schema-helpers';\nimport { dexieOpen } from './dexie-open';\nimport { wrap } from '../../helpers/promise';\nimport { _onDatabaseDeleted } from '../../helpers/database-enumerator';\nimport { eventRejectHandler } from '../../functions/event-wrappers';\nimport { extractTransactionArgs, enterTransactionScope } from './transaction-helpers';\nimport { TransactionMode } from '../../public/types/transaction-mode';\nimport { rejection } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { DBCore } from '../../public/types/dbcore';\nimport { Middleware, DexieStacks } from '../../public/types/middleware';\nimport { virtualIndexMiddleware } from '../../dbcore/virtual-index-middleware';\nimport { hooksMiddleware } from '../../hooks/hooks-middleware';\nimport { IndexableType } from '../../public';\nimport { observabilityMiddleware } from '../../live-query/observability-middleware';\nimport { cacheExistingValuesMiddleware } from '../../dbcore/cache-existing-values-middleware';\nimport { cacheMiddleware } from \"../../live-query/cache/cache-middleware\";\nimport { vipify } from \"../../helpers/vipify\";\n\nexport interface DbReadyState {\n dbOpenError: any;\n isBeingOpened: boolean;\n onReadyBeingFired: undefined | Function[];\n openComplete: boolean;\n dbReadyResolve: () => void;\n dbReadyPromise: Promise;\n cancelOpen: (reason?: Error) => void;\n openCanceller: Promise & { _stackHolder?: Error };\n autoSchema: boolean;\n vcFired?: boolean;\n PR1398_maxLoop?: number;\n autoOpen?: boolean;\n}\n\nexport class Dexie implements IDexie {\n _options: DexieOptions;\n _state: DbReadyState;\n _versions: Version[];\n _storeNames: string[];\n _deps: DexieDOMDependencies;\n _allTables: { [name: string]: Table; };\n _createTransaction: (this: Dexie, mode: IDBTransactionMode, storeNames: ArrayLike, dbschema: { [tableName: string]: TableSchema; }, parentTransaction?: Transaction) => Transaction;\n _dbSchema: { [tableName: string]: TableSchema; };\n _hasGetAll?: boolean;\n _maxKey: IndexableType;\n _fireOnBlocked: (ev: Event) => void;\n _middlewares: {[StackName in keyof DexieStacks]?: Middleware[]} = {};\n _vip?: boolean;\n _novip: Dexie;// db._novip is to escape to orig db from db.vip.\n core: DBCore;\n\n name: string;\n verno: number = 0;\n idbdb: IDBDatabase | null;\n vip: Dexie;\n on: DbEvents;\n\n Table: TableConstructor;\n WhereClause: WhereClauseConstructor;\n Collection: CollectionConstructor;\n Version: VersionConstructor;\n Transaction: TransactionConstructor;\n static disableBfCache?: boolean;\n\n constructor(name: string, options?: DexieOptions) {\n const deps = (Dexie as any as DexieConstructor).dependencies;\n this._options = options = {\n // Default Options\n addons: (Dexie as any as DexieConstructor).addons, // Pick statically registered addons by default\n autoOpen: true, // Don't require db.open() explicitely.\n // Default DOM dependency implementations from static prop.\n indexedDB: deps.indexedDB, // Backend IndexedDB api. Default to browser env.\n IDBKeyRange: deps.IDBKeyRange, // Backend IDBKeyRange api. Default to browser env.\n cache: 'cloned', // Default to cloned for backward compatibility. For best performance and least memory consumption use 'immutable'.\n ...options\n }; \n this._deps = {\n indexedDB: options.indexedDB as IDBFactory,\n IDBKeyRange: options.IDBKeyRange as typeof IDBKeyRange\n };\n const {\n addons,\n } = options;\n this._dbSchema = {};\n this._versions = [];\n this._storeNames = [];\n this._allTables = {};\n this.idbdb = null;\n this._novip = this;\n const state: DbReadyState = {\n dbOpenError: null,\n isBeingOpened: false,\n onReadyBeingFired: null,\n openComplete: false,\n dbReadyResolve: nop,\n dbReadyPromise: null as Promise,\n cancelOpen: nop,\n openCanceller: null as Promise,\n autoSchema: true,\n PR1398_maxLoop: 3,\n autoOpen: options.autoOpen,\n };\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n this._state = state;\n this.name = name;\n this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", \"close\", { ready: [promisableChain, nop] }) as DbEvents;\n this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => {\n return (subscriber, bSticky) => {\n (Dexie as any as DexieConstructor).vip(() => {\n const state = this._state;\n if (state.openComplete) {\n // Database already open. Call subscriber asap.\n if (!state.dbOpenError) Promise.resolve().then(subscriber);\n // bSticky: Also subscribe to future open sucesses (after close / reopen) \n if (bSticky) subscribe(subscriber);\n } else if (state.onReadyBeingFired) {\n // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected\n state.onReadyBeingFired.push(subscriber);\n if (bSticky) subscribe(subscriber);\n } else {\n // Database not yet open. Subscribe to it.\n subscribe(subscriber);\n // If bSticky is falsy, make sure to unsubscribe subscriber when fired once.\n const db = this;\n if (!bSticky) subscribe(function unsubscribe() {\n db.on.ready.unsubscribe(subscriber);\n db.on.ready.unsubscribe(unsubscribe);\n });\n }\n });\n }\n });\n\n // Create derived classes bound to this instance of Dexie:\n this.Collection = createCollectionConstructor(this);\n this.Table = createTableConstructor(this);\n this.Transaction = createTransactionConstructor(this);\n this.Version = createVersionConstructor(this);\n this.WhereClause = createWhereClauseConstructor(this);\n\n // Default subscribers to \"versionchange\" and \"blocked\".\n // Can be overridden by custom handlers. If custom handlers return false, these default\n // behaviours will be prevented.\n this.on(\"versionchange\", ev => {\n // Default behavior for versionchange event is to close database connection.\n // Caller can override this behavior by doing db.on(\"versionchange\", function(){ return false; });\n // Let's not block the other window from making it's delete() or open() call.\n // NOTE! This event is never fired in IE,Edge or Safari.\n if (ev.newVersion > 0)\n console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`);\n else\n console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`);\n this.close({disableAutoOpen: false});\n // In many web applications, it would be recommended to force window.reload()\n // when this event occurs. To do that, subscribe to the versionchange event\n // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion)\n // The reason for this is that your current web app obviously has old schema code that needs\n // to be updated. Another window got a newer version of the app and needs to upgrade DB but\n // your window is blocking it unless we close it here.\n });\n this.on(\"blocked\", ev => {\n if (!ev.newVersion || ev.newVersion < ev.oldVersion)\n console.warn(`Dexie.delete('${this.name}') was blocked`);\n else\n console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`);\n });\n\n this._maxKey = getMaxKey(options.IDBKeyRange as typeof IDBKeyRange);\n\n this._createTransaction = (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n parentTransaction?: Transaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction);\n\n this._fireOnBlocked = ev => {\n this.on(\"blocked\").fire(ev);\n // Workaround (not fully*) for missing \"versionchange\" event in IE,Edge and Safari:\n connections\n .filter(c => c.name === this.name && c !== this && !c._state.vcFired)\n .map(c => c.on(\"versionchange\").fire(ev));\n }\n\n // Default middlewares:\n this.use(cacheExistingValuesMiddleware);\n this.use(cacheMiddleware);\n this.use(observabilityMiddleware);\n this.use(virtualIndexMiddleware);\n this.use(hooksMiddleware);\n\n const vipDB = new Proxy(this, {\n get: (_, prop, receiver) => {\n if (prop === '_vip') return true;\n if (prop === 'table') return (tableName: string) => vipify(this.table(tableName), vipDB);\n const rv = Reflect.get(_, prop, receiver);\n if (rv instanceof Table) return vipify(rv, vipDB);\n if (prop === 'tables') return (rv as Table[]).map(t => vipify(t, vipDB));\n if (prop === '_createTransaction') return function() {\n const tx: Transaction = (rv as typeof this._createTransaction).apply(this, arguments);\n return vipify(tx, vipDB);\n }\n return rv;\n }\n });\n this.vip = vipDB;\n\n // Call each addon:\n addons.forEach(addon => addon(this));\n }\n\n version(versionNumber: number): Version {\n if (isNaN(versionNumber) || versionNumber < 0.1) throw new exceptions.Type(`Given version is not a positive number`);\n versionNumber = Math.round(versionNumber * 10) / 10;\n if (this.idbdb || this._state.isBeingOpened)\n throw new exceptions.Schema(\"Cannot add version when database is open\");\n this.verno = Math.max(this.verno, versionNumber);\n const versions = this._versions;\n var versionInstance = versions.filter(\n v => v._cfg.version === versionNumber)[0];\n if (versionInstance) return versionInstance;\n versionInstance = new this.Version(versionNumber);\n versions.push(versionInstance);\n versions.sort(lowerVersionFirst);\n versionInstance.stores({}); // Derive earlier schemas by default.\n // Disable autoschema mode, as at least one version is specified.\n this._state.autoSchema = false;\n return versionInstance;\n }\n\n _whenReady(fn: () => Promise): Promise {\n return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new Promise((resolve, reject) => {\n if (this._state.openComplete) {\n // idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return reject(new exceptions.DatabaseClosed(this._state.dbOpenError));\n }\n if (!this._state.isBeingOpened) {\n if (!this._state.autoOpen) {\n reject(new exceptions.DatabaseClosed());\n return;\n }\n this.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n this._state.dbReadyPromise.then(resolve, reject);\n }).then(fn);\n }\n\n use({stack, create, level, name}: Middleware): this {\n if (name) this.unuse({stack, name}); // Be able to replace existing middleware.\n const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n middlewares.push({stack, create, level: level == null ? 10 : level, name});\n middlewares.sort((a, b) => a.level - b.level);\n // Todo update db.core and db.tables...core ? Or should be expect this to have effect\n // only after next open()?\n return this;\n }\n\n unuse({stack, create}: Middleware<{stack: keyof DexieStacks}>): this;\n unuse({stack, name}: {stack: keyof DexieStacks, name: string}): this;\n unuse({stack, name, create}: {stack: keyof DexieStacks, name?: string, create?: Function}) {\n if (stack && this._middlewares[stack]) {\n this._middlewares[stack] = this._middlewares[stack].filter(mw =>\n create ? mw.create !== create : // Given middleware has a create method. Match that exactly.\n name ? mw.name !== name : // Given middleware spec \n false);\n }\n return this;\n }\n\n open() {\n return usePSD(\n globalPSD, // Enforce global scope here since db.open() can be part of a live query or transaction scope\n () => dexieOpen(this)\n );\n }\n\n _close(): void {\n const state = this._state;\n const idx = connections.indexOf(this);\n if (idx >= 0) connections.splice(idx, 1);\n if (this.idbdb) {\n try { this.idbdb.close(); } catch (e) { }\n this.idbdb = null;\n } \n // Reset dbReadyPromise promise:\n if (!state.isBeingOpened) {\n // Only if not being opened, reset these promises.\n // Otherwise, keep them so existing promise consumers will resolve when db\n // db is reopened later on, in case closing for purpose reopening, using {disableAutoOpen: false}.\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n }\n }\n\n close({disableAutoOpen} = {disableAutoOpen: true}): void {\n const state = this._state;\n if (disableAutoOpen) {\n if (state.isBeingOpened) {\n // cancel before the call to this._close() because this._close() will recreate dbReadyPromise and openCanceller.\n state.cancelOpen(new exceptions.DatabaseClosed());\n }\n this._close();\n state.autoOpen = false;\n state.dbOpenError = new exceptions.DatabaseClosed();\n } else {\n this._close();\n state.autoOpen = this._options.autoOpen ||\n state.isBeingOpened; // If an open call is ongoing, that same promise will resolve when db is reopend.\n state.openComplete = false;\n state.dbOpenError = null;\n }\n }\n\n delete(closeOptions = {disableAutoOpen: true}): Promise {\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n const hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; \n const state = this._state;\n return new Promise((resolve, reject) => {\n const doDelete = () => {\n this.close(closeOptions);\n var req = this._deps.indexedDB.deleteDatabase(this.name);\n req.onsuccess = wrap(() => {\n _onDatabaseDeleted(this._deps, this.name);\n resolve();\n });\n req.onerror = eventRejectHandler(reject);\n req.onblocked = this._fireOnBlocked;\n }\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n if (hasInvalidArguments) throw new exceptions.InvalidArgument(\"Invalid closeOptions argument to db.delete()\");\n if (state.isBeingOpened) {\n state.dbReadyPromise.then(doDelete);\n } else {\n doDelete();\n }\n });\n }\n\n backendDB() {\n return this.idbdb;\n }\n\n isOpen() {\n return this.idbdb !== null;\n }\n\n hasBeenClosed() {\n const dbOpenError = this._state.dbOpenError;\n return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n }\n\n hasFailed() {\n return this._state.dbOpenError !== null;\n }\n\n dynamicallyOpened() {\n return this._state.autoSchema;\n }\n\n get tables () {\n return keys(this._allTables).map(name => this._allTables[name]);\n }\n\n transaction(): Promise {\n const args = extractTransactionArgs.apply(this, arguments);\n return this._transaction.apply(this, args);\n }\n\n _transaction(mode: TransactionMode, tables: Array, scopeFunc: Function) {\n let parentTransaction = PSD.trans as Transaction | undefined;\n // Check if parent transactions is bound to this db instance, and if caller wants to reuse it\n if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) parentTransaction = null;\n const onlyIfCompatible = mode.indexOf('?') !== -1;\n mode = mode.replace('!', '').replace('?', '') as TransactionMode; // Ok. Will change arguments[0] as well but we wont touch arguments henceforth.\n let idbMode: IDBTransactionMode,\n storeNames;\n\n try {\n //\n // Get storeNames from arguments. Either through given table instances, or through given table names.\n //\n storeNames = tables.map(table => {\n var storeName = table instanceof this.Table ? table.name : table;\n if (typeof storeName !== 'string') throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n return storeName;\n });\n\n //\n // Resolve mode. Allow shortcuts \"r\" and \"rw\".\n //\n if (mode == \"r\" || mode === READONLY)\n idbMode = READONLY;\n else if (mode == \"rw\" || mode == READWRITE)\n idbMode = READWRITE;\n else\n throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n\n if (parentTransaction) {\n // Basic checks\n if (parentTransaction.mode === READONLY && idbMode === READWRITE) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n }\n if (parentTransaction) {\n storeNames.forEach(storeName => {\n if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Table \" + storeName +\n \" not included in parent transaction.\");\n }\n });\n }\n if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n // '?' mode should not keep using an inactive transaction.\n parentTransaction = null;\n }\n }\n } catch (e) {\n return parentTransaction ?\n parentTransaction._promise(null, (_, reject) => {reject(e);}) :\n rejection (e);\n }\n // If this is a sub-transaction, lock the parent and then launch the sub-transaction.\n const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);\n return (parentTransaction ?\n parentTransaction._promise(idbMode, enterTransaction, \"lock\") :\n PSD.trans ?\n // no parent transaction despite PSD.trans exists. Make sure also\n // that the zone we create is not a sub-zone of current, because\n // Promise.follow() should not wait for it if so.\n usePSD(PSD.transless, ()=>this._whenReady(enterTransaction)) :\n this._whenReady (enterTransaction));\n }\n\n table(tableName: string): Table;\n table(tableName: string): ITable;\n table(tableName: string): Table {\n if (!hasOwn(this._allTables, tableName)) {\n throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); }\n return this._allTables[tableName];\n }\n}\n","import {\n Observable as IObservable,\n Observer,\n Subscription,\n} from \"../../public/types/observable\";\n\nconst symbolObservable: typeof Symbol.observable =\n typeof Symbol !== \"undefined\" && \"observable\" in Symbol\n ? Symbol.observable\n : \"@@observable\" as any;\n\nexport class Observable implements IObservable {\n private _subscribe: (observer: Observer) => Subscription;\n hasValue?: ()=>boolean;\n getValue?: ()=>T;\n\n constructor(subscribe: (observer: Observer) => Subscription) {\n this._subscribe = subscribe;\n }\n\n subscribe(\n onNext?: ((value: T) => void) | null,\n onError?: ((error: any) => void) | null,\n onComplete?: (() => void) | null\n ): Subscription;\n subscribe(observer?: Observer | null): Subscription;\n subscribe(x?: any, error?: any, complete?: any): Subscription {\n return this._subscribe(\n !x || typeof x === \"function\" ? { next: x, error, complete } : x\n );\n }\n\n [symbolObservable]() {\n return this;\n }\n}\n","import { _global } from '../../globals/global';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\n\nexport let domDeps: DexieDOMDependencies\n\ntry {\n domDeps = {\n // Required:\n indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n };\n} catch (e) {\n domDeps = { indexedDB: null, IDBKeyRange: null };\n}\n","import { _global, isAsyncFunction, keys, objectIsEmpty } from '../functions/utils';\nimport {\n globalEvents,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport {\n beginMicroTickScope,\n decrementExpectedAwaits,\n endMicroTickScope,\n execInGlobalContext,\n incrementExpectedAwaits,\n NativePromise,\n newScope,\n PSD,\n usePSD,\n} from '../helpers/promise';\nimport { ObservabilitySet } from '../public/types/db-events';\nimport {\n Observable as IObservable,\n Subscription,\n} from '../public/types/observable';\nimport { Observable } from '../classes/observable/observable';\nimport { extendObservabilitySet } from './extend-observability-set';\nimport { rangesOverlap } from '../helpers/rangeset';\nimport { domDeps } from '../classes/dexie/dexie-dom-dependencies';\nimport { Transaction } from '../classes/transaction';\nimport { obsSetsOverlap } from './obs-sets-overlap';\n\nexport interface LiveQueryContext {\n subscr: ObservabilitySet;\n signal: AbortSignal;\n requery: () => void;\n trans: null | Transaction;\n querier: Function; // For debugging purposes and Error messages\n}\n\nexport function liveQuery(querier: () => T | Promise): IObservable {\n let hasValue = false;\n let currentValue: T;\n const observable = new Observable((observer) => {\n const scopeFuncIsAsync = isAsyncFunction(querier);\n function execute(ctx: LiveQueryContext) {\n const wasRootExec = beginMicroTickScope(); // Performance: Avoid starting a new microtick scope within the async context.\n try {\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n let rv = newScope(querier, ctx);\n if (scopeFuncIsAsync) {\n // Make sure to set rv = rv.finally in order to wait to after decrementExpectedAwaits() has been called.\n // This fixes zone leaking issue that the liveQuery zone can leak to observer's next microtask.\n rv = (rv as Promise).finally(decrementExpectedAwaits);\n }\n return rv;\n } finally {\n wasRootExec && endMicroTickScope(); // Given that we created the microtick scope, we must also end it.\n }\n }\n\n let closed = false;\n let abortController: AbortController;\n\n let accumMuts: ObservabilitySet = {};\n let currentObs: ObservabilitySet = {};\n\n const subscription: Subscription = {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n if (closed) return;\n closed = true;\n if (abortController) abortController.abort();\n if (startedListening) globalEvents.storagemutated.unsubscribe(mutationListener);\n },\n };\n\n observer.start && observer.start(subscription); // https://github.com/tc39/proposal-observable\n\n let startedListening = false;\n\n const doQuery = () => execInGlobalContext(_doQuery);\n\n function shouldNotify() {\n return obsSetsOverlap(currentObs, accumMuts);\n }\n\n const mutationListener = (parts: ObservabilitySet) => {\n extendObservabilitySet(accumMuts, parts);\n if (shouldNotify()) {\n doQuery();\n }\n };\n\n const _doQuery = () => {\n if (\n closed || // closed - don't run!\n !domDeps.indexedDB) // SSR in sveltekit, nextjs etc\n {\n return;\n }\n accumMuts = {};\n const subscr: ObservabilitySet = {};\n // Abort signal fill three purposes:\n // 1. Abort the query if the observable is unsubscribed.\n // 2. Abort the query if a new query is made before the previous one has completed.\n // 3. For cached queries to know if they should remain in memory or could be enqued for being freed up.\n // (they will remain in memory for a short time and if noone needs them again, they will eventually be freed up)\n if (abortController) abortController.abort(); // Cancel previous query. Last query will be cancelled on unsubscribe().\n abortController = new AbortController();\n \n const ctx: LiveQueryContext = {\n subscr,\n signal: abortController.signal,\n requery: doQuery,\n querier,\n trans: null // Make the scope transactionless (don't reuse transaction from outer scope of the caller of subscribe())\n }\n const ret = execute(ctx);\n Promise.resolve(ret).then(\n (result) => {\n hasValue = true;\n currentValue = result;\n if (closed || ctx.signal.aborted) {\n // closed - no subscriber anymore.\n // signal.aborted - new query was made before this one completed and\n // the querier might have catched AbortError and return successful result.\n // If so, we should not rely in that result because we know we have aborted\n // this run, which means there's another run going on that will handle accumMuts\n // and we must not base currentObs on the half-baked subscr.\n return;\n }\n accumMuts = {};\n // Update what we are subscribing for based on this last run:\n currentObs = subscr;\n if (!objectIsEmpty(currentObs) && !startedListening) {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);\n startedListening = true;\n }\n execInGlobalContext(()=>!closed && observer.next && observer.next(result));\n },\n (err) => {\n hasValue = false;\n if (!['DatabaseClosedError', 'AbortError'].includes(err?.name)) {\n if (!closed) execInGlobalContext(()=>{\n if (closed) return;\n observer.error && observer.error(err);\n });\n }\n }\n );\n };\n\n // Use setTimeot here to guarantee execution in a private macro task before and\n // after. The helper executeInGlobalContext(_doQuery) is not enough here because\n // caller of `subscribe()` could be anything, such as a frontend framework that will\n // continue in the same tick after subscribe() is called and call other\n // eftects, that could involve dexie operations such as writing to the DB.\n // If that happens, the private zone echoes from a live query tast started here\n // could still be ongoing when the other operations start and make them inherit\n // the async context from a live query.\n setTimeout(doQuery, 0);\n return subscription;\n });\n observable.hasValue = () => hasValue;\n observable.getValue = () => currentValue;\n return observable;\n}\n","import { Dexie as _Dexie } from './dexie';\nimport { _global } from '../../globals/global';\nimport { props, derive, extend, override, getByKeyPath, setByKeyPath, delByKeyPath, shallowClone, deepClone, asap } from '../../functions/utils';\nimport { getObjectDiff } from \"../../functions/get-object-diff\";\nimport { fullNameExceptions } from '../../errors';\nimport { DexieConstructor } from '../../public/types/dexie-constructor';\nimport { getDatabaseNames } from '../../helpers/database-enumerator';\nimport { PSD } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { newScope } from '../../helpers/promise';\nimport { rejection } from '../../helpers/promise';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { dexieStackFrameFilter, minKey, connections, DEXIE_VERSION } from '../../globals/constants';\nimport Events from '../../helpers/Events';\nimport { exceptions } from '../../errors';\nimport { errnames } from '../../errors';\nimport { getMaxKey } from '../../functions/quirks';\nimport { vip } from './vip';\nimport { globalEvents } from '../../globals/global-events';\nimport { liveQuery } from '../../live-query/live-query';\nimport { extendObservabilitySet } from '../../live-query/extend-observability-set';\nimport { domDeps } from './dexie-dom-dependencies';\nimport { cmp } from '../../functions/cmp';\nimport { cache } from '../../live-query/cache/cache';\n\n/* (Dexie) is an instance of DexieConstructor, as defined in public/types/dexie-constructor.d.ts\n* (new Dexie()) is an instance of Dexie, as defined in public/types/dexie.d.ts\n* \n* Why we're doing this?\n\n* Because we've choosen to define the public Dexie API using a DexieConstructor interface\n* rather than declaring a class. On that interface, all static props are defined.\n* In practice, class Dexie's constructor implements DexieConstructor and all member props\n* are defined in interface Dexie. We could say, it's a typescript limitation of not being\n* able to define a static interface that forces us to do the cast below.\n*/\nconst Dexie = _Dexie as any as DexieConstructor;\n\n//\n// Set all static methods and properties onto Dexie:\n// \nprops(Dexie, {\n\n // Dexie.BulkError = class BulkError {...};\n // Dexie.XXXError = class XXXError {...};\n ...fullNameExceptions,\n\n //\n // Static delete() method.\n //\n delete(databaseName: string) {\n const db = new Dexie(databaseName, {addons: []});\n return db.delete();\n },\n\n //\n // Static exists() method.\n //\n exists(name: string) {\n return new Dexie(name, { addons: [] }).open().then(db => {\n db.close();\n return true;\n }).catch('NoSuchDatabaseError', () => false);\n },\n\n //\n // Static method for retrieving a list of all existing databases at current host.\n //\n getDatabaseNames(cb) {\n try {\n return getDatabaseNames(Dexie.dependencies).then(cb);\n } catch {\n return rejection(new exceptions.MissingAPI());\n }\n },\n\n /** @deprecated */\n defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return Class;\n },\n\n ignoreTransaction(scopeFunc) {\n // In case caller is within a transaction but needs to create a separate transaction.\n // Example of usage:\n //\n // Let's say we have a logger function in our app. Other application-logic should be unaware of the\n // logger function and not need to include the 'logentries' table in all transaction it performs.\n // The logging should always be done in a separate transaction and not be dependant on the current\n // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction.\n //\n // Dexie.ignoreTransaction(function() {\n // db.logentries.add(newLogEntry);\n // });\n //\n // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction\n // in current Promise-scope.\n //\n // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an\n // API for this because\n // 1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout().\n // 2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate().\n // 3) setImmediate() is not supported in the ES standard.\n // 4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough.\n return PSD.trans ?\n usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional.\n scopeFunc(); // No need to change scope because there is no ongoing transaction.\n },\n\n vip,\n\n async: function (generatorFn: Function) {\n return function () {\n try {\n var rv = awaitIterator(generatorFn.apply(this, arguments));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n };\n },\n\n spawn: function (generatorFn, args, thiz) {\n try {\n var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n },\n\n // Dexie.currentTransaction property\n currentTransaction: {\n get: () => PSD.trans || null\n },\n\n waitFor: function (promiseOrFunction, optionalTimeout) {\n // If a function is provided, invoke it and pass the returning value to Transaction.waitFor()\n const promise = Promise.resolve(\n typeof promiseOrFunction === 'function' ?\n Dexie.ignoreTransaction(promiseOrFunction) :\n promiseOrFunction)\n .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required. \n\n // Run given promise on current transaction. If no current transaction, just return a Dexie promise based\n // on given value.\n return PSD.trans ?\n PSD.trans.waitFor(promise) :\n promise;\n },\n\n // Export our Promise implementation since it can be handy as a standalone Promise implementation\n Promise: Promise,\n\n // Dexie.debug proptery:\n // Dexie.debug = false\n // Dexie.debug = true\n // Dexie.debug = \"dexie\" - don't hide dexie's stack frames.\n debug: {\n get: () => Debug.debug,\n set: value => {\n Debug.setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter);\n }\n },\n\n // Export our derive/extend/override methodology\n derive: derive, // Deprecate?\n extend: extend, // Deprecate?\n props: props,\n override: override, // Deprecate?\n // Export our Events() function - can be handy as a toolkit\n Events: Events,\n on: globalEvents,\n liveQuery,\n extendObservabilitySet,\n // Utilities\n getByKeyPath: getByKeyPath,\n setByKeyPath: setByKeyPath,\n delByKeyPath: delByKeyPath,\n shallowClone: shallowClone,\n deepClone: deepClone,\n getObjectDiff: getObjectDiff,\n cmp,\n asap: asap,\n //maxKey: new Dexie('',{addons:[]})._maxKey,\n minKey: minKey,\n // Addon registry\n addons: [],\n // Global DB connection list\n connections: connections,\n\n //MultiModifyError: exceptions.Modify, // Obsolete!\n errnames: errnames,\n\n // Export other static classes\n //IndexSpec: IndexSpec, Obsolete!\n //TableSchema: TableSchema, Obsolete!\n\n //\n // Dependencies\n //\n // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included.\n //\n // In node.js, however, these properties must be set \"manually\" before instansiating a new Dexie().\n // For node.js, you need to require indexeddb-js or similar and then set these deps.\n //\n dependencies: domDeps,\n cache,\n\n // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc.\n semVer: DEXIE_VERSION,\n version: DEXIE_VERSION.split('.')\n .map(n => parseInt(n))\n .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))),\n\n // https://github.com/dfahlander/Dexie.js/issues/186\n // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return\n // x.default. Workaround: Set Dexie.default = Dexie.\n // default: Dexie, // Commented because solved in index-umd.ts instead.\n // Make it possible to import {Dexie} (non-default import)\n // Reason 1: May switch to that in future.\n // Reason 2: We declare it both default and named exported in d.ts to make it possible\n // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely\n // exporting the symbol, not just default exporting)\n // Dexie: Dexie // Commented because solved in index-umd.ts instead.\n});\n\nDexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange);\n","import { globalEvents, DEXIE_STORAGE_MUTATED_EVENT_NAME, STORAGE_MUTATED_DOM_EVENT_NAME } from '../globals/global-events';\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport { signalSubscribersNow } from './cache/signalSubscribers';\n\nif (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => {\n if (!propagatingLocally) {\n let event: CustomEvent;\n event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, {\n detail: updatedParts\n });\n propagatingLocally = true;\n dispatchEvent(event);\n propagatingLocally = false;\n }\n });\n addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({detail}: CustomEvent) => {\n if (!propagatingLocally) {\n propagateLocally(detail);\n }\n });\n}\n\n/** Called from listeners to BroadcastChannel and DOM event to\n * propagate the event locally into dexie's storagemutated event\n * and invalidate cached queries.\n * \n * This function is only called when the event is not originating\n * from this same Dexie module - either from another redundant dexie import\n * or from a foreign tab or worker. That's why we need to invalidate\n * the cache when this happens.\n */\nexport function propagateLocally(updateParts: ObservabilitySet) {\n let wasMe = propagatingLocally;\n try {\n propagatingLocally = true;\n // Fire the \"storagemutated\" event.\n globalEvents.storagemutated.fire(updateParts);\n // Invalidate cached queries and signal subscribers to requery.\n signalSubscribersNow(updateParts, true);\n } finally {\n propagatingLocally = wasMe;\n }\n}\n\nexport let propagatingLocally = false;\n","import {\n globalEvents,\n STORAGE_MUTATED_DOM_EVENT_NAME,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport { propagateLocally, propagatingLocally } from './propagate-locally';\n\nexport let bc: BroadcastChannel;\n\nexport let createBC = ()=>{};\n\nif (typeof BroadcastChannel !== 'undefined') {\n createBC = () => {\n bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME);\n bc.onmessage = ev => ev.data && propagateLocally(ev.data);\n }\n createBC();\n\n /**\n * The Node.js BroadcastChannel will prevent the node process from exiting\n * if the BroadcastChannel is not closed.\n * Therefore we have to call unref() which allows the process to finish\n * properly even when the BroadcastChannel is never closed.\n * @link https://nodejs.org/api/worker_threads.html#broadcastchannelunref\n * @link https://github.com/dexie/Dexie.js/pull/1576\n */\n if (typeof (bc as any).unref === 'function') {\n (bc as any).unref();\n }\n \n //\n // Propagate local changes to remote tabs, windows and workers via BroadcastChannel\n //\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n if (!propagatingLocally) {\n bc.postMessage(changedParts);\n }\n });\n}\n","import { Dexie } from \"./classes/dexie\";\nimport { connections } from \"./globals/constants\";\nimport { debug } from \"./helpers/debug\";\nimport { RangeSet } from \"./helpers/rangeset\";\nimport { bc, createBC } from \"./live-query/enable-broadcast\";\nimport { propagateLocally } from \"./live-query/propagate-locally\";\n\n\nif (typeof addEventListener !== 'undefined') {\n addEventListener('pagehide', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pagehide');\n bc?.close();\n for (const db of connections) {\n db.close({disableAutoOpen: false});\n }\n }\n });\n addEventListener('pageshow', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pageshow');\n createBC();\n propagateLocally({all: new RangeSet(-Infinity, [[]])}); // Trigger all queries to requery\n }\n });\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function add(value: number | BigInt | Array) {\n return new PropModification({add: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function remove(value: number | BigInt | Array) {\n return new PropModification({remove: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function replacePrefix(a: string, b:string) {\n return new PropModification({replacePrefix: [a, b]});\n}\n","import { Dexie } from './classes/dexie';\nimport { DexieConstructor } from './public/types/dexie-constructor';\nimport { DexiePromise } from './helpers/promise';\nimport { mapError } from './errors';\nimport * as Debug from './helpers/debug';\nimport { dexieStackFrameFilter } from './globals/constants';\n\n// Generate all static properties such as Dexie.maxKey etc\n// (implement interface DexieConstructor):\nimport './classes/dexie/dexie-static-props';\nimport './live-query/enable-broadcast';\nimport './support-bfcache';\nimport { liveQuery } from './live-query/live-query';\nimport { Entity } from './classes/entity/Entity';\nimport { cmp } from './functions/cmp';\nimport { PropModification, PropModSymbol } from './helpers/prop-modification';\nimport { replacePrefix, add, remove } from './functions/propmods';\n\n\n// Set rejectionMapper of DexiePromise so that it generally tries to map\n// DOMErrors and DOMExceptions to a DexieError instance with same name but with\n// async stack support and with a prototypal inheritance from DexieError and Error.\n// of Map DOMErrors and DOMExceptions to corresponding Dexie errors.\nDexiePromise.rejectionMapper = mapError;\n\n// Let the async stack filter focus on app code and filter away frames from dexie.min.js:\nDebug.setDebug(Debug.debug, dexieStackFrameFilter);\n\nexport { RangeSet, mergeRanges, rangesOverlap } from \"./helpers/rangeset\";\nexport { Dexie, liveQuery }; // Comply with public/index.d.ts.\nexport { Entity };\nexport { cmp };\nexport { PropModSymbol, PropModification, replacePrefix, add, remove };\nexport default Dexie;\n"],"names":["asap","Promise","Dexie","safari14Workaround","_Dexie","Debug.debug","Debug.setDebug"],"mappings":"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"} \ No newline at end of file diff --git a/src/assets/dexie/import-wrapper-prod.d.mts b/src/assets/dexie/import-wrapper-prod.d.mts new file mode 100644 index 000000000..e6ab49a88 --- /dev/null +++ b/src/assets/dexie/import-wrapper-prod.d.mts @@ -0,0 +1,2 @@ +export * from './dist/dexie.js'; +export { default } from './dist/dexie.js'; diff --git a/src/assets/dexie/import-wrapper-prod.mjs b/src/assets/dexie/import-wrapper-prod.mjs new file mode 100644 index 000000000..a6556c91a --- /dev/null +++ b/src/assets/dexie/import-wrapper-prod.mjs @@ -0,0 +1,15 @@ +// Making the module version consumable via require - to prohibit +// multiple occurrancies of the same module in the same app +// (dual package hazard, https://nodejs.org/api/packages.html#dual-package-hazard) +import _Dexie from "./dist/dexie.min.js"; +const DexieSymbol = Symbol.for("Dexie"); +const Dexie = globalThis[DexieSymbol] || (globalThis[DexieSymbol] = _Dexie); +if (_Dexie.semVer !== Dexie.semVer) { + throw new Error(`Two different versions of Dexie loaded in the same app: ${_Dexie.semVer} and ${Dexie.semVer}`); +} +const { + liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp, Entity, + PropModSymbol, PropModification, replacePrefix, add, remove } = Dexie; +export { liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp, Dexie, Entity, + PropModSymbol, PropModification, replacePrefix, add, remove }; +export default Dexie; diff --git a/src/assets/dexie/import-wrapper.d.mts b/src/assets/dexie/import-wrapper.d.mts new file mode 100644 index 000000000..e6ab49a88 --- /dev/null +++ b/src/assets/dexie/import-wrapper.d.mts @@ -0,0 +1,2 @@ +export * from './dist/dexie.js'; +export { default } from './dist/dexie.js'; diff --git a/src/assets/dexie/import-wrapper.mjs b/src/assets/dexie/import-wrapper.mjs new file mode 100644 index 000000000..c70c6b72a --- /dev/null +++ b/src/assets/dexie/import-wrapper.mjs @@ -0,0 +1,14 @@ +// Making the module version consumable via require - to prohibit +// multiple occurrancies of the same module in the same app +// (dual package hazard, https://nodejs.org/api/packages.html#dual-package-hazard) +import _Dexie from "./dist/dexie.js"; +const DexieSymbol = Symbol.for("Dexie"); +const Dexie = globalThis[DexieSymbol] || (globalThis[DexieSymbol] = _Dexie); +if (_Dexie.semVer !== Dexie.semVer) { + throw new Error(`Two different versions of Dexie loaded in the same app: ${_Dexie.semVer} and ${Dexie.semVer}`); +} +const { liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp, Entity, + PropModSymbol, PropModification, replacePrefix, add, remove } = Dexie; +export { liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp, Dexie, Entity, + PropModSymbol, PropModification, replacePrefix, add, remove }; +export default Dexie; diff --git a/src/assets/dexie/package.json b/src/assets/dexie/package.json new file mode 100644 index 000000000..16d81e844 --- /dev/null +++ b/src/assets/dexie/package.json @@ -0,0 +1,145 @@ +{ + "name": "dexie", + "version": "4.0.7", + "description": "A Minimalistic Wrapper for IndexedDB", + "main": "dist/dexie.js", + "module": "dist/dexie.mjs", + "jsnext:main": "dist/dexie.mjs", + "exports": { + ".": { + "production": { + "module": "./import-wrapper-prod.mjs", + "import": "./import-wrapper-prod.mjs", + "require": "./dist/dexie.min.js", + "default": "./dist/dexie.min.js" + }, + "development": { + "module": "./import-wrapper.mjs", + "import": "./import-wrapper.mjs", + "require": "./dist/dexie.js", + "default": "./dist/dexie.js" + }, + "default": { + "module": "./import-wrapper.mjs", + "import": "./import-wrapper.mjs", + "require": "./dist/dexie.js", + "default": "./dist/dexie.js" + } + }, + "./package.json": "./package.json", + "./dist/dexie.mjs": "./dist/dexie.mjs" + }, + "typings": "dist/dexie.d.ts", + "jspm": { + "format": "cjs", + "ignore": [ + "src/" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/dexie/Dexie.js.git" + }, + "keywords": [ + "indexeddb", + "browser", + "database" + ], + "author": "David Fahlander ", + "contributors": [ + "Christopher Hunt ", + "Nikolas Poniros ", + "Anders Ekdahl ", + "Yury Solovyov ", + "Martin Diphoorn " + ], + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/dexie/Dexie.js/issues" + }, + "just-build": { + "default": [ + "# Build all targets (es5, es6 and test) and minify the default es5 UMD module", + "just-build release test" + ], + "dexie": [ + "# Build dist/dexie.js, dist/dexie.mjs and dist/dexie.d.ts", + "cd src", + "tsc [--watch 'Watching for file changes']", + "tsc --target es2020 --outdir ../tools/tmp/modern/src/", + "rollup -c ../tools/build-configs/rollup.config.js", + "rollup -c ../tools/build-configs/rollup.umd.config.js", + "rollup -c ../tools/build-configs/rollup.modern.config.js", + "node ../tools/replaceVersionAndDate.js ../dist/dexie.js", + "node ../tools/replaceVersionAndDate.js ../dist/dexie.mjs", + "node ../tools/replaceVersionAndDate.js ../dist/modern/dexie.mjs", + "dts-bundle-generator --inline-declare-global --inline-declare-externals -o ../dist/dexie.d.ts public/index.d.ts", + "node ../tools/prepend.js ../dist/dexie.d.ts ../tools/build-configs/banner.txt", + "node ../tools/replaceVersionAndDate.js ../dist/dexie.d.ts" + ], + "release": [ + "# Build ES5 umd module as well as the es6 module.", + "just-build dexie", + "node tools/replaceVersionAndDate.js dist/dexie.d.ts", + "# Minify the default ES5 UMD module", + "cd dist", + "uglifyjs dexie.js -m -c negate_iife=0 -o dexie.min.js --source-map url=dexie.min.js.map", + "# Minify modern bundle", + "cd modern", + "terser --comments false --compress --mangle --module --source-map url=dexie.min.mjs.map -o dexie.min.mjs -- dexie.mjs" + ], + "dev": [ + "# Build ES5 module and the tests", + "just-build dexie test" + ], + "gzip": [ + "# Optionally gzip to find the size of the minified & gzipped version", + "gzip dist/dexie.min.js -k -f -9" + ], + "test": [ + "# Build the test suite.", + "cd test", + "tsc [--watch 'Watching for file changes']", + "rollup -c ../tools/build-configs/rollup.tests.config.js" + ] + }, + "homepage": "https://dexie.org", + "devDependencies": { + "@lambdatest/node-tunnel": "^4.0.7", + "cross-env": "^7.0.3", + "dts-bundle-generator": "^5.9.0", + "just-build": "^0.9.24", + "karma": "^6.1.1", + "karma-chrome-launcher": "^3.1.0", + "karma-firefox-launcher": "^2.1.0", + "karma-mocha-reporter": "^2.2.5", + "karma-qunit": "^4.1.1", + "karma-webdriver-launcher": "^1.0.8", + "qunit": "^2.10.0", + "qunitjs": "^1.23.1", + "rollup": "^2.40.0", + "rollup-plugin-cleanup": "^3.2.1", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rxjs": "^6.6.6", + "safari-14-idb-fix": "^3.0.0", + "serve-static": "^1.14.1", + "sorted-json": "^0.2.6", + "terser": "^5.3.1", + "tslib": "^2.1.0", + "typescript": "^5.3.3", + "uglify-js": "^3.9.2" + }, + "scripts": { + "build": "just-build", + "watch": "just-build --watch", + "clean": "rm -rf tools/tmp && rm dist/*.js && rm dist/*.map && rm dist/*.ts && rm dist/*.mjs", + "test": "pnpm run build && pnpm run test:typings && pnpm run test:unit", + "test:unit": "karma start test/karma.conf.js --single-run", + "test:typings": "tsc -p test/typings-test/", + "test:debug": "karma start test/karma.conf.js --log-level debug", + "test:ltcloud": "cross-env LAMBDATEST=true pnpm run test:ltTunnel & sleep 10 && pnpm run test:unit; UNIT_STATUS=$?; kill $(cat tunnel.pid); exit $UNIT_STATUS", + "test:ltTunnel": "node test/lt-local" + } +} \ No newline at end of file diff --git a/src/assets/icon/chat/Untitled.svg b/src/assets/icon/chat/Untitled.svg deleted file mode 100644 index cd3bc9abc..000000000 --- a/src/assets/icon/chat/Untitled.svg +++ /dev/null @@ -1,228 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/assets/images/Gabinete Digital_files/2.js.download b/src/assets/images/Gabinete Digital_files/2.js.download deleted file mode 100644 index 268342b1b..000000000 --- a/src/assets/images/Gabinete Digital_files/2.js.download +++ /dev/null @@ -1,961 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([[2],{ - -/***/ "./node_modules/@ionic/core/dist/esm/ion-app_8.entry.js": -/*!**************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm/ion-app_8.entry.js ***! - \**************************************************************/ -/*! exports provided: ion_app, ion_buttons, ion_content, ion_footer, ion_header, ion_router_outlet, ion_title, ion_toolbar */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_app", function() { return App; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_buttons", function() { return Buttons; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_content", function() { return Content; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_footer", function() { return Footer; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_header", function() { return Header; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_router_outlet", function() { return RouterOutlet; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_title", function() { return ToolbarTitle; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ion_toolbar", function() { return Toolbar; }); -/* harmony import */ var _index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index-44bf8136.js */ "./node_modules/@ionic/core/dist/esm/index-44bf8136.js"); -/* harmony import */ var _ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./ionic-global-837be8f3.js */ "./node_modules/@ionic/core/dist/esm/ionic-global-837be8f3.js"); -/* harmony import */ var _helpers_5c745fbd_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./helpers-5c745fbd.js */ "./node_modules/@ionic/core/dist/esm/helpers-5c745fbd.js"); -/* harmony import */ var _index_37b50f53_js__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./index-37b50f53.js */ "./node_modules/@ionic/core/dist/esm/index-37b50f53.js"); -/* harmony import */ var _cubic_bezier_685f606a_js__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./cubic-bezier-685f606a.js */ "./node_modules/@ionic/core/dist/esm/cubic-bezier-685f606a.js"); -/* harmony import */ var _theme_3f0b0c04_js__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./theme-3f0b0c04.js */ "./node_modules/@ionic/core/dist/esm/theme-3f0b0c04.js"); -/* harmony import */ var _framework_delegate_d1eb6504_js__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./framework-delegate-d1eb6504.js */ "./node_modules/@ionic/core/dist/esm/framework-delegate-d1eb6504.js"); - - - - - - - - -const appCss = "html.plt-mobile ion-app{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}ion-app.force-statusbar-padding{--ion-safe-area-top:20px}"; - -const App = class { - constructor(hostRef) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef); - } - componentDidLoad() { - { - rIC(() => { - const isHybrid = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["i"])(window, 'hybrid'); - if (!_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"].getBoolean('_testing')) { - __webpack_require__.e(/*! import() | tap-click-252af35a-js */ "tap-click-252af35a-js").then(__webpack_require__.bind(null, /*! ./tap-click-252af35a.js */ "./node_modules/@ionic/core/dist/esm/tap-click-252af35a.js")).then(module => module.startTapClick(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"])); - } - if (_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"].getBoolean('statusTap', isHybrid)) { - __webpack_require__.e(/*! import() | status-tap-a9bf301d-js */ "status-tap-a9bf301d-js").then(__webpack_require__.bind(null, /*! ./status-tap-a9bf301d.js */ "./node_modules/@ionic/core/dist/esm/status-tap-a9bf301d.js")).then(module => module.startStatusTap()); - } - if (_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"].getBoolean('inputShims', needInputShims())) { - __webpack_require__.e(/*! import() | input-shims-b956f530-js */ "input-shims-b956f530-js").then(__webpack_require__.bind(null, /*! ./input-shims-b956f530.js */ "./node_modules/@ionic/core/dist/esm/input-shims-b956f530.js")).then(module => module.startInputShims(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"])); - } - if (_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"].getBoolean('hardwareBackButton', isHybrid)) { - Promise.resolve(/*! import() */).then(__webpack_require__.bind(null, /*! ./hardware-back-button-7b6ede21.js */ "./node_modules/@ionic/core/dist/esm/hardware-back-button-7b6ede21.js")).then(module => module.startHardwareBackButton()); - } - if (typeof window !== 'undefined') { - __webpack_require__.e(/*! import() | keyboard-dd970efc-js */ "keyboard-dd970efc-js").then(__webpack_require__.bind(null, /*! ./keyboard-dd970efc.js */ "./node_modules/@ionic/core/dist/esm/keyboard-dd970efc.js")).then(module => module.startKeyboardAssist(window)); - } - __webpack_require__.e(/*! import() | focus-visible-15ada7f7-js */ "focus-visible-15ada7f7-js").then(__webpack_require__.bind(null, /*! ./focus-visible-15ada7f7.js */ "./node_modules/@ionic/core/dist/esm/focus-visible-15ada7f7.js")).then(module => module.startFocusVisible()); - }); - } - } - render() { - const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["H"], { class: { - [mode]: true, - 'ion-page': true, - 'force-statusbar-padding': _ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"].getBoolean('_forceStatusbarPadding'), - } })); - } - get el() { return Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["i"])(this); } -}; -const needInputShims = () => { - return Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["i"])(window, 'ios') && Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["i"])(window, 'mobile'); -}; -const rIC = (callback) => { - if ('requestIdleCallback' in window) { - window.requestIdleCallback(callback); - } - else { - setTimeout(callback, 32); - } -}; -App.style = appCss; - -const buttonsIosCss = ".sc-ion-buttons-ios-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:99}.sc-ion-buttons-ios-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-ios-s ion-button{--padding-start:5px;--padding-end:5px;margin-left:2px;margin-right:2px;height:32px;font-size:17px;font-weight:400}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-ios-s ion-button{margin-left:unset;margin-right:unset;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px}}.sc-ion-buttons-ios-s ion-button:not(.button-round){--border-radius:4px}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button{--color:initial;--border-color:initial;--background-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-solid,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-solid{--background:var(--ion-color-contrast);--background-focused:#000;--background-focused-opacity:.12;--background-activated:#000;--background-activated-opacity:.12;--background-hover:var(--ion-color-base);--background-hover-opacity:0.45;--color:var(--ion-color-base);--color-focused:var(--ion-color-base)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-clear,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-clear{--color-activated:var(--ion-color-contrast);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-h.ion-color.sc-ion-buttons-ios-s .button-outline,.ion-color .sc-ion-buttons-ios-h.sc-ion-buttons-ios-s .button-outline{--color-activated:var(--ion-color-base);--color-focused:var(--ion-color-contrast)}.sc-ion-buttons-ios-s .button-clear,.sc-ion-buttons-ios-s .button-outline{--background-activated:transparent;--background-focused:currentColor;--background-hover:transparent}.sc-ion-buttons-ios-s .button-solid:not(.ion-color){--background-focused:#000;--background-focused-opacity:.12;--background-activated:#000;--background-activated-opacity:.12}.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;margin-right:0.3em;font-size:24px;line-height:0.67}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-ios-s ion-icon[slot=start]{margin-right:unset;-webkit-margin-end:0.3em;margin-inline-end:0.3em}}.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;margin-left:0.4em;font-size:24px;line-height:0.67}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-ios-s ion-icon[slot=end]{margin-left:unset;-webkit-margin-start:0.4em;margin-inline-start:0.4em}}.sc-ion-buttons-ios-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:28px;line-height:0.67}"; - -const buttonsMdCss = ".sc-ion-buttons-md-h{display:-ms-flexbox;display:flex;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);z-index:99}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0}.sc-ion-buttons-md-s ion-button{--padding-top:0;--padding-bottom:0;--padding-start:8px;--padding-end:8px;--box-shadow:none;margin-left:2px;margin-right:2px;height:32px;font-size:14px;font-weight:500}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-md-s ion-button{margin-left:unset;margin-right:unset;-webkit-margin-start:2px;margin-inline-start:2px;-webkit-margin-end:2px;margin-inline-end:2px}}.sc-ion-buttons-md-s ion-button:not(.button-round){--border-radius:2px}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button{--color:initial;--color-focused:var(--ion-color-contrast);--color-hover:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-contrast);--background-hover:var(--ion-color-contrast)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-solid,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-solid{--background:var(--ion-color-contrast);--background-activated:transparent;--background-focused:var(--ion-color-shade);--background-hover:var(--ion-color-base);--color:var(--ion-color-base);--color-focused:var(--ion-color-base);--color-hover:var(--ion-color-base)}.sc-ion-buttons-md-h.ion-color.sc-ion-buttons-md-s .button-outline,.ion-color .sc-ion-buttons-md-h.sc-ion-buttons-md-s .button-outline{--border-color:var(--ion-color-contrast)}.sc-ion-buttons-md-s .button-has-icon-only.button-clear{--padding-top:12px;--padding-end:12px;--padding-bottom:12px;--padding-start:12px;--border-radius:50%;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;width:48px;height:48px}.sc-ion-buttons-md-s .button{--background-hover:currentColor}.sc-ion-buttons-md-s .button-solid{--color:var(--ion-toolbar-background, var(--ion-background-color, #fff));--background:var(--ion-toolbar-color, var(--ion-text-color, #424242));--background-activated:transparent;--background-focused:currentColor}.sc-ion-buttons-md-s .button-outline{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor;--border-color:currentColor}.sc-ion-buttons-md-s .button-clear{--color:initial;--background:transparent;--background-activated:transparent;--background-focused:currentColor;--background-hover:currentColor}.sc-ion-buttons-md-s ion-icon[slot=start]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;margin-right:0.3em;font-size:1.4em}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-md-s ion-icon[slot=start]{margin-right:unset;-webkit-margin-end:0.3em;margin-inline-end:0.3em}}.sc-ion-buttons-md-s ion-icon[slot=end]{margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;margin-left:0.4em;font-size:1.4em}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.sc-ion-buttons-md-s ion-icon[slot=end]{margin-left:unset;-webkit-margin-start:0.4em;margin-inline-start:0.4em}}.sc-ion-buttons-md-s ion-icon[slot=icon-only]{padding-left:0;padding-right:0;padding-top:0;padding-bottom:0;margin-left:0;margin-right:0;margin-top:0;margin-bottom:0;font-size:1.8em}"; - -const Buttons = class { - constructor(hostRef) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef); - /** - * If true, buttons will disappear when its - * parent toolbar has fully collapsed if the toolbar - * is not the first toolbar. If the toolbar is the - * first toolbar, the buttons will be hidden and will - * only be shown once all toolbars have fully collapsed. - * - * Only applies in `ios` mode with `collapse` set to - * `true` on `ion-header`. - * - * Typically used for [Collapsible Large Titles](https://ionicframework.com/docs/api/title#collapsible-large-titles) - */ - this.collapse = false; - } - render() { - const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["H"], { class: { - [mode]: true, - ['buttons-collapse']: this.collapse - } })); - } -}; -Buttons.style = { - ios: buttonsIosCss, - md: buttonsMdCss -}; - -const contentCss = ":host{--background:var(--ion-background-color, #fff);--color:var(--ion-text-color, #000);--padding-top:0px;--padding-bottom:0px;--padding-start:0px;--padding-end:0px;--keyboard-offset:0px;--offset-top:0px;--offset-bottom:0px;--overflow:auto;display:block;position:relative;-ms-flex:1;flex:1;width:100%;height:100%;margin:0 !important;padding:0 !important;font-family:var(--ion-font-family, inherit);contain:size style}:host(.ion-color) .inner-scroll{background:var(--ion-color-base);color:var(--ion-color-contrast)}:host(.outer-content){--background:var(--ion-color-step-50, #f2f2f2)}#background-content{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);position:absolute;background:var(--background)}.inner-scroll{left:0px;right:0px;top:calc(var(--offset-top) * -1);bottom:calc(var(--offset-bottom) * -1);padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:calc(var(--padding-top) + var(--offset-top));padding-bottom:calc(var(--padding-bottom) + var(--keyboard-offset) + var(--offset-bottom));position:absolute;color:var(--color);-webkit-box-sizing:border-box;box-sizing:border-box;overflow:hidden}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.inner-scroll{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.scroll-y,.scroll-x{-webkit-overflow-scrolling:touch;will-change:scroll-position}.scroll-y{-ms-touch-action:pan-y;touch-action:pan-y;overflow-y:var(--overflow);overscroll-behavior-y:contain}.scroll-x{-ms-touch-action:pan-x;touch-action:pan-x;overflow-x:var(--overflow);overscroll-behavior-x:contain}.scroll-x.scroll-y{-ms-touch-action:auto;touch-action:auto}.overscroll::before,.overscroll::after{position:absolute;width:1px;height:1px;content:\"\"}.overscroll::before{bottom:-1px}.overscroll::after{top:-1px}:host(.content-sizing){contain:none}:host(.content-sizing) .inner-scroll{position:relative}.transition-effect{display:none;position:absolute;left:-100%;width:100%;height:100vh;opacity:0;pointer-events:none}.transition-cover{position:absolute;right:0;width:100%;height:100%;background:black;opacity:0.1}.transition-shadow{display:block;position:absolute;right:0;width:10px;height:100%;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAgCAYAAAAIXrg4AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyhpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTQ1IDc5LjE2MzQ5OSwgMjAxOC8wOC8xMy0xNjo0MDoyMiAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTkgKE1hY2ludG9zaCkiIHhtcE1NOkluc3RhbmNlSUQ9InhtcC5paWQ6MTE3MDgzRkQ5QTkyMTFFOUEwNzQ5MkJFREE1NUY2MjQiIHhtcE1NOkRvY3VtZW50SUQ9InhtcC5kaWQ6MTE3MDgzRkU5QTkyMTFFOUEwNzQ5MkJFREE1NUY2MjQiPiA8eG1wTU06RGVyaXZlZEZyb20gc3RSZWY6aW5zdGFuY2VJRD0ieG1wLmlpZDoxMTcwODNGQjlBOTIxMUU5QTA3NDkyQkVEQTU1RjYyNCIgc3RSZWY6ZG9jdW1lbnRJRD0ieG1wLmRpZDoxMTcwODNGQzlBOTIxMUU5QTA3NDkyQkVEQTU1RjYyNCIvPiA8L3JkZjpEZXNjcmlwdGlvbj4gPC9yZGY6UkRGPiA8L3g6eG1wbWV0YT4gPD94cGFja2V0IGVuZD0iciI/PmePEuQAAABNSURBVHjaYvz//z8DIxAwMDAwATGMhmFmPDQuOSZks0AMmoJBaQHjkPfB0Lfg/2gQjVow+HPy/yHvg9GiYjQfjMbBqAWjFgy/4hogwADYqwdzxy5BuwAAAABJRU5ErkJggg==);background-repeat:repeat-y;background-size:10px 16px}::slotted([slot=fixed]){position:absolute}"; - -const Content = class { - constructor(hostRef) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef); - this.ionScrollStart = Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["e"])(this, "ionScrollStart", 7); - this.ionScroll = Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["e"])(this, "ionScroll", 7); - this.ionScrollEnd = Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["e"])(this, "ionScrollEnd", 7); - this.isScrolling = false; - this.lastScroll = 0; - this.queued = false; - this.cTop = -1; - this.cBottom = -1; - // Detail is used in a hot loop in the scroll event, by allocating it here - // V8 will be able to inline any read/write to it since it's a monomorphic class. - // https://mrale.ph/blog/2015/01/11/whats-up-with-monomorphism.html - this.detail = { - scrollTop: 0, - scrollLeft: 0, - type: 'scroll', - event: undefined, - startX: 0, - startY: 0, - startTime: 0, - currentX: 0, - currentY: 0, - velocityX: 0, - velocityY: 0, - deltaX: 0, - deltaY: 0, - currentTime: 0, - data: undefined, - isScrolling: true, - }; - /** - * If `true`, the content will scroll behind the headers - * and footers. This effect can easily be seen by setting the toolbar - * to transparent. - */ - this.fullscreen = false; - /** - * If you want to enable the content scrolling in the X axis, set this property to `true`. - */ - this.scrollX = false; - /** - * If you want to disable the content scrolling in the Y axis, set this property to `false`. - */ - this.scrollY = true; - /** - * Because of performance reasons, ionScroll events are disabled by default, in order to enable them - * and start listening from (ionScroll), set this property to `true`. - */ - this.scrollEvents = false; - } - disconnectedCallback() { - this.onScrollEnd(); - } - onAppLoad() { - this.resize(); - } - onClick(ev) { - if (this.isScrolling) { - ev.preventDefault(); - ev.stopPropagation(); - } - } - shouldForceOverscroll() { - const { forceOverscroll } = this; - const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - return forceOverscroll === undefined - ? mode === 'ios' && Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["i"])('ios') - : forceOverscroll; - } - resize() { - if (this.fullscreen) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["f"])(() => this.readDimensions()); - } - else if (this.cTop !== 0 || this.cBottom !== 0) { - this.cTop = this.cBottom = 0; - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["j"])(this); - } - } - readDimensions() { - const page = getPageElement(this.el); - const top = Math.max(this.el.offsetTop, 0); - const bottom = Math.max(page.offsetHeight - top - this.el.offsetHeight, 0); - const dirty = top !== this.cTop || bottom !== this.cBottom; - if (dirty) { - this.cTop = top; - this.cBottom = bottom; - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["j"])(this); - } - } - onScroll(ev) { - const timeStamp = Date.now(); - const shouldStart = !this.isScrolling; - this.lastScroll = timeStamp; - if (shouldStart) { - this.onScrollStart(); - } - if (!this.queued && this.scrollEvents) { - this.queued = true; - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["f"])(ts => { - this.queued = false; - this.detail.event = ev; - updateScrollDetail(this.detail, this.scrollEl, ts, shouldStart); - this.ionScroll.emit(this.detail); - }); - } - } - /** - * Get the element where the actual scrolling takes place. - * This element can be used to subscribe to `scroll` events or manually modify - * `scrollTop`. However, it's recommended to use the API provided by `ion-content`: - * - * i.e. Using `ionScroll`, `ionScrollStart`, `ionScrollEnd` for scrolling events - * and `scrollToPoint()` to scroll the content into a certain point. - */ - getScrollElement() { - return Promise.resolve(this.scrollEl); - } - /** - * Scroll to the top of the component. - * - * @param duration The amount of time to take scrolling to the top. Defaults to `0`. - */ - scrollToTop(duration = 0) { - return this.scrollToPoint(undefined, 0, duration); - } - /** - * Scroll to the bottom of the component. - * - * @param duration The amount of time to take scrolling to the bottom. Defaults to `0`. - */ - scrollToBottom(duration = 0) { - const y = this.scrollEl.scrollHeight - this.scrollEl.clientHeight; - return this.scrollToPoint(undefined, y, duration); - } - /** - * Scroll by a specified X/Y distance in the component. - * - * @param x The amount to scroll by on the horizontal axis. - * @param y The amount to scroll by on the vertical axis. - * @param duration The amount of time to take scrolling by that amount. - */ - scrollByPoint(x, y, duration) { - return this.scrollToPoint(x + this.scrollEl.scrollLeft, y + this.scrollEl.scrollTop, duration); - } - /** - * Scroll to a specified X/Y location in the component. - * - * @param x The point to scroll to on the horizontal axis. - * @param y The point to scroll to on the vertical axis. - * @param duration The amount of time to take scrolling to that point. Defaults to `0`. - */ - async scrollToPoint(x, y, duration = 0) { - const el = this.scrollEl; - if (duration < 32) { - if (y != null) { - el.scrollTop = y; - } - if (x != null) { - el.scrollLeft = x; - } - return; - } - let resolve; - let startTime = 0; - const promise = new Promise(r => resolve = r); - const fromY = el.scrollTop; - const fromX = el.scrollLeft; - const deltaY = y != null ? y - fromY : 0; - const deltaX = x != null ? x - fromX : 0; - // scroll loop - const step = (timeStamp) => { - const linearTime = Math.min(1, ((timeStamp - startTime) / duration)) - 1; - const easedT = Math.pow(linearTime, 3) + 1; - if (deltaY !== 0) { - el.scrollTop = Math.floor((easedT * deltaY) + fromY); - } - if (deltaX !== 0) { - el.scrollLeft = Math.floor((easedT * deltaX) + fromX); - } - if (easedT < 1) { - // do not use DomController here - // must use nativeRaf in order to fire in the next frame - // TODO: remove as any - requestAnimationFrame(step); - } - else { - resolve(); - } - }; - // chill out for a frame first - requestAnimationFrame(ts => { - startTime = ts; - step(ts); - }); - return promise; - } - onScrollStart() { - this.isScrolling = true; - this.ionScrollStart.emit({ - isScrolling: true - }); - if (this.watchDog) { - clearInterval(this.watchDog); - } - // watchdog - this.watchDog = setInterval(() => { - if (this.lastScroll < Date.now() - 120) { - this.onScrollEnd(); - } - }, 100); - } - onScrollEnd() { - clearInterval(this.watchDog); - this.watchDog = null; - if (this.isScrolling) { - this.isScrolling = false; - this.ionScrollEnd.emit({ - isScrolling: false - }); - } - } - render() { - const { scrollX, scrollY } = this; - const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - const forceOverscroll = this.shouldForceOverscroll(); - const transitionShadow = (mode === 'ios' && _ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"].getBoolean('experimentalTransitionShadow', true)); - this.resize(); - return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["H"], { class: Object.assign(Object.assign({}, Object(_theme_3f0b0c04_js__WEBPACK_IMPORTED_MODULE_5__["c"])(this.color)), { [mode]: true, 'content-sizing': Object(_theme_3f0b0c04_js__WEBPACK_IMPORTED_MODULE_5__["h"])('ion-popover', this.el), 'overscroll': forceOverscroll }), style: { - '--offset-top': `${this.cTop}px`, - '--offset-bottom': `${this.cBottom}px`, - } }, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { id: "background-content", part: "background" }), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("main", { class: { - 'inner-scroll': true, - 'scroll-x': scrollX, - 'scroll-y': scrollY, - 'overscroll': (scrollX || scrollY) && forceOverscroll - }, ref: el => this.scrollEl = el, onScroll: (this.scrollEvents) ? ev => this.onScroll(ev) : undefined, part: "scroll" }, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", null)), transitionShadow ? (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "transition-effect" }, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "transition-cover" }), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "transition-shadow" }))) : null, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", { name: "fixed" }))); - } - get el() { return Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["i"])(this); } -}; -const getParentElement = (el) => { - if (el.parentElement) { - // normal element with a parent element - return el.parentElement; - } - if (el.parentNode && el.parentNode.host) { - // shadow dom's document fragment - return el.parentNode.host; - } - return null; -}; -const getPageElement = (el) => { - const tabs = el.closest('ion-tabs'); - if (tabs) { - return tabs; - } - const page = el.closest('ion-app,ion-page,.ion-page,page-inner'); - if (page) { - return page; - } - return getParentElement(el); -}; -// ******** DOM READ **************** -const updateScrollDetail = (detail, el, timestamp, shouldStart) => { - const prevX = detail.currentX; - const prevY = detail.currentY; - const prevT = detail.currentTime; - const currentX = el.scrollLeft; - const currentY = el.scrollTop; - const timeDelta = timestamp - prevT; - if (shouldStart) { - // remember the start positions - detail.startTime = timestamp; - detail.startX = currentX; - detail.startY = currentY; - detail.velocityX = detail.velocityY = 0; - } - detail.currentTime = timestamp; - detail.currentX = detail.scrollLeft = currentX; - detail.currentY = detail.scrollTop = currentY; - detail.deltaX = currentX - detail.startX; - detail.deltaY = currentY - detail.startY; - if (timeDelta > 0 && timeDelta < 100) { - const velocityX = (currentX - prevX) / timeDelta; - const velocityY = (currentY - prevY) / timeDelta; - detail.velocityX = velocityX * 0.7 + detail.velocityX * 0.3; - detail.velocityY = velocityY * 0.7 + detail.velocityY * 0.3; - } -}; -Content.style = contentCss; - -const footerIosCss = "ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-ios ion-toolbar:first-of-type{--border-width:0.55px 0 0}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.footer-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.footer-translucent-ios ion-toolbar{--opacity:.8}}.footer-ios.ion-no-border ion-toolbar:first-of-type{--border-width:0}"; - -const footerMdCss = "ion-footer{display:block;position:relative;-ms-flex-order:1;order:1;width:100%;z-index:10}ion-footer ion-toolbar:last-of-type{padding-bottom:var(--ion-safe-area-bottom, 0)}.footer-md::before{left:0;top:-2px;bottom:auto;background-position:left 0 top 0;position:absolute;width:100%;height:2px;background-image:url(\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHBAMAAADzDtBxAAAAD1BMVEUAAAAAAAAAAAAAAAAAAABPDueNAAAABXRSTlMUCS0gBIh/TXEAAAAaSURBVAjXYxCEAgY4UIICBmMogMsgFLtAAQCNSwXZKOdPxgAAAABJRU5ErkJggg==\");background-repeat:repeat-x;content:\"\"}[dir=rtl] .footer-md::before,:host-context([dir=rtl]) .footer-md::before{left:unset;right:unset;right:0}[dir=rtl] .footer-md::before,:host-context([dir=rtl]) .footer-md::before{background-position:right 0 top 0}.footer-md.ion-no-border::before{display:none}"; - -const Footer = class { - constructor(hostRef) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef); - /** - * If `true`, the footer will be translucent. - * Only applies when the mode is `"ios"` and the device supports - * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility). - * - * Note: In order to scroll content behind the footer, the `fullscreen` - * attribute needs to be set on the content. - */ - this.translucent = false; - } - render() { - const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - const translucent = this.translucent; - return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["H"], { role: "contentinfo", class: { - [mode]: true, - // Used internally for styling - [`footer-${mode}`]: true, - [`footer-translucent`]: translucent, - [`footer-translucent-${mode}`]: translucent, - } }, mode === 'ios' && translucent && - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "footer-background" }), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", null))); - } -}; -Footer.style = { - ios: footerIosCss, - md: footerMdCss -}; - -const TRANSITION = 'all 0.2s ease-in-out'; -const cloneElement = (tagName) => { - const getCachedEl = document.querySelector(`${tagName}.ion-cloned-element`); - if (getCachedEl !== null) { - return getCachedEl; - } - const clonedEl = document.createElement(tagName); - clonedEl.classList.add('ion-cloned-element'); - clonedEl.style.setProperty('display', 'none'); - document.body.appendChild(clonedEl); - return clonedEl; -}; -const createHeaderIndex = (headerEl) => { - if (!headerEl) { - return; - } - const toolbars = headerEl.querySelectorAll('ion-toolbar'); - return { - el: headerEl, - toolbars: Array.from(toolbars).map((toolbar) => { - const ionTitleEl = toolbar.querySelector('ion-title'); - return { - el: toolbar, - background: toolbar.shadowRoot.querySelector('.toolbar-background'), - ionTitleEl, - innerTitleEl: (ionTitleEl) ? ionTitleEl.shadowRoot.querySelector('.toolbar-title') : null, - ionButtonsEl: Array.from(toolbar.querySelectorAll('ion-buttons')) || [] - }; - }) || [] - }; -}; -const handleContentScroll = (scrollEl, scrollHeaderIndex, contentEl) => { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["f"])(() => { - const scrollTop = scrollEl.scrollTop; - const scale = Object(_helpers_5c745fbd_js__WEBPACK_IMPORTED_MODULE_2__["c"])(1, 1 + (-scrollTop / 500), 1.1); - // Native refresher should not cause titles to scale - const nativeRefresher = contentEl.querySelector('ion-refresher.refresher-native'); - if (nativeRefresher === null) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["c"])(() => { - scaleLargeTitles(scrollHeaderIndex.toolbars, scale); - }); - } - }); -}; -const setToolbarBackgroundOpacity = (toolbar, opacity) => { - if (opacity === undefined) { - toolbar.background.style.removeProperty('--opacity'); - } - else { - toolbar.background.style.setProperty('--opacity', opacity.toString()); - } -}; -const handleToolbarBorderIntersection = (ev, mainHeaderIndex) => { - if (!ev[0].isIntersecting) { - return; - } - /** - * There is a bug in Safari where overflow scrolling on a non-body element - * does not always reset the scrollTop position to 0 when letting go. It will - * set to 1 once the rubber band effect has ended. This causes the background to - * appear slightly on certain app setups. - */ - const scale = (ev[0].intersectionRatio > 0.9) ? 0 : ((1 - ev[0].intersectionRatio) * 100) / 75; - mainHeaderIndex.toolbars.forEach(toolbar => { - setToolbarBackgroundOpacity(toolbar, (scale === 1) ? undefined : scale); - }); -}; -/** - * If toolbars are intersecting, hide the scrollable toolbar content - * and show the primary toolbar content. If the toolbars are not intersecting, - * hide the primary toolbar content and show the scrollable toolbar content - */ -const handleToolbarIntersection = (ev, mainHeaderIndex, scrollHeaderIndex) => { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["c"])(() => { - handleToolbarBorderIntersection(ev, mainHeaderIndex); - const event = ev[0]; - const intersection = event.intersectionRect; - const intersectionArea = intersection.width * intersection.height; - const rootArea = event.rootBounds.width * event.rootBounds.height; - const isPageHidden = intersectionArea === 0 && rootArea === 0; - const leftDiff = Math.abs(intersection.left - event.boundingClientRect.left); - const rightDiff = Math.abs(intersection.right - event.boundingClientRect.right); - const isPageTransitioning = intersectionArea > 0 && (leftDiff >= 5 || rightDiff >= 5); - if (isPageHidden || isPageTransitioning) { - return; - } - if (event.isIntersecting) { - setHeaderActive(mainHeaderIndex, false); - setHeaderActive(scrollHeaderIndex); - } - else { - /** - * There is a bug with IntersectionObserver on Safari - * where `event.isIntersecting === false` when cancelling - * a swipe to go back gesture. Checking the intersection - * x, y, width, and height provides a workaround. This bug - * does not happen when using Safari + Web Animations, - * only Safari + CSS Animations. - */ - const hasValidIntersection = (intersection.x === 0 && intersection.y === 0) || (intersection.width !== 0 && intersection.height !== 0); - if (hasValidIntersection) { - setHeaderActive(mainHeaderIndex); - setHeaderActive(scrollHeaderIndex, false); - setToolbarBackgroundOpacity(mainHeaderIndex.toolbars[0]); - } - } - }); -}; -const setHeaderActive = (headerIndex, active = true) => { - if (active) { - headerIndex.el.classList.remove('header-collapse-condense-inactive'); - } - else { - headerIndex.el.classList.add('header-collapse-condense-inactive'); - } -}; -const scaleLargeTitles = (toolbars = [], scale = 1, transition = false) => { - toolbars.forEach(toolbar => { - const ionTitle = toolbar.ionTitleEl; - const titleDiv = toolbar.innerTitleEl; - if (!ionTitle || ionTitle.size !== 'large') { - return; - } - titleDiv.style.transition = (transition) ? TRANSITION : ''; - titleDiv.style.transform = `scale3d(${scale}, ${scale}, 1)`; - }); -}; - -const headerIosCss = "ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-ios ion-toolbar:last-of-type{--border-width:0 0 0.55px}@supports ((-webkit-backdrop-filter: blur(0)) or (backdrop-filter: blur(0))){.header-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}.header-translucent-ios ion-toolbar{--opacity:.8}.header-collapse-condense-inactive .header-background{-webkit-backdrop-filter:blur(20px);backdrop-filter:blur(20px)}}.header-ios.ion-no-border ion-toolbar:last-of-type{--border-width:0}.header-collapse-condense{z-index:9}.header-collapse-condense ion-toolbar{position:-webkit-sticky;position:sticky;top:0}.header-collapse-condense ion-toolbar:first-of-type{padding-top:7px;z-index:1}.header-collapse-condense ion-toolbar{--background:var(--ion-background-color, #fff);z-index:0}.header-collapse-condense ion-toolbar ion-searchbar{height:48px;padding-top:0px;padding-bottom:13px}.header-collapse-main ion-toolbar.in-toolbar ion-title,.header-collapse-main ion-toolbar.in-toolbar ion-buttons{-webkit-transition:all 0.2s ease-in-out;transition:all 0.2s ease-in-out}.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive:not(.header-collapse-condense) ion-toolbar.in-toolbar ion-buttons.buttons-collapse{opacity:0;pointer-events:none}.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-title,.header-collapse-condense-inactive.header-collapse-condense ion-toolbar.in-toolbar ion-buttons.buttons-collapse{visibility:hidden}"; - -const headerMdCss = "ion-header{display:block;position:relative;-ms-flex-order:-1;order:-1;width:100%;z-index:10}ion-header ion-toolbar:first-of-type{padding-top:var(--ion-safe-area-top, 0)}.header-md::after{left:0;bottom:-5px;background-position:left 0 top -2px;position:absolute;width:100%;height:5px;background-image:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAHBAMAAADzDtBxAAAAD1BMVEUAAAAAAAAAAAAAAAAAAABPDueNAAAABXRSTlMUCS0gBIh/TXEAAAAaSURBVAjXYxCEAgY4UIICBmMogMsgFLtAAQCNSwXZKOdPxgAAAABJRU5ErkJggg==);background-repeat:repeat-x;content:\"\"}[dir=rtl] .header-md::after,:host-context([dir=rtl]) .header-md::after{left:unset;right:unset;right:0}[dir=rtl] .header-md::after,:host-context([dir=rtl]) .header-md::after{background-position:right 0 top -2px}.header-collapse-condense{display:none}.header-md.ion-no-border::after{display:none}"; - -const Header = class { - constructor(hostRef) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef); - this.collapsibleHeaderInitialized = false; - /** - * If `true`, the header will be translucent. - * Only applies when the mode is `"ios"` and the device supports - * [`backdrop-filter`](https://developer.mozilla.org/en-US/docs/Web/CSS/backdrop-filter#Browser_compatibility). - * - * Note: In order to scroll content behind the header, the `fullscreen` - * attribute needs to be set on the content. - */ - this.translucent = false; - } - async componentDidLoad() { - await this.checkCollapsibleHeader(); - } - async componentDidUpdate() { - await this.checkCollapsibleHeader(); - } - componentDidUnload() { - this.destroyCollapsibleHeader(); - } - async checkCollapsibleHeader() { - // Determine if the header can collapse - const hasCollapse = this.collapse === 'condense'; - const canCollapse = (hasCollapse && Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this) === 'ios') ? hasCollapse : false; - if (!canCollapse && this.collapsibleHeaderInitialized) { - this.destroyCollapsibleHeader(); - } - else if (canCollapse && !this.collapsibleHeaderInitialized) { - const pageEl = this.el.closest('ion-app,ion-page,.ion-page,page-inner'); - const contentEl = (pageEl) ? pageEl.querySelector('ion-content') : null; - // Cloned elements are always needed in iOS transition - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["c"])(() => { - const title = cloneElement('ion-title'); - title.size = 'large'; - cloneElement('ion-back-button'); - }); - await this.setupCollapsibleHeader(contentEl, pageEl); - } - } - destroyCollapsibleHeader() { - if (this.intersectionObserver) { - this.intersectionObserver.disconnect(); - this.intersectionObserver = undefined; - } - if (this.scrollEl && this.contentScrollCallback) { - this.scrollEl.removeEventListener('scroll', this.contentScrollCallback); - this.contentScrollCallback = undefined; - } - if (this.collapsibleMainHeader) { - this.collapsibleMainHeader.classList.remove('header-collapse-main'); - this.collapsibleMainHeader = undefined; - } - } - async setupCollapsibleHeader(contentEl, pageEl) { - if (!contentEl || !pageEl) { - console.error('ion-header requires a content to collapse, make sure there is an ion-content.'); - return; - } - if (typeof IntersectionObserver === 'undefined') { - return; - } - this.scrollEl = await contentEl.getScrollElement(); - const headers = pageEl.querySelectorAll('ion-header'); - this.collapsibleMainHeader = Array.from(headers).find((header) => header.collapse !== 'condense'); - if (!this.collapsibleMainHeader) { - return; - } - const mainHeaderIndex = createHeaderIndex(this.collapsibleMainHeader); - const scrollHeaderIndex = createHeaderIndex(this.el); - if (!mainHeaderIndex || !scrollHeaderIndex) { - return; - } - setHeaderActive(mainHeaderIndex, false); - mainHeaderIndex.toolbars.forEach(toolbar => { - setToolbarBackgroundOpacity(toolbar, 0); - }); - /** - * Handle interaction between toolbar collapse and - * showing/hiding content in the primary ion-header - * as well as progressively showing/hiding the main header - * border as the top-most toolbar collapses or expands. - */ - const toolbarIntersection = (ev) => { handleToolbarIntersection(ev, mainHeaderIndex, scrollHeaderIndex); }; - this.intersectionObserver = new IntersectionObserver(toolbarIntersection, { root: contentEl, threshold: [0.25, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1] }); - this.intersectionObserver.observe(scrollHeaderIndex.toolbars[scrollHeaderIndex.toolbars.length - 1].el); - /** - * Handle scaling of large iOS titles and - * showing/hiding border on last toolbar - * in primary header - */ - this.contentScrollCallback = () => { handleContentScroll(this.scrollEl, scrollHeaderIndex, contentEl); }; - this.scrollEl.addEventListener('scroll', this.contentScrollCallback); - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["c"])(() => { - if (this.collapsibleMainHeader !== undefined) { - this.collapsibleMainHeader.classList.add('header-collapse-main'); - } - }); - this.collapsibleHeaderInitialized = true; - } - render() { - const { translucent } = this; - const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - const collapse = this.collapse || 'none'; - return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["H"], { role: "banner", class: { - [mode]: true, - // Used internally for styling - [`header-${mode}`]: true, - [`header-translucent`]: this.translucent, - [`header-collapse-${collapse}`]: true, - [`header-translucent-${mode}`]: this.translucent, - } }, mode === 'ios' && translucent && - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "header-background" }), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", null))); - } - get el() { return Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["i"])(this); } -}; -Header.style = { - ios: headerIosCss, - md: headerMdCss -}; - -const routeOutletCss = ":host{left:0;right:0;top:0;bottom:0;position:absolute;contain:layout size style;overflow:hidden;z-index:0}"; - -const RouterOutlet = class { - constructor(hostRef) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef); - this.ionNavWillLoad = Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["e"])(this, "ionNavWillLoad", 7); - this.ionNavWillChange = Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["e"])(this, "ionNavWillChange", 3); - this.ionNavDidChange = Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["e"])(this, "ionNavDidChange", 3); - this.animationEnabled = true; - /** - * The mode determines which platform styles to use. - */ - this.mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - /** - * If `true`, the router-outlet should animate the transition of components. - */ - this.animated = true; - } - swipeHandlerChanged() { - if (this.gesture) { - this.gesture.enable(this.swipeHandler !== undefined); - } - } - async connectedCallback() { - this.gesture = (await __webpack_require__.e(/*! import() | swipe-back-0a6a44c8-js */ "swipe-back-0a6a44c8-js").then(__webpack_require__.bind(null, /*! ./swipe-back-0a6a44c8.js */ "./node_modules/@ionic/core/dist/esm/swipe-back-0a6a44c8.js"))).createSwipeBackGesture(this.el, () => !!this.swipeHandler && this.swipeHandler.canStart() && this.animationEnabled, () => this.swipeHandler && this.swipeHandler.onStart(), step => this.ani && this.ani.progressStep(step), (shouldComplete, step, dur) => { - if (this.ani) { - this.animationEnabled = false; - this.ani.onFinish(() => { - this.animationEnabled = true; - if (this.swipeHandler) { - this.swipeHandler.onEnd(shouldComplete); - } - }, { oneTimeCallback: true }); - // Account for rounding errors in JS - let newStepValue = (shouldComplete) ? -0.001 : 0.001; - /** - * Animation will be reversed here, so need to - * reverse the easing curve as well - * - * Additionally, we need to account for the time relative - * to the new easing curve, as `stepValue` is going to be given - * in terms of a linear curve. - */ - if (!shouldComplete) { - this.ani.easing('cubic-bezier(1, 0, 0.68, 0.28)'); - newStepValue += Object(_cubic_bezier_685f606a_js__WEBPACK_IMPORTED_MODULE_4__["g"])([0, 0], [1, 0], [0.68, 0.28], [1, 1], step)[0]; - } - else { - newStepValue += Object(_cubic_bezier_685f606a_js__WEBPACK_IMPORTED_MODULE_4__["g"])([0, 0], [0.32, 0.72], [0, 1], [1, 1], step)[0]; - } - this.ani.progressEnd(shouldComplete ? 1 : 0, newStepValue, dur); - } - }); - this.swipeHandlerChanged(); - } - componentWillLoad() { - this.ionNavWillLoad.emit(); - } - disconnectedCallback() { - if (this.gesture) { - this.gesture.destroy(); - this.gesture = undefined; - } - } - /** @internal */ - async commit(enteringEl, leavingEl, opts) { - const unlock = await this.lock(); - let changed = false; - try { - changed = await this.transition(enteringEl, leavingEl, opts); - } - catch (e) { - console.error(e); - } - unlock(); - return changed; - } - /** @internal */ - async setRouteId(id, params, direction, animation) { - const changed = await this.setRoot(id, params, { - duration: direction === 'root' ? 0 : undefined, - direction: direction === 'back' ? 'back' : 'forward', - animationBuilder: animation - }); - return { - changed, - element: this.activeEl - }; - } - /** @internal */ - async getRouteId() { - const active = this.activeEl; - return active ? { - id: active.tagName, - element: active, - } : undefined; - } - async setRoot(component, params, opts) { - if (this.activeComponent === component) { - return false; - } - // attach entering view to DOM - const leavingEl = this.activeEl; - const enteringEl = await Object(_framework_delegate_d1eb6504_js__WEBPACK_IMPORTED_MODULE_6__["a"])(this.delegate, this.el, component, ['ion-page', 'ion-page-invisible'], params); - this.activeComponent = component; - this.activeEl = enteringEl; - // commit animation - await this.commit(enteringEl, leavingEl, opts); - await Object(_framework_delegate_d1eb6504_js__WEBPACK_IMPORTED_MODULE_6__["d"])(this.delegate, leavingEl); - return true; - } - async transition(enteringEl, leavingEl, opts = {}) { - if (leavingEl === enteringEl) { - return false; - } - // emit nav will change event - this.ionNavWillChange.emit(); - const { el, mode } = this; - const animated = this.animated && _ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"].getBoolean('animated', true); - const animationBuilder = this.animation || opts.animationBuilder || _ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["c"].get('navAnimation'); - await Object(_index_37b50f53_js__WEBPACK_IMPORTED_MODULE_3__["t"])(Object.assign(Object.assign({ mode, - animated, - enteringEl, - leavingEl, baseEl: el, progressCallback: (opts.progressAnimation - ? ani => this.ani = ani - : undefined) }, opts), { animationBuilder })); - // emit nav changed event - this.ionNavDidChange.emit(); - return true; - } - async lock() { - const p = this.waitPromise; - let resolve; - this.waitPromise = new Promise(r => resolve = r); - if (p !== undefined) { - await p; - } - return resolve; - } - render() { - return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", null)); - } - get el() { return Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["i"])(this); } - static get watchers() { return { - "swipeHandler": ["swipeHandlerChanged"] - }; } -}; -RouterOutlet.style = routeOutletCss; - -const titleIosCss = ":host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}:host(.ion-color){color:var(--ion-color-base)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host{left:0;top:0;padding-left:90px;padding-right:90px;padding-top:0;padding-bottom:0;position:absolute;width:100%;height:100%;-webkit-transform:translateZ(0);transform:translateZ(0);font-size:17px;font-weight:600;text-align:center;-webkit-box-sizing:border-box;box-sizing:border-box;pointer-events:none}:host-context([dir=rtl]){left:unset;right:unset;right:0}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:90px;padding-inline-start:90px;-webkit-padding-end:90px;padding-inline-end:90px}}:host(.title-small){padding-left:9px;padding-right:9px;padding-top:6px;padding-bottom:16px;position:relative;font-size:13px;font-weight:normal}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(.title-small){padding-left:unset;padding-right:unset;-webkit-padding-start:9px;padding-inline-start:9px;-webkit-padding-end:9px;padding-inline-end:9px}}:host(.title-large){padding-left:16px;padding-right:16px;padding-top:0;padding-bottom:0;-webkit-transform-origin:left center;transform-origin:left center;bottom:0;-ms-flex-align:end;align-items:flex-end;min-width:100%;padding-bottom:6px;font-size:34px;font-weight:700;text-align:start}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host(.title-large){padding-left:unset;padding-right:unset;-webkit-padding-start:16px;padding-inline-start:16px;-webkit-padding-end:16px;padding-inline-end:16px}}:host-context([dir=rtl]):host(.title-large),:host-context([dir=rtl]).title-large{-webkit-transform-origin:right center;transform-origin:right center}:host(.title-large.ion-cloned-element){--color:var(--ion-text-color, #000)}:host(.title-large) .toolbar-title{-webkit-transform-origin:inherit;transform-origin:inherit}:host-context([dir=rtl]):host(.title-large) .toolbar-title,:host-context([dir=rtl]).title-large .toolbar-title{-webkit-transform-origin:calc(100% - inherit);transform-origin:calc(100% - inherit)}"; - -const titleMdCss = ":host{--color:initial;display:-ms-flexbox;display:flex;-ms-flex:1;flex:1;-ms-flex-align:center;align-items:center;-webkit-transform:translateZ(0);transform:translateZ(0);color:var(--color)}:host(.ion-color){color:var(--ion-color-base)}.toolbar-title{display:block;width:100%;text-overflow:ellipsis;white-space:nowrap;overflow:hidden;pointer-events:auto}:host(.title-small) .toolbar-title{white-space:normal}:host{padding-left:20px;padding-right:20px;padding-top:0;padding-bottom:0;font-size:20px;font-weight:500;letter-spacing:0.0125em}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:20px;padding-inline-start:20px;-webkit-padding-end:20px;padding-inline-end:20px}}:host(.title-small){width:100%;height:100%;font-size:15px;font-weight:normal}"; - -const ToolbarTitle = class { - constructor(hostRef) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef); - this.ionStyle = Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["e"])(this, "ionStyle", 7); - } - sizeChanged() { - this.emitStyle(); - } - connectedCallback() { - this.emitStyle(); - } - emitStyle() { - const size = this.getSize(); - this.ionStyle.emit({ - [`title-${size}`]: true - }); - } - getSize() { - return (this.size !== undefined) ? this.size : 'default'; - } - render() { - const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - const size = this.getSize(); - return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["H"], { class: Object.assign({ [mode]: true, [`title-${size}`]: true }, Object(_theme_3f0b0c04_js__WEBPACK_IMPORTED_MODULE_5__["c"])(this.color)) }, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "toolbar-title" }, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", null)))); - } - get el() { return Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["i"])(this); } - static get watchers() { return { - "size": ["sizeChanged"] - }; } -}; -ToolbarTitle.style = { - ios: titleIosCss, - md: titleMdCss -}; - -const toolbarIosCss = ":host{--border-width:0;--border-style:solid;--opacity:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding-left:var(--ion-safe-area-left);padding-right:var(--ion-safe-area-right);display:block;position:relative;width:100%;color:var(--color);font-family:var(--ion-font-family, inherit);contain:content;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--ion-safe-area-left);padding-inline-start:var(--ion-safe-area-left);-webkit-padding-end:var(--ion-safe-area-right);padding-inline-end:var(--ion-safe-area-right)}}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.toolbar-container{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.toolbar-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:var(--opacity);z-index:-1;pointer-events:none}::slotted(ion-progress-bar){left:0;right:0;bottom:0;position:absolute}:host{--background:var(--ion-toolbar-background, var(--ion-color-step-50, #fff));--color:var(--ion-toolbar-color, var(--ion-text-color, #000));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, rgba(0, 0, 0, 0.2))));--padding-top:3px;--padding-bottom:3px;--padding-start:4px;--padding-end:4px;--min-height:44px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:4;order:4;min-width:0}:host(.toolbar-segment) .toolbar-content{display:-ms-inline-flexbox;display:inline-flex}:host(.toolbar-searchbar) .toolbar-container{padding-top:0;padding-bottom:0}:host(.toolbar-searchbar) ::slotted(*){-ms-flex-item-align:start;align-self:start}:host(.toolbar-searchbar) ::slotted(ion-chip){margin-top:3px}:host(.toolbar-searchbar) ::slotted(ion-back-button){height:38px}::slotted(ion-buttons){min-height:38px}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:3;order:3}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}:host(.toolbar-title-large) .toolbar-container{-ms-flex-wrap:wrap;flex-wrap:wrap;-ms-flex-align:start;align-items:flex-start}:host(.toolbar-title-large) .toolbar-content ion-title{-ms-flex:1;flex:1;-ms-flex-order:8;order:8;min-width:100%}"; - -const toolbarMdCss = ":host{--border-width:0;--border-style:solid;--opacity:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;padding-left:var(--ion-safe-area-left);padding-right:var(--ion-safe-area-right);display:block;position:relative;width:100%;color:var(--color);font-family:var(--ion-font-family, inherit);contain:content;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){:host{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--ion-safe-area-left);padding-inline-start:var(--ion-safe-area-left);-webkit-padding-end:var(--ion-safe-area-right);padding-inline-end:var(--ion-safe-area-right)}}:host(.ion-color){color:var(--ion-color-contrast)}:host(.ion-color) .toolbar-background{background:var(--ion-color-base)}.toolbar-container{padding-left:var(--padding-start);padding-right:var(--padding-end);padding-top:var(--padding-top);padding-bottom:var(--padding-bottom);display:-ms-flexbox;display:flex;position:relative;-ms-flex-direction:row;flex-direction:row;-ms-flex-align:center;align-items:center;-ms-flex-pack:justify;justify-content:space-between;width:100%;min-height:var(--min-height);contain:content;overflow:hidden;z-index:10;-webkit-box-sizing:border-box;box-sizing:border-box}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){.toolbar-container{padding-left:unset;padding-right:unset;-webkit-padding-start:var(--padding-start);padding-inline-start:var(--padding-start);-webkit-padding-end:var(--padding-end);padding-inline-end:var(--padding-end)}}.toolbar-background{left:0;right:0;top:0;bottom:0;position:absolute;-webkit-transform:translateZ(0);transform:translateZ(0);border-width:var(--border-width);border-style:var(--border-style);border-color:var(--border-color);background:var(--background);contain:strict;opacity:var(--opacity);z-index:-1;pointer-events:none}::slotted(ion-progress-bar){left:0;right:0;bottom:0;position:absolute}:host{--background:var(--ion-toolbar-background, var(--ion-background-color, #fff));--color:var(--ion-toolbar-color, var(--ion-text-color, #424242));--border-color:var(--ion-toolbar-border-color, var(--ion-border-color, var(--ion-color-step-150, #c1c4cd)));--padding-top:0;--padding-bottom:0;--padding-start:0;--padding-end:0;--min-height:56px}.toolbar-content{-ms-flex:1;flex:1;-ms-flex-order:3;order:3;min-width:0;max-width:100%}::slotted(ion-segment){min-height:var(--min-height)}::slotted(.buttons-first-slot){margin-left:4px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){::slotted(.buttons-first-slot){margin-left:unset;-webkit-margin-start:4px;margin-inline-start:4px}}::slotted(.buttons-last-slot){margin-right:4px}@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0){::slotted(.buttons-last-slot){margin-right:unset;-webkit-margin-end:4px;margin-inline-end:4px}}::slotted([slot=start]){-ms-flex-order:2;order:2}::slotted([slot=secondary]){-ms-flex-order:4;order:4}::slotted([slot=primary]){-ms-flex-order:5;order:5;text-align:end}::slotted([slot=end]){-ms-flex-order:6;order:6;text-align:end}"; - -const Toolbar = class { - constructor(hostRef) { - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["r"])(this, hostRef); - this.childrenStyles = new Map(); - } - componentWillLoad() { - const buttons = Array.from(this.el.querySelectorAll('ion-buttons')); - const firstButtons = buttons.find(button => { - return button.slot === 'start'; - }); - if (firstButtons) { - firstButtons.classList.add('buttons-first-slot'); - } - const buttonsReversed = buttons.reverse(); - const lastButtons = buttonsReversed.find(button => button.slot === 'end') || - buttonsReversed.find(button => button.slot === 'primary') || - buttonsReversed.find(button => button.slot === 'secondary'); - if (lastButtons) { - lastButtons.classList.add('buttons-last-slot'); - } - } - childrenStyle(ev) { - ev.stopPropagation(); - const tagName = ev.target.tagName; - const updatedStyles = ev.detail; - const newStyles = {}; - const childStyles = this.childrenStyles.get(tagName) || {}; - let hasStyleChange = false; - Object.keys(updatedStyles).forEach(key => { - const childKey = `toolbar-${key}`; - const newValue = updatedStyles[key]; - if (newValue !== childStyles[childKey]) { - hasStyleChange = true; - } - if (newValue) { - newStyles[childKey] = true; - } - }); - if (hasStyleChange) { - this.childrenStyles.set(tagName, newStyles); - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["j"])(this); - } - } - render() { - const mode = Object(_ionic_global_837be8f3_js__WEBPACK_IMPORTED_MODULE_1__["b"])(this); - const childStyles = {}; - this.childrenStyles.forEach(value => { - Object.assign(childStyles, value); - }); - return (Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["H"], { class: Object.assign(Object.assign({ 'in-toolbar': Object(_theme_3f0b0c04_js__WEBPACK_IMPORTED_MODULE_5__["h"])('ion-toolbar', this.el), [mode]: true }, childStyles), Object(_theme_3f0b0c04_js__WEBPACK_IMPORTED_MODULE_5__["c"])(this.color)) }, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "toolbar-background" }), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "toolbar-container" }, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", { name: "start" }), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", { name: "secondary" }), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("div", { class: "toolbar-content" }, Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", null)), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", { name: "primary" }), Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["h"])("slot", { name: "end" })))); - } - get el() { return Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["i"])(this); } -}; -Toolbar.style = { - ios: toolbarIosCss, - md: toolbarMdCss -}; - - - - -/***/ }) - -}]); -//# sourceMappingURL=2.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/all.min.css b/src/assets/images/Gabinete Digital_files/all.min.css deleted file mode 100644 index f7eacc802..000000000 --- a/src/assets/images/Gabinete Digital_files/all.min.css +++ /dev/null @@ -1,5 +0,0 @@ -/*! - * Font Awesome Free 5.14.0 by @fontawesome - https://fontawesome.com - * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - */ -.fa,.fab,.fad,.fal,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:inline-block;font-style:normal;font-variant:normal;text-rendering:auto;line-height:1}.fa-lg{font-size:1.33333em;line-height:.75em;vertical-align:-.0667em}.fa-xs{font-size:.75em}.fa-sm{font-size:.875em}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:2.5em;padding-left:0}.fa-ul>li{position:relative}.fa-li{left:-2em;position:absolute;text-align:center;width:2em;line-height:inherit}.fa-border{border:.08em solid #eee;border-radius:.1em;padding:.2em .25em .15em}.fa-pull-left{float:left}.fa-pull-right{float:right}.fa.fa-pull-left,.fab.fa-pull-left,.fal.fa-pull-left,.far.fa-pull-left,.fas.fa-pull-left{margin-right:.3em}.fa.fa-pull-right,.fab.fa-pull-right,.fal.fa-pull-right,.far.fa-pull-right,.fas.fa-pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s linear infinite;animation:fa-spin 2s linear infinite}.fa-pulse{-webkit-animation:fa-spin 1s steps(8) infinite;animation:fa-spin 1s steps(8) infinite}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical,.fa-flip-vertical{-ms-filter:"progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)"}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}:root .fa-flip-both,:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-90,:root .fa-rotate-180,:root .fa-rotate-270{-webkit-filter:none;filter:none}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-500px:before{content:"\f26e"}.fa-accessible-icon:before{content:"\f368"}.fa-accusoft:before{content:"\f369"}.fa-acquisitions-incorporated:before{content:"\f6af"}.fa-ad:before{content:"\f641"}.fa-address-book:before{content:"\f2b9"}.fa-address-card:before{content:"\f2bb"}.fa-adjust:before{content:"\f042"}.fa-adn:before{content:"\f170"}.fa-adobe:before{content:"\f778"}.fa-adversal:before{content:"\f36a"}.fa-affiliatetheme:before{content:"\f36b"}.fa-air-freshener:before{content:"\f5d0"}.fa-airbnb:before{content:"\f834"}.fa-algolia:before{content:"\f36c"}.fa-align-center:before{content:"\f037"}.fa-align-justify:before{content:"\f039"}.fa-align-left:before{content:"\f036"}.fa-align-right:before{content:"\f038"}.fa-alipay:before{content:"\f642"}.fa-allergies:before{content:"\f461"}.fa-amazon:before{content:"\f270"}.fa-amazon-pay:before{content:"\f42c"}.fa-ambulance:before{content:"\f0f9"}.fa-american-sign-language-interpreting:before{content:"\f2a3"}.fa-amilia:before{content:"\f36d"}.fa-anchor:before{content:"\f13d"}.fa-android:before{content:"\f17b"}.fa-angellist:before{content:"\f209"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-down:before{content:"\f107"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angry:before{content:"\f556"}.fa-angrycreative:before{content:"\f36e"}.fa-angular:before{content:"\f420"}.fa-ankh:before{content:"\f644"}.fa-app-store:before{content:"\f36f"}.fa-app-store-ios:before{content:"\f370"}.fa-apper:before{content:"\f371"}.fa-apple:before{content:"\f179"}.fa-apple-alt:before{content:"\f5d1"}.fa-apple-pay:before{content:"\f415"}.fa-archive:before{content:"\f187"}.fa-archway:before{content:"\f557"}.fa-arrow-alt-circle-down:before{content:"\f358"}.fa-arrow-alt-circle-left:before{content:"\f359"}.fa-arrow-alt-circle-right:before{content:"\f35a"}.fa-arrow-alt-circle-up:before{content:"\f35b"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-down:before{content:"\f063"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrows-alt:before{content:"\f0b2"}.fa-arrows-alt-h:before{content:"\f337"}.fa-arrows-alt-v:before{content:"\f338"}.fa-artstation:before{content:"\f77a"}.fa-assistive-listening-systems:before{content:"\f2a2"}.fa-asterisk:before{content:"\f069"}.fa-asymmetrik:before{content:"\f372"}.fa-at:before{content:"\f1fa"}.fa-atlas:before{content:"\f558"}.fa-atlassian:before{content:"\f77b"}.fa-atom:before{content:"\f5d2"}.fa-audible:before{content:"\f373"}.fa-audio-description:before{content:"\f29e"}.fa-autoprefixer:before{content:"\f41c"}.fa-avianex:before{content:"\f374"}.fa-aviato:before{content:"\f421"}.fa-award:before{content:"\f559"}.fa-aws:before{content:"\f375"}.fa-baby:before{content:"\f77c"}.fa-baby-carriage:before{content:"\f77d"}.fa-backspace:before{content:"\f55a"}.fa-backward:before{content:"\f04a"}.fa-bacon:before{content:"\f7e5"}.fa-bacteria:before{content:"\e059"}.fa-bacterium:before{content:"\e05a"}.fa-bahai:before{content:"\f666"}.fa-balance-scale:before{content:"\f24e"}.fa-balance-scale-left:before{content:"\f515"}.fa-balance-scale-right:before{content:"\f516"}.fa-ban:before{content:"\f05e"}.fa-band-aid:before{content:"\f462"}.fa-bandcamp:before{content:"\f2d5"}.fa-barcode:before{content:"\f02a"}.fa-bars:before{content:"\f0c9"}.fa-baseball-ball:before{content:"\f433"}.fa-basketball-ball:before{content:"\f434"}.fa-bath:before{content:"\f2cd"}.fa-battery-empty:before{content:"\f244"}.fa-battery-full:before{content:"\f240"}.fa-battery-half:before{content:"\f242"}.fa-battery-quarter:before{content:"\f243"}.fa-battery-three-quarters:before{content:"\f241"}.fa-battle-net:before{content:"\f835"}.fa-bed:before{content:"\f236"}.fa-beer:before{content:"\f0fc"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-bell:before{content:"\f0f3"}.fa-bell-slash:before{content:"\f1f6"}.fa-bezier-curve:before{content:"\f55b"}.fa-bible:before{content:"\f647"}.fa-bicycle:before{content:"\f206"}.fa-biking:before{content:"\f84a"}.fa-bimobject:before{content:"\f378"}.fa-binoculars:before{content:"\f1e5"}.fa-biohazard:before{content:"\f780"}.fa-birthday-cake:before{content:"\f1fd"}.fa-bitbucket:before{content:"\f171"}.fa-bitcoin:before{content:"\f379"}.fa-bity:before{content:"\f37a"}.fa-black-tie:before{content:"\f27e"}.fa-blackberry:before{content:"\f37b"}.fa-blender:before{content:"\f517"}.fa-blender-phone:before{content:"\f6b6"}.fa-blind:before{content:"\f29d"}.fa-blog:before{content:"\f781"}.fa-blogger:before{content:"\f37c"}.fa-blogger-b:before{content:"\f37d"}.fa-bluetooth:before{content:"\f293"}.fa-bluetooth-b:before{content:"\f294"}.fa-bold:before{content:"\f032"}.fa-bolt:before{content:"\f0e7"}.fa-bomb:before{content:"\f1e2"}.fa-bone:before{content:"\f5d7"}.fa-bong:before{content:"\f55c"}.fa-book:before{content:"\f02d"}.fa-book-dead:before{content:"\f6b7"}.fa-book-medical:before{content:"\f7e6"}.fa-book-open:before{content:"\f518"}.fa-book-reader:before{content:"\f5da"}.fa-bookmark:before{content:"\f02e"}.fa-bootstrap:before{content:"\f836"}.fa-border-all:before{content:"\f84c"}.fa-border-none:before{content:"\f850"}.fa-border-style:before{content:"\f853"}.fa-bowling-ball:before{content:"\f436"}.fa-box:before{content:"\f466"}.fa-box-open:before{content:"\f49e"}.fa-box-tissue:before{content:"\e05b"}.fa-boxes:before{content:"\f468"}.fa-braille:before{content:"\f2a1"}.fa-brain:before{content:"\f5dc"}.fa-bread-slice:before{content:"\f7ec"}.fa-briefcase:before{content:"\f0b1"}.fa-briefcase-medical:before{content:"\f469"}.fa-broadcast-tower:before{content:"\f519"}.fa-broom:before{content:"\f51a"}.fa-brush:before{content:"\f55d"}.fa-btc:before{content:"\f15a"}.fa-buffer:before{content:"\f837"}.fa-bug:before{content:"\f188"}.fa-building:before{content:"\f1ad"}.fa-bullhorn:before{content:"\f0a1"}.fa-bullseye:before{content:"\f140"}.fa-burn:before{content:"\f46a"}.fa-buromobelexperte:before{content:"\f37f"}.fa-bus:before{content:"\f207"}.fa-bus-alt:before{content:"\f55e"}.fa-business-time:before{content:"\f64a"}.fa-buy-n-large:before{content:"\f8a6"}.fa-buysellads:before{content:"\f20d"}.fa-calculator:before{content:"\f1ec"}.fa-calendar:before{content:"\f133"}.fa-calendar-alt:before{content:"\f073"}.fa-calendar-check:before{content:"\f274"}.fa-calendar-day:before{content:"\f783"}.fa-calendar-minus:before{content:"\f272"}.fa-calendar-plus:before{content:"\f271"}.fa-calendar-times:before{content:"\f273"}.fa-calendar-week:before{content:"\f784"}.fa-camera:before{content:"\f030"}.fa-camera-retro:before{content:"\f083"}.fa-campground:before{content:"\f6bb"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-candy-cane:before{content:"\f786"}.fa-cannabis:before{content:"\f55f"}.fa-capsules:before{content:"\f46b"}.fa-car:before{content:"\f1b9"}.fa-car-alt:before{content:"\f5de"}.fa-car-battery:before{content:"\f5df"}.fa-car-crash:before{content:"\f5e1"}.fa-car-side:before{content:"\f5e4"}.fa-caravan:before{content:"\f8ff"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-caret-square-down:before{content:"\f150"}.fa-caret-square-left:before{content:"\f191"}.fa-caret-square-right:before{content:"\f152"}.fa-caret-square-up:before{content:"\f151"}.fa-caret-up:before{content:"\f0d8"}.fa-carrot:before{content:"\f787"}.fa-cart-arrow-down:before{content:"\f218"}.fa-cart-plus:before{content:"\f217"}.fa-cash-register:before{content:"\f788"}.fa-cat:before{content:"\f6be"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-apple-pay:before{content:"\f416"}.fa-cc-diners-club:before{content:"\f24c"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-jcb:before{content:"\f24b"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-cc-visa:before{content:"\f1f0"}.fa-centercode:before{content:"\f380"}.fa-centos:before{content:"\f789"}.fa-certificate:before{content:"\f0a3"}.fa-chair:before{content:"\f6c0"}.fa-chalkboard:before{content:"\f51b"}.fa-chalkboard-teacher:before{content:"\f51c"}.fa-charging-station:before{content:"\f5e7"}.fa-chart-area:before{content:"\f1fe"}.fa-chart-bar:before{content:"\f080"}.fa-chart-line:before{content:"\f201"}.fa-chart-pie:before{content:"\f200"}.fa-check:before{content:"\f00c"}.fa-check-circle:before{content:"\f058"}.fa-check-double:before{content:"\f560"}.fa-check-square:before{content:"\f14a"}.fa-cheese:before{content:"\f7ef"}.fa-chess:before{content:"\f439"}.fa-chess-bishop:before{content:"\f43a"}.fa-chess-board:before{content:"\f43c"}.fa-chess-king:before{content:"\f43f"}.fa-chess-knight:before{content:"\f441"}.fa-chess-pawn:before{content:"\f443"}.fa-chess-queen:before{content:"\f445"}.fa-chess-rook:before{content:"\f447"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-down:before{content:"\f078"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-chevron-up:before{content:"\f077"}.fa-child:before{content:"\f1ae"}.fa-chrome:before{content:"\f268"}.fa-chromecast:before{content:"\f838"}.fa-church:before{content:"\f51d"}.fa-circle:before{content:"\f111"}.fa-circle-notch:before{content:"\f1ce"}.fa-city:before{content:"\f64f"}.fa-clinic-medical:before{content:"\f7f2"}.fa-clipboard:before{content:"\f328"}.fa-clipboard-check:before{content:"\f46c"}.fa-clipboard-list:before{content:"\f46d"}.fa-clock:before{content:"\f017"}.fa-clone:before{content:"\f24d"}.fa-closed-captioning:before{content:"\f20a"}.fa-cloud:before{content:"\f0c2"}.fa-cloud-download-alt:before{content:"\f381"}.fa-cloud-meatball:before{content:"\f73b"}.fa-cloud-moon:before{content:"\f6c3"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-cloud-rain:before{content:"\f73d"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-cloud-sun:before{content:"\f6c4"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-cloud-upload-alt:before{content:"\f382"}.fa-cloudscale:before{content:"\f383"}.fa-cloudsmith:before{content:"\f384"}.fa-cloudversify:before{content:"\f385"}.fa-cocktail:before{content:"\f561"}.fa-code:before{content:"\f121"}.fa-code-branch:before{content:"\f126"}.fa-codepen:before{content:"\f1cb"}.fa-codiepie:before{content:"\f284"}.fa-coffee:before{content:"\f0f4"}.fa-cog:before{content:"\f013"}.fa-cogs:before{content:"\f085"}.fa-coins:before{content:"\f51e"}.fa-columns:before{content:"\f0db"}.fa-comment:before{content:"\f075"}.fa-comment-alt:before{content:"\f27a"}.fa-comment-dollar:before{content:"\f651"}.fa-comment-dots:before{content:"\f4ad"}.fa-comment-medical:before{content:"\f7f5"}.fa-comment-slash:before{content:"\f4b3"}.fa-comments:before{content:"\f086"}.fa-comments-dollar:before{content:"\f653"}.fa-compact-disc:before{content:"\f51f"}.fa-compass:before{content:"\f14e"}.fa-compress:before{content:"\f066"}.fa-compress-alt:before{content:"\f422"}.fa-compress-arrows-alt:before{content:"\f78c"}.fa-concierge-bell:before{content:"\f562"}.fa-confluence:before{content:"\f78d"}.fa-connectdevelop:before{content:"\f20e"}.fa-contao:before{content:"\f26d"}.fa-cookie:before{content:"\f563"}.fa-cookie-bite:before{content:"\f564"}.fa-copy:before{content:"\f0c5"}.fa-copyright:before{content:"\f1f9"}.fa-cotton-bureau:before{content:"\f89e"}.fa-couch:before{content:"\f4b8"}.fa-cpanel:before{content:"\f388"}.fa-creative-commons:before{content:"\f25e"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-credit-card:before{content:"\f09d"}.fa-critical-role:before{content:"\f6c9"}.fa-crop:before{content:"\f125"}.fa-crop-alt:before{content:"\f565"}.fa-cross:before{content:"\f654"}.fa-crosshairs:before{content:"\f05b"}.fa-crow:before{content:"\f520"}.fa-crown:before{content:"\f521"}.fa-crutch:before{content:"\f7f7"}.fa-css3:before{content:"\f13c"}.fa-css3-alt:before{content:"\f38b"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-cut:before{content:"\f0c4"}.fa-cuttlefish:before{content:"\f38c"}.fa-d-and-d:before{content:"\f38d"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-dailymotion:before{content:"\e052"}.fa-dashcube:before{content:"\f210"}.fa-database:before{content:"\f1c0"}.fa-deaf:before{content:"\f2a4"}.fa-deezer:before{content:"\e077"}.fa-delicious:before{content:"\f1a5"}.fa-democrat:before{content:"\f747"}.fa-deploydog:before{content:"\f38e"}.fa-deskpro:before{content:"\f38f"}.fa-desktop:before{content:"\f108"}.fa-dev:before{content:"\f6cc"}.fa-deviantart:before{content:"\f1bd"}.fa-dharmachakra:before{content:"\f655"}.fa-dhl:before{content:"\f790"}.fa-diagnoses:before{content:"\f470"}.fa-diaspora:before{content:"\f791"}.fa-dice:before{content:"\f522"}.fa-dice-d20:before{content:"\f6cf"}.fa-dice-d6:before{content:"\f6d1"}.fa-dice-five:before{content:"\f523"}.fa-dice-four:before{content:"\f524"}.fa-dice-one:before{content:"\f525"}.fa-dice-six:before{content:"\f526"}.fa-dice-three:before{content:"\f527"}.fa-dice-two:before{content:"\f528"}.fa-digg:before{content:"\f1a6"}.fa-digital-ocean:before{content:"\f391"}.fa-digital-tachograph:before{content:"\f566"}.fa-directions:before{content:"\f5eb"}.fa-discord:before{content:"\f392"}.fa-discourse:before{content:"\f393"}.fa-disease:before{content:"\f7fa"}.fa-divide:before{content:"\f529"}.fa-dizzy:before{content:"\f567"}.fa-dna:before{content:"\f471"}.fa-dochub:before{content:"\f394"}.fa-docker:before{content:"\f395"}.fa-dog:before{content:"\f6d3"}.fa-dollar-sign:before{content:"\f155"}.fa-dolly:before{content:"\f472"}.fa-dolly-flatbed:before{content:"\f474"}.fa-donate:before{content:"\f4b9"}.fa-door-closed:before{content:"\f52a"}.fa-door-open:before{content:"\f52b"}.fa-dot-circle:before{content:"\f192"}.fa-dove:before{content:"\f4ba"}.fa-download:before{content:"\f019"}.fa-draft2digital:before{content:"\f396"}.fa-drafting-compass:before{content:"\f568"}.fa-dragon:before{content:"\f6d5"}.fa-draw-polygon:before{content:"\f5ee"}.fa-dribbble:before{content:"\f17d"}.fa-dribbble-square:before{content:"\f397"}.fa-dropbox:before{content:"\f16b"}.fa-drum:before{content:"\f569"}.fa-drum-steelpan:before{content:"\f56a"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-drupal:before{content:"\f1a9"}.fa-dumbbell:before{content:"\f44b"}.fa-dumpster:before{content:"\f793"}.fa-dumpster-fire:before{content:"\f794"}.fa-dungeon:before{content:"\f6d9"}.fa-dyalog:before{content:"\f399"}.fa-earlybirds:before{content:"\f39a"}.fa-ebay:before{content:"\f4f4"}.fa-edge:before{content:"\f282"}.fa-edge-legacy:before{content:"\e078"}.fa-edit:before{content:"\f044"}.fa-egg:before{content:"\f7fb"}.fa-eject:before{content:"\f052"}.fa-elementor:before{content:"\f430"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-ello:before{content:"\f5f1"}.fa-ember:before{content:"\f423"}.fa-empire:before{content:"\f1d1"}.fa-envelope:before{content:"\f0e0"}.fa-envelope-open:before{content:"\f2b6"}.fa-envelope-open-text:before{content:"\f658"}.fa-envelope-square:before{content:"\f199"}.fa-envira:before{content:"\f299"}.fa-equals:before{content:"\f52c"}.fa-eraser:before{content:"\f12d"}.fa-erlang:before{content:"\f39d"}.fa-ethereum:before{content:"\f42e"}.fa-ethernet:before{content:"\f796"}.fa-etsy:before{content:"\f2d7"}.fa-euro-sign:before{content:"\f153"}.fa-evernote:before{content:"\f839"}.fa-exchange-alt:before{content:"\f362"}.fa-exclamation:before{content:"\f12a"}.fa-exclamation-circle:before{content:"\f06a"}.fa-exclamation-triangle:before{content:"\f071"}.fa-expand:before{content:"\f065"}.fa-expand-alt:before{content:"\f424"}.fa-expand-arrows-alt:before{content:"\f31e"}.fa-expeditedssl:before{content:"\f23e"}.fa-external-link-alt:before{content:"\f35d"}.fa-external-link-square-alt:before{content:"\f360"}.fa-eye:before{content:"\f06e"}.fa-eye-dropper:before{content:"\f1fb"}.fa-eye-slash:before{content:"\f070"}.fa-facebook:before{content:"\f09a"}.fa-facebook-f:before{content:"\f39e"}.fa-facebook-messenger:before{content:"\f39f"}.fa-facebook-square:before{content:"\f082"}.fa-fan:before{content:"\f863"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-fast-backward:before{content:"\f049"}.fa-fast-forward:before{content:"\f050"}.fa-faucet:before{content:"\e005"}.fa-fax:before{content:"\f1ac"}.fa-feather:before{content:"\f52d"}.fa-feather-alt:before{content:"\f56b"}.fa-fedex:before{content:"\f797"}.fa-fedora:before{content:"\f798"}.fa-female:before{content:"\f182"}.fa-fighter-jet:before{content:"\f0fb"}.fa-figma:before{content:"\f799"}.fa-file:before{content:"\f15b"}.fa-file-alt:before{content:"\f15c"}.fa-file-archive:before{content:"\f1c6"}.fa-file-audio:before{content:"\f1c7"}.fa-file-code:before{content:"\f1c9"}.fa-file-contract:before{content:"\f56c"}.fa-file-csv:before{content:"\f6dd"}.fa-file-download:before{content:"\f56d"}.fa-file-excel:before{content:"\f1c3"}.fa-file-export:before{content:"\f56e"}.fa-file-image:before{content:"\f1c5"}.fa-file-import:before{content:"\f56f"}.fa-file-invoice:before{content:"\f570"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-file-medical:before{content:"\f477"}.fa-file-medical-alt:before{content:"\f478"}.fa-file-pdf:before{content:"\f1c1"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-file-prescription:before{content:"\f572"}.fa-file-signature:before{content:"\f573"}.fa-file-upload:before{content:"\f574"}.fa-file-video:before{content:"\f1c8"}.fa-file-word:before{content:"\f1c2"}.fa-fill:before{content:"\f575"}.fa-fill-drip:before{content:"\f576"}.fa-film:before{content:"\f008"}.fa-filter:before{content:"\f0b0"}.fa-fingerprint:before{content:"\f577"}.fa-fire:before{content:"\f06d"}.fa-fire-alt:before{content:"\f7e4"}.fa-fire-extinguisher:before{content:"\f134"}.fa-firefox:before{content:"\f269"}.fa-firefox-browser:before{content:"\e007"}.fa-first-aid:before{content:"\f479"}.fa-first-order:before{content:"\f2b0"}.fa-first-order-alt:before{content:"\f50a"}.fa-firstdraft:before{content:"\f3a1"}.fa-fish:before{content:"\f578"}.fa-fist-raised:before{content:"\f6de"}.fa-flag:before{content:"\f024"}.fa-flag-checkered:before{content:"\f11e"}.fa-flag-usa:before{content:"\f74d"}.fa-flask:before{content:"\f0c3"}.fa-flickr:before{content:"\f16e"}.fa-flipboard:before{content:"\f44d"}.fa-flushed:before{content:"\f579"}.fa-fly:before{content:"\f417"}.fa-folder:before{content:"\f07b"}.fa-folder-minus:before{content:"\f65d"}.fa-folder-open:before{content:"\f07c"}.fa-folder-plus:before{content:"\f65e"}.fa-font:before{content:"\f031"}.fa-font-awesome:before{content:"\f2b4"}.fa-font-awesome-alt:before{content:"\f35c"}.fa-font-awesome-flag:before{content:"\f425"}.fa-font-awesome-logo-full:before{content:"\f4e6"}.fa-fonticons:before{content:"\f280"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-football-ball:before{content:"\f44e"}.fa-fort-awesome:before{content:"\f286"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-forumbee:before{content:"\f211"}.fa-forward:before{content:"\f04e"}.fa-foursquare:before{content:"\f180"}.fa-free-code-camp:before{content:"\f2c5"}.fa-freebsd:before{content:"\f3a4"}.fa-frog:before{content:"\f52e"}.fa-frown:before{content:"\f119"}.fa-frown-open:before{content:"\f57a"}.fa-fulcrum:before{content:"\f50b"}.fa-funnel-dollar:before{content:"\f662"}.fa-futbol:before{content:"\f1e3"}.fa-galactic-republic:before{content:"\f50c"}.fa-galactic-senate:before{content:"\f50d"}.fa-gamepad:before{content:"\f11b"}.fa-gas-pump:before{content:"\f52f"}.fa-gavel:before{content:"\f0e3"}.fa-gem:before{content:"\f3a5"}.fa-genderless:before{content:"\f22d"}.fa-get-pocket:before{content:"\f265"}.fa-gg:before{content:"\f260"}.fa-gg-circle:before{content:"\f261"}.fa-ghost:before{content:"\f6e2"}.fa-gift:before{content:"\f06b"}.fa-gifts:before{content:"\f79c"}.fa-git:before{content:"\f1d3"}.fa-git-alt:before{content:"\f841"}.fa-git-square:before{content:"\f1d2"}.fa-github:before{content:"\f09b"}.fa-github-alt:before{content:"\f113"}.fa-github-square:before{content:"\f092"}.fa-gitkraken:before{content:"\f3a6"}.fa-gitlab:before{content:"\f296"}.fa-gitter:before{content:"\f426"}.fa-glass-cheers:before{content:"\f79f"}.fa-glass-martini:before{content:"\f000"}.fa-glass-martini-alt:before{content:"\f57b"}.fa-glass-whiskey:before{content:"\f7a0"}.fa-glasses:before{content:"\f530"}.fa-glide:before{content:"\f2a5"}.fa-glide-g:before{content:"\f2a6"}.fa-globe:before{content:"\f0ac"}.fa-globe-africa:before{content:"\f57c"}.fa-globe-americas:before{content:"\f57d"}.fa-globe-asia:before{content:"\f57e"}.fa-globe-europe:before{content:"\f7a2"}.fa-gofore:before{content:"\f3a7"}.fa-golf-ball:before{content:"\f450"}.fa-goodreads:before{content:"\f3a8"}.fa-goodreads-g:before{content:"\f3a9"}.fa-google:before{content:"\f1a0"}.fa-google-drive:before{content:"\f3aa"}.fa-google-pay:before{content:"\e079"}.fa-google-play:before{content:"\f3ab"}.fa-google-plus:before{content:"\f2b3"}.fa-google-plus-g:before{content:"\f0d5"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-wallet:before{content:"\f1ee"}.fa-gopuram:before{content:"\f664"}.fa-graduation-cap:before{content:"\f19d"}.fa-gratipay:before{content:"\f184"}.fa-grav:before{content:"\f2d6"}.fa-greater-than:before{content:"\f531"}.fa-greater-than-equal:before{content:"\f532"}.fa-grimace:before{content:"\f57f"}.fa-grin:before{content:"\f580"}.fa-grin-alt:before{content:"\f581"}.fa-grin-beam:before{content:"\f582"}.fa-grin-beam-sweat:before{content:"\f583"}.fa-grin-hearts:before{content:"\f584"}.fa-grin-squint:before{content:"\f585"}.fa-grin-squint-tears:before{content:"\f586"}.fa-grin-stars:before{content:"\f587"}.fa-grin-tears:before{content:"\f588"}.fa-grin-tongue:before{content:"\f589"}.fa-grin-tongue-squint:before{content:"\f58a"}.fa-grin-tongue-wink:before{content:"\f58b"}.fa-grin-wink:before{content:"\f58c"}.fa-grip-horizontal:before{content:"\f58d"}.fa-grip-lines:before{content:"\f7a4"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-grip-vertical:before{content:"\f58e"}.fa-gripfire:before{content:"\f3ac"}.fa-grunt:before{content:"\f3ad"}.fa-guitar:before{content:"\f7a6"}.fa-gulp:before{content:"\f3ae"}.fa-h-square:before{content:"\f0fd"}.fa-hacker-news:before{content:"\f1d4"}.fa-hacker-news-square:before{content:"\f3af"}.fa-hackerrank:before{content:"\f5f7"}.fa-hamburger:before{content:"\f805"}.fa-hammer:before{content:"\f6e3"}.fa-hamsa:before{content:"\f665"}.fa-hand-holding:before{content:"\f4bd"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-hand-holding-usd:before{content:"\f4c0"}.fa-hand-holding-water:before{content:"\f4c1"}.fa-hand-lizard:before{content:"\f258"}.fa-hand-middle-finger:before{content:"\f806"}.fa-hand-paper:before{content:"\f256"}.fa-hand-peace:before{content:"\f25b"}.fa-hand-point-down:before{content:"\f0a7"}.fa-hand-point-left:before{content:"\f0a5"}.fa-hand-point-right:before{content:"\f0a4"}.fa-hand-point-up:before{content:"\f0a6"}.fa-hand-pointer:before{content:"\f25a"}.fa-hand-rock:before{content:"\f255"}.fa-hand-scissors:before{content:"\f257"}.fa-hand-sparkles:before{content:"\e05d"}.fa-hand-spock:before{content:"\f259"}.fa-hands:before{content:"\f4c2"}.fa-hands-helping:before{content:"\f4c4"}.fa-hands-wash:before{content:"\e05e"}.fa-handshake:before{content:"\f2b5"}.fa-handshake-alt-slash:before{content:"\e05f"}.fa-handshake-slash:before{content:"\e060"}.fa-hanukiah:before{content:"\f6e6"}.fa-hard-hat:before{content:"\f807"}.fa-hashtag:before{content:"\f292"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-hat-wizard:before{content:"\f6e8"}.fa-hdd:before{content:"\f0a0"}.fa-head-side-cough:before{content:"\e061"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-head-side-mask:before{content:"\e063"}.fa-head-side-virus:before{content:"\e064"}.fa-heading:before{content:"\f1dc"}.fa-headphones:before{content:"\f025"}.fa-headphones-alt:before{content:"\f58f"}.fa-headset:before{content:"\f590"}.fa-heart:before{content:"\f004"}.fa-heart-broken:before{content:"\f7a9"}.fa-heartbeat:before{content:"\f21e"}.fa-helicopter:before{content:"\f533"}.fa-highlighter:before{content:"\f591"}.fa-hiking:before{content:"\f6ec"}.fa-hippo:before{content:"\f6ed"}.fa-hips:before{content:"\f452"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-history:before{content:"\f1da"}.fa-hockey-puck:before{content:"\f453"}.fa-holly-berry:before{content:"\f7aa"}.fa-home:before{content:"\f015"}.fa-hooli:before{content:"\f427"}.fa-hornbill:before{content:"\f592"}.fa-horse:before{content:"\f6f0"}.fa-horse-head:before{content:"\f7ab"}.fa-hospital:before{content:"\f0f8"}.fa-hospital-alt:before{content:"\f47d"}.fa-hospital-symbol:before{content:"\f47e"}.fa-hospital-user:before{content:"\f80d"}.fa-hot-tub:before{content:"\f593"}.fa-hotdog:before{content:"\f80f"}.fa-hotel:before{content:"\f594"}.fa-hotjar:before{content:"\f3b1"}.fa-hourglass:before{content:"\f254"}.fa-hourglass-end:before{content:"\f253"}.fa-hourglass-half:before{content:"\f252"}.fa-hourglass-start:before{content:"\f251"}.fa-house-damage:before{content:"\f6f1"}.fa-house-user:before{content:"\e065"}.fa-houzz:before{content:"\f27c"}.fa-hryvnia:before{content:"\f6f2"}.fa-html5:before{content:"\f13b"}.fa-hubspot:before{content:"\f3b2"}.fa-i-cursor:before{content:"\f246"}.fa-ice-cream:before{content:"\f810"}.fa-icicles:before{content:"\f7ad"}.fa-icons:before{content:"\f86d"}.fa-id-badge:before{content:"\f2c1"}.fa-id-card:before{content:"\f2c2"}.fa-id-card-alt:before{content:"\f47f"}.fa-ideal:before{content:"\e013"}.fa-igloo:before{content:"\f7ae"}.fa-image:before{content:"\f03e"}.fa-images:before{content:"\f302"}.fa-imdb:before{content:"\f2d8"}.fa-inbox:before{content:"\f01c"}.fa-indent:before{content:"\f03c"}.fa-industry:before{content:"\f275"}.fa-infinity:before{content:"\f534"}.fa-info:before{content:"\f129"}.fa-info-circle:before{content:"\f05a"}.fa-instagram:before{content:"\f16d"}.fa-instagram-square:before{content:"\e055"}.fa-intercom:before{content:"\f7af"}.fa-internet-explorer:before{content:"\f26b"}.fa-invision:before{content:"\f7b0"}.fa-ioxhost:before{content:"\f208"}.fa-italic:before{content:"\f033"}.fa-itch-io:before{content:"\f83a"}.fa-itunes:before{content:"\f3b4"}.fa-itunes-note:before{content:"\f3b5"}.fa-java:before{content:"\f4e4"}.fa-jedi:before{content:"\f669"}.fa-jedi-order:before{content:"\f50e"}.fa-jenkins:before{content:"\f3b6"}.fa-jira:before{content:"\f7b1"}.fa-joget:before{content:"\f3b7"}.fa-joint:before{content:"\f595"}.fa-joomla:before{content:"\f1aa"}.fa-journal-whills:before{content:"\f66a"}.fa-js:before{content:"\f3b8"}.fa-js-square:before{content:"\f3b9"}.fa-jsfiddle:before{content:"\f1cc"}.fa-kaaba:before{content:"\f66b"}.fa-kaggle:before{content:"\f5fa"}.fa-key:before{content:"\f084"}.fa-keybase:before{content:"\f4f5"}.fa-keyboard:before{content:"\f11c"}.fa-keycdn:before{content:"\f3ba"}.fa-khanda:before{content:"\f66d"}.fa-kickstarter:before{content:"\f3bb"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-kiss:before{content:"\f596"}.fa-kiss-beam:before{content:"\f597"}.fa-kiss-wink-heart:before{content:"\f598"}.fa-kiwi-bird:before{content:"\f535"}.fa-korvue:before{content:"\f42f"}.fa-landmark:before{content:"\f66f"}.fa-language:before{content:"\f1ab"}.fa-laptop:before{content:"\f109"}.fa-laptop-code:before{content:"\f5fc"}.fa-laptop-house:before{content:"\e066"}.fa-laptop-medical:before{content:"\f812"}.fa-laravel:before{content:"\f3bd"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-laugh:before{content:"\f599"}.fa-laugh-beam:before{content:"\f59a"}.fa-laugh-squint:before{content:"\f59b"}.fa-laugh-wink:before{content:"\f59c"}.fa-layer-group:before{content:"\f5fd"}.fa-leaf:before{content:"\f06c"}.fa-leanpub:before{content:"\f212"}.fa-lemon:before{content:"\f094"}.fa-less:before{content:"\f41d"}.fa-less-than:before{content:"\f536"}.fa-less-than-equal:before{content:"\f537"}.fa-level-down-alt:before{content:"\f3be"}.fa-level-up-alt:before{content:"\f3bf"}.fa-life-ring:before{content:"\f1cd"}.fa-lightbulb:before{content:"\f0eb"}.fa-line:before{content:"\f3c0"}.fa-link:before{content:"\f0c1"}.fa-linkedin:before{content:"\f08c"}.fa-linkedin-in:before{content:"\f0e1"}.fa-linode:before{content:"\f2b8"}.fa-linux:before{content:"\f17c"}.fa-lira-sign:before{content:"\f195"}.fa-list:before{content:"\f03a"}.fa-list-alt:before{content:"\f022"}.fa-list-ol:before{content:"\f0cb"}.fa-list-ul:before{content:"\f0ca"}.fa-location-arrow:before{content:"\f124"}.fa-lock:before{content:"\f023"}.fa-lock-open:before{content:"\f3c1"}.fa-long-arrow-alt-down:before{content:"\f309"}.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-long-arrow-alt-right:before{content:"\f30b"}.fa-long-arrow-alt-up:before{content:"\f30c"}.fa-low-vision:before{content:"\f2a8"}.fa-luggage-cart:before{content:"\f59d"}.fa-lungs:before{content:"\f604"}.fa-lungs-virus:before{content:"\e067"}.fa-lyft:before{content:"\f3c3"}.fa-magento:before{content:"\f3c4"}.fa-magic:before{content:"\f0d0"}.fa-magnet:before{content:"\f076"}.fa-mail-bulk:before{content:"\f674"}.fa-mailchimp:before{content:"\f59e"}.fa-male:before{content:"\f183"}.fa-mandalorian:before{content:"\f50f"}.fa-map:before{content:"\f279"}.fa-map-marked:before{content:"\f59f"}.fa-map-marked-alt:before{content:"\f5a0"}.fa-map-marker:before{content:"\f041"}.fa-map-marker-alt:before{content:"\f3c5"}.fa-map-pin:before{content:"\f276"}.fa-map-signs:before{content:"\f277"}.fa-markdown:before{content:"\f60f"}.fa-marker:before{content:"\f5a1"}.fa-mars:before{content:"\f222"}.fa-mars-double:before{content:"\f227"}.fa-mars-stroke:before{content:"\f229"}.fa-mars-stroke-h:before{content:"\f22b"}.fa-mars-stroke-v:before{content:"\f22a"}.fa-mask:before{content:"\f6fa"}.fa-mastodon:before{content:"\f4f6"}.fa-maxcdn:before{content:"\f136"}.fa-mdb:before{content:"\f8ca"}.fa-medal:before{content:"\f5a2"}.fa-medapps:before{content:"\f3c6"}.fa-medium:before{content:"\f23a"}.fa-medium-m:before{content:"\f3c7"}.fa-medkit:before{content:"\f0fa"}.fa-medrt:before{content:"\f3c8"}.fa-meetup:before{content:"\f2e0"}.fa-megaport:before{content:"\f5a3"}.fa-meh:before{content:"\f11a"}.fa-meh-blank:before{content:"\f5a4"}.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-memory:before{content:"\f538"}.fa-mendeley:before{content:"\f7b3"}.fa-menorah:before{content:"\f676"}.fa-mercury:before{content:"\f223"}.fa-meteor:before{content:"\f753"}.fa-microblog:before{content:"\e01a"}.fa-microchip:before{content:"\f2db"}.fa-microphone:before{content:"\f130"}.fa-microphone-alt:before{content:"\f3c9"}.fa-microphone-alt-slash:before{content:"\f539"}.fa-microphone-slash:before{content:"\f131"}.fa-microscope:before{content:"\f610"}.fa-microsoft:before{content:"\f3ca"}.fa-minus:before{content:"\f068"}.fa-minus-circle:before{content:"\f056"}.fa-minus-square:before{content:"\f146"}.fa-mitten:before{content:"\f7b5"}.fa-mix:before{content:"\f3cb"}.fa-mixcloud:before{content:"\f289"}.fa-mixer:before{content:"\e056"}.fa-mizuni:before{content:"\f3cc"}.fa-mobile:before{content:"\f10b"}.fa-mobile-alt:before{content:"\f3cd"}.fa-modx:before{content:"\f285"}.fa-monero:before{content:"\f3d0"}.fa-money-bill:before{content:"\f0d6"}.fa-money-bill-alt:before{content:"\f3d1"}.fa-money-bill-wave:before{content:"\f53a"}.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-money-check:before{content:"\f53c"}.fa-money-check-alt:before{content:"\f53d"}.fa-monument:before{content:"\f5a6"}.fa-moon:before{content:"\f186"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-mosque:before{content:"\f678"}.fa-motorcycle:before{content:"\f21c"}.fa-mountain:before{content:"\f6fc"}.fa-mouse:before{content:"\f8cc"}.fa-mouse-pointer:before{content:"\f245"}.fa-mug-hot:before{content:"\f7b6"}.fa-music:before{content:"\f001"}.fa-napster:before{content:"\f3d2"}.fa-neos:before{content:"\f612"}.fa-network-wired:before{content:"\f6ff"}.fa-neuter:before{content:"\f22c"}.fa-newspaper:before{content:"\f1ea"}.fa-nimblr:before{content:"\f5a8"}.fa-node:before{content:"\f419"}.fa-node-js:before{content:"\f3d3"}.fa-not-equal:before{content:"\f53e"}.fa-notes-medical:before{content:"\f481"}.fa-npm:before{content:"\f3d4"}.fa-ns8:before{content:"\f3d5"}.fa-nutritionix:before{content:"\f3d6"}.fa-object-group:before{content:"\f247"}.fa-object-ungroup:before{content:"\f248"}.fa-odnoklassniki:before{content:"\f263"}.fa-odnoklassniki-square:before{content:"\f264"}.fa-oil-can:before{content:"\f613"}.fa-old-republic:before{content:"\f510"}.fa-om:before{content:"\f679"}.fa-opencart:before{content:"\f23d"}.fa-openid:before{content:"\f19b"}.fa-opera:before{content:"\f26a"}.fa-optin-monster:before{content:"\f23c"}.fa-orcid:before{content:"\f8d2"}.fa-osi:before{content:"\f41a"}.fa-otter:before{content:"\f700"}.fa-outdent:before{content:"\f03b"}.fa-page4:before{content:"\f3d7"}.fa-pagelines:before{content:"\f18c"}.fa-pager:before{content:"\f815"}.fa-paint-brush:before{content:"\f1fc"}.fa-paint-roller:before{content:"\f5aa"}.fa-palette:before{content:"\f53f"}.fa-palfed:before{content:"\f3d8"}.fa-pallet:before{content:"\f482"}.fa-paper-plane:before{content:"\f1d8"}.fa-paperclip:before{content:"\f0c6"}.fa-parachute-box:before{content:"\f4cd"}.fa-paragraph:before{content:"\f1dd"}.fa-parking:before{content:"\f540"}.fa-passport:before{content:"\f5ab"}.fa-pastafarianism:before{content:"\f67b"}.fa-paste:before{content:"\f0ea"}.fa-patreon:before{content:"\f3d9"}.fa-pause:before{content:"\f04c"}.fa-pause-circle:before{content:"\f28b"}.fa-paw:before{content:"\f1b0"}.fa-paypal:before{content:"\f1ed"}.fa-peace:before{content:"\f67c"}.fa-pen:before{content:"\f304"}.fa-pen-alt:before{content:"\f305"}.fa-pen-fancy:before{content:"\f5ac"}.fa-pen-nib:before{content:"\f5ad"}.fa-pen-square:before{content:"\f14b"}.fa-pencil-alt:before{content:"\f303"}.fa-pencil-ruler:before{content:"\f5ae"}.fa-penny-arcade:before{content:"\f704"}.fa-people-arrows:before{content:"\e068"}.fa-people-carry:before{content:"\f4ce"}.fa-pepper-hot:before{content:"\f816"}.fa-percent:before{content:"\f295"}.fa-percentage:before{content:"\f541"}.fa-periscope:before{content:"\f3da"}.fa-person-booth:before{content:"\f756"}.fa-phabricator:before{content:"\f3db"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-phoenix-squadron:before{content:"\f511"}.fa-phone:before{content:"\f095"}.fa-phone-alt:before{content:"\f879"}.fa-phone-slash:before{content:"\f3dd"}.fa-phone-square:before{content:"\f098"}.fa-phone-square-alt:before{content:"\f87b"}.fa-phone-volume:before{content:"\f2a0"}.fa-photo-video:before{content:"\f87c"}.fa-php:before{content:"\f457"}.fa-pied-piper:before{content:"\f2ae"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-pied-piper-square:before{content:"\e01e"}.fa-piggy-bank:before{content:"\f4d3"}.fa-pills:before{content:"\f484"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-p:before{content:"\f231"}.fa-pinterest-square:before{content:"\f0d3"}.fa-pizza-slice:before{content:"\f818"}.fa-place-of-worship:before{content:"\f67f"}.fa-plane:before{content:"\f072"}.fa-plane-arrival:before{content:"\f5af"}.fa-plane-departure:before{content:"\f5b0"}.fa-plane-slash:before{content:"\e069"}.fa-play:before{content:"\f04b"}.fa-play-circle:before{content:"\f144"}.fa-playstation:before{content:"\f3df"}.fa-plug:before{content:"\f1e6"}.fa-plus:before{content:"\f067"}.fa-plus-circle:before{content:"\f055"}.fa-plus-square:before{content:"\f0fe"}.fa-podcast:before{content:"\f2ce"}.fa-poll:before{content:"\f681"}.fa-poll-h:before{content:"\f682"}.fa-poo:before{content:"\f2fe"}.fa-poo-storm:before{content:"\f75a"}.fa-poop:before{content:"\f619"}.fa-portrait:before{content:"\f3e0"}.fa-pound-sign:before{content:"\f154"}.fa-power-off:before{content:"\f011"}.fa-pray:before{content:"\f683"}.fa-praying-hands:before{content:"\f684"}.fa-prescription:before{content:"\f5b1"}.fa-prescription-bottle:before{content:"\f485"}.fa-prescription-bottle-alt:before{content:"\f486"}.fa-print:before{content:"\f02f"}.fa-procedures:before{content:"\f487"}.fa-product-hunt:before{content:"\f288"}.fa-project-diagram:before{content:"\f542"}.fa-pump-medical:before{content:"\e06a"}.fa-pump-soap:before{content:"\e06b"}.fa-pushed:before{content:"\f3e1"}.fa-puzzle-piece:before{content:"\f12e"}.fa-python:before{content:"\f3e2"}.fa-qq:before{content:"\f1d6"}.fa-qrcode:before{content:"\f029"}.fa-question:before{content:"\f128"}.fa-question-circle:before{content:"\f059"}.fa-quidditch:before{content:"\f458"}.fa-quinscape:before{content:"\f459"}.fa-quora:before{content:"\f2c4"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-quran:before{content:"\f687"}.fa-r-project:before{content:"\f4f7"}.fa-radiation:before{content:"\f7b9"}.fa-radiation-alt:before{content:"\f7ba"}.fa-rainbow:before{content:"\f75b"}.fa-random:before{content:"\f074"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-ravelry:before{content:"\f2d9"}.fa-react:before{content:"\f41b"}.fa-reacteurope:before{content:"\f75d"}.fa-readme:before{content:"\f4d5"}.fa-rebel:before{content:"\f1d0"}.fa-receipt:before{content:"\f543"}.fa-record-vinyl:before{content:"\f8d9"}.fa-recycle:before{content:"\f1b8"}.fa-red-river:before{content:"\f3e3"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-alien:before{content:"\f281"}.fa-reddit-square:before{content:"\f1a2"}.fa-redhat:before{content:"\f7bc"}.fa-redo:before{content:"\f01e"}.fa-redo-alt:before{content:"\f2f9"}.fa-registered:before{content:"\f25d"}.fa-remove-format:before{content:"\f87d"}.fa-renren:before{content:"\f18b"}.fa-reply:before{content:"\f3e5"}.fa-reply-all:before{content:"\f122"}.fa-replyd:before{content:"\f3e6"}.fa-republican:before{content:"\f75e"}.fa-researchgate:before{content:"\f4f8"}.fa-resolving:before{content:"\f3e7"}.fa-restroom:before{content:"\f7bd"}.fa-retweet:before{content:"\f079"}.fa-rev:before{content:"\f5b2"}.fa-ribbon:before{content:"\f4d6"}.fa-ring:before{content:"\f70b"}.fa-road:before{content:"\f018"}.fa-robot:before{content:"\f544"}.fa-rocket:before{content:"\f135"}.fa-rocketchat:before{content:"\f3e8"}.fa-rockrms:before{content:"\f3e9"}.fa-route:before{content:"\f4d7"}.fa-rss:before{content:"\f09e"}.fa-rss-square:before{content:"\f143"}.fa-ruble-sign:before{content:"\f158"}.fa-ruler:before{content:"\f545"}.fa-ruler-combined:before{content:"\f546"}.fa-ruler-horizontal:before{content:"\f547"}.fa-ruler-vertical:before{content:"\f548"}.fa-running:before{content:"\f70c"}.fa-rupee-sign:before{content:"\f156"}.fa-rust:before{content:"\e07a"}.fa-sad-cry:before{content:"\f5b3"}.fa-sad-tear:before{content:"\f5b4"}.fa-safari:before{content:"\f267"}.fa-salesforce:before{content:"\f83b"}.fa-sass:before{content:"\f41e"}.fa-satellite:before{content:"\f7bf"}.fa-satellite-dish:before{content:"\f7c0"}.fa-save:before{content:"\f0c7"}.fa-schlix:before{content:"\f3ea"}.fa-school:before{content:"\f549"}.fa-screwdriver:before{content:"\f54a"}.fa-scribd:before{content:"\f28a"}.fa-scroll:before{content:"\f70e"}.fa-sd-card:before{content:"\f7c2"}.fa-search:before{content:"\f002"}.fa-search-dollar:before{content:"\f688"}.fa-search-location:before{content:"\f689"}.fa-search-minus:before{content:"\f010"}.fa-search-plus:before{content:"\f00e"}.fa-searchengin:before{content:"\f3eb"}.fa-seedling:before{content:"\f4d8"}.fa-sellcast:before{content:"\f2da"}.fa-sellsy:before{content:"\f213"}.fa-server:before{content:"\f233"}.fa-servicestack:before{content:"\f3ec"}.fa-shapes:before{content:"\f61f"}.fa-share:before{content:"\f064"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-share-square:before{content:"\f14d"}.fa-shekel-sign:before{content:"\f20b"}.fa-shield-alt:before{content:"\f3ed"}.fa-shield-virus:before{content:"\e06c"}.fa-ship:before{content:"\f21a"}.fa-shipping-fast:before{content:"\f48b"}.fa-shirtsinbulk:before{content:"\f214"}.fa-shoe-prints:before{content:"\f54b"}.fa-shopify:before{content:"\e057"}.fa-shopping-bag:before{content:"\f290"}.fa-shopping-basket:before{content:"\f291"}.fa-shopping-cart:before{content:"\f07a"}.fa-shopware:before{content:"\f5b5"}.fa-shower:before{content:"\f2cc"}.fa-shuttle-van:before{content:"\f5b6"}.fa-sign:before{content:"\f4d9"}.fa-sign-in-alt:before{content:"\f2f6"}.fa-sign-language:before{content:"\f2a7"}.fa-sign-out-alt:before{content:"\f2f5"}.fa-signal:before{content:"\f012"}.fa-signature:before{content:"\f5b7"}.fa-sim-card:before{content:"\f7c4"}.fa-simplybuilt:before{content:"\f215"}.fa-sink:before{content:"\e06d"}.fa-sistrix:before{content:"\f3ee"}.fa-sitemap:before{content:"\f0e8"}.fa-sith:before{content:"\f512"}.fa-skating:before{content:"\f7c5"}.fa-sketch:before{content:"\f7c6"}.fa-skiing:before{content:"\f7c9"}.fa-skiing-nordic:before{content:"\f7ca"}.fa-skull:before{content:"\f54c"}.fa-skull-crossbones:before{content:"\f714"}.fa-skyatlas:before{content:"\f216"}.fa-skype:before{content:"\f17e"}.fa-slack:before{content:"\f198"}.fa-slack-hash:before{content:"\f3ef"}.fa-slash:before{content:"\f715"}.fa-sleigh:before{content:"\f7cc"}.fa-sliders-h:before{content:"\f1de"}.fa-slideshare:before{content:"\f1e7"}.fa-smile:before{content:"\f118"}.fa-smile-beam:before{content:"\f5b8"}.fa-smile-wink:before{content:"\f4da"}.fa-smog:before{content:"\f75f"}.fa-smoking:before{content:"\f48d"}.fa-smoking-ban:before{content:"\f54d"}.fa-sms:before{content:"\f7cd"}.fa-snapchat:before{content:"\f2ab"}.fa-snapchat-ghost:before{content:"\f2ac"}.fa-snapchat-square:before{content:"\f2ad"}.fa-snowboarding:before{content:"\f7ce"}.fa-snowflake:before{content:"\f2dc"}.fa-snowman:before{content:"\f7d0"}.fa-snowplow:before{content:"\f7d2"}.fa-soap:before{content:"\e06e"}.fa-socks:before{content:"\f696"}.fa-solar-panel:before{content:"\f5ba"}.fa-sort:before{content:"\f0dc"}.fa-sort-alpha-down:before{content:"\f15d"}.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-sort-alpha-up:before{content:"\f15e"}.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-sort-amount-down:before{content:"\f160"}.fa-sort-amount-down-alt:before{content:"\f884"}.fa-sort-amount-up:before{content:"\f161"}.fa-sort-amount-up-alt:before{content:"\f885"}.fa-sort-down:before{content:"\f0dd"}.fa-sort-numeric-down:before{content:"\f162"}.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-sort-numeric-up:before{content:"\f163"}.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-sort-up:before{content:"\f0de"}.fa-soundcloud:before{content:"\f1be"}.fa-sourcetree:before{content:"\f7d3"}.fa-spa:before{content:"\f5bb"}.fa-space-shuttle:before{content:"\f197"}.fa-speakap:before{content:"\f3f3"}.fa-speaker-deck:before{content:"\f83c"}.fa-spell-check:before{content:"\f891"}.fa-spider:before{content:"\f717"}.fa-spinner:before{content:"\f110"}.fa-splotch:before{content:"\f5bc"}.fa-spotify:before{content:"\f1bc"}.fa-spray-can:before{content:"\f5bd"}.fa-square:before{content:"\f0c8"}.fa-square-full:before{content:"\f45c"}.fa-square-root-alt:before{content:"\f698"}.fa-squarespace:before{content:"\f5be"}.fa-stack-exchange:before{content:"\f18d"}.fa-stack-overflow:before{content:"\f16c"}.fa-stackpath:before{content:"\f842"}.fa-stamp:before{content:"\f5bf"}.fa-star:before{content:"\f005"}.fa-star-and-crescent:before{content:"\f699"}.fa-star-half:before{content:"\f089"}.fa-star-half-alt:before{content:"\f5c0"}.fa-star-of-david:before{content:"\f69a"}.fa-star-of-life:before{content:"\f621"}.fa-staylinked:before{content:"\f3f5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-steam-symbol:before{content:"\f3f6"}.fa-step-backward:before{content:"\f048"}.fa-step-forward:before{content:"\f051"}.fa-stethoscope:before{content:"\f0f1"}.fa-sticker-mule:before{content:"\f3f7"}.fa-sticky-note:before{content:"\f249"}.fa-stop:before{content:"\f04d"}.fa-stop-circle:before{content:"\f28d"}.fa-stopwatch:before{content:"\f2f2"}.fa-stopwatch-20:before{content:"\e06f"}.fa-store:before{content:"\f54e"}.fa-store-alt:before{content:"\f54f"}.fa-store-alt-slash:before{content:"\e070"}.fa-store-slash:before{content:"\e071"}.fa-strava:before{content:"\f428"}.fa-stream:before{content:"\f550"}.fa-street-view:before{content:"\f21d"}.fa-strikethrough:before{content:"\f0cc"}.fa-stripe:before{content:"\f429"}.fa-stripe-s:before{content:"\f42a"}.fa-stroopwafel:before{content:"\f551"}.fa-studiovinari:before{content:"\f3f8"}.fa-stumbleupon:before{content:"\f1a4"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-subscript:before{content:"\f12c"}.fa-subway:before{content:"\f239"}.fa-suitcase:before{content:"\f0f2"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-sun:before{content:"\f185"}.fa-superpowers:before{content:"\f2dd"}.fa-superscript:before{content:"\f12b"}.fa-supple:before{content:"\f3f9"}.fa-surprise:before{content:"\f5c2"}.fa-suse:before{content:"\f7d6"}.fa-swatchbook:before{content:"\f5c3"}.fa-swift:before{content:"\f8e1"}.fa-swimmer:before{content:"\f5c4"}.fa-swimming-pool:before{content:"\f5c5"}.fa-symfony:before{content:"\f83d"}.fa-synagogue:before{content:"\f69b"}.fa-sync:before{content:"\f021"}.fa-sync-alt:before{content:"\f2f1"}.fa-syringe:before{content:"\f48e"}.fa-table:before{content:"\f0ce"}.fa-table-tennis:before{content:"\f45d"}.fa-tablet:before{content:"\f10a"}.fa-tablet-alt:before{content:"\f3fa"}.fa-tablets:before{content:"\f490"}.fa-tachometer-alt:before{content:"\f3fd"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-tape:before{content:"\f4db"}.fa-tasks:before{content:"\f0ae"}.fa-taxi:before{content:"\f1ba"}.fa-teamspeak:before{content:"\f4f9"}.fa-teeth:before{content:"\f62e"}.fa-teeth-open:before{content:"\f62f"}.fa-telegram:before{content:"\f2c6"}.fa-telegram-plane:before{content:"\f3fe"}.fa-temperature-high:before{content:"\f769"}.fa-temperature-low:before{content:"\f76b"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-tenge:before{content:"\f7d7"}.fa-terminal:before{content:"\f120"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-th:before{content:"\f00a"}.fa-th-large:before{content:"\f009"}.fa-th-list:before{content:"\f00b"}.fa-the-red-yeti:before{content:"\f69d"}.fa-theater-masks:before{content:"\f630"}.fa-themeco:before{content:"\f5c6"}.fa-themeisle:before{content:"\f2b2"}.fa-thermometer:before{content:"\f491"}.fa-thermometer-empty:before{content:"\f2cb"}.fa-thermometer-full:before{content:"\f2c7"}.fa-thermometer-half:before{content:"\f2c9"}.fa-thermometer-quarter:before{content:"\f2ca"}.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-think-peaks:before{content:"\f731"}.fa-thumbs-down:before{content:"\f165"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbtack:before{content:"\f08d"}.fa-ticket-alt:before{content:"\f3ff"}.fa-tiktok:before{content:"\e07b"}.fa-times:before{content:"\f00d"}.fa-times-circle:before{content:"\f057"}.fa-tint:before{content:"\f043"}.fa-tint-slash:before{content:"\f5c7"}.fa-tired:before{content:"\f5c8"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-toilet:before{content:"\f7d8"}.fa-toilet-paper:before{content:"\f71e"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-toolbox:before{content:"\f552"}.fa-tools:before{content:"\f7d9"}.fa-tooth:before{content:"\f5c9"}.fa-torah:before{content:"\f6a0"}.fa-torii-gate:before{content:"\f6a1"}.fa-tractor:before{content:"\f722"}.fa-trade-federation:before{content:"\f513"}.fa-trademark:before{content:"\f25c"}.fa-traffic-light:before{content:"\f637"}.fa-trailer:before{content:"\e041"}.fa-train:before{content:"\f238"}.fa-tram:before{content:"\f7da"}.fa-transgender:before{content:"\f224"}.fa-transgender-alt:before{content:"\f225"}.fa-trash:before{content:"\f1f8"}.fa-trash-alt:before{content:"\f2ed"}.fa-trash-restore:before{content:"\f829"}.fa-trash-restore-alt:before{content:"\f82a"}.fa-tree:before{content:"\f1bb"}.fa-trello:before{content:"\f181"}.fa-tripadvisor:before{content:"\f262"}.fa-trophy:before{content:"\f091"}.fa-truck:before{content:"\f0d1"}.fa-truck-loading:before{content:"\f4de"}.fa-truck-monster:before{content:"\f63b"}.fa-truck-moving:before{content:"\f4df"}.fa-truck-pickup:before{content:"\f63c"}.fa-tshirt:before{content:"\f553"}.fa-tty:before{content:"\f1e4"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-tv:before{content:"\f26c"}.fa-twitch:before{content:"\f1e8"}.fa-twitter:before{content:"\f099"}.fa-twitter-square:before{content:"\f081"}.fa-typo3:before{content:"\f42b"}.fa-uber:before{content:"\f402"}.fa-ubuntu:before{content:"\f7df"}.fa-uikit:before{content:"\f403"}.fa-umbraco:before{content:"\f8e8"}.fa-umbrella:before{content:"\f0e9"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-underline:before{content:"\f0cd"}.fa-undo:before{content:"\f0e2"}.fa-undo-alt:before{content:"\f2ea"}.fa-uniregistry:before{content:"\f404"}.fa-unity:before{content:"\e049"}.fa-universal-access:before{content:"\f29a"}.fa-university:before{content:"\f19c"}.fa-unlink:before{content:"\f127"}.fa-unlock:before{content:"\f09c"}.fa-unlock-alt:before{content:"\f13e"}.fa-unsplash:before{content:"\e07c"}.fa-untappd:before{content:"\f405"}.fa-upload:before{content:"\f093"}.fa-ups:before{content:"\f7e0"}.fa-usb:before{content:"\f287"}.fa-user:before{content:"\f007"}.fa-user-alt:before{content:"\f406"}.fa-user-alt-slash:before{content:"\f4fa"}.fa-user-astronaut:before{content:"\f4fb"}.fa-user-check:before{content:"\f4fc"}.fa-user-circle:before{content:"\f2bd"}.fa-user-clock:before{content:"\f4fd"}.fa-user-cog:before{content:"\f4fe"}.fa-user-edit:before{content:"\f4ff"}.fa-user-friends:before{content:"\f500"}.fa-user-graduate:before{content:"\f501"}.fa-user-injured:before{content:"\f728"}.fa-user-lock:before{content:"\f502"}.fa-user-md:before{content:"\f0f0"}.fa-user-minus:before{content:"\f503"}.fa-user-ninja:before{content:"\f504"}.fa-user-nurse:before{content:"\f82f"}.fa-user-plus:before{content:"\f234"}.fa-user-secret:before{content:"\f21b"}.fa-user-shield:before{content:"\f505"}.fa-user-slash:before{content:"\f506"}.fa-user-tag:before{content:"\f507"}.fa-user-tie:before{content:"\f508"}.fa-user-times:before{content:"\f235"}.fa-users:before{content:"\f0c0"}.fa-users-cog:before{content:"\f509"}.fa-users-slash:before{content:"\e073"}.fa-usps:before{content:"\f7e1"}.fa-ussunnah:before{content:"\f407"}.fa-utensil-spoon:before{content:"\f2e5"}.fa-utensils:before{content:"\f2e7"}.fa-vaadin:before{content:"\f408"}.fa-vector-square:before{content:"\f5cb"}.fa-venus:before{content:"\f221"}.fa-venus-double:before{content:"\f226"}.fa-venus-mars:before{content:"\f228"}.fa-viacoin:before{content:"\f237"}.fa-viadeo:before{content:"\f2a9"}.fa-viadeo-square:before{content:"\f2aa"}.fa-vial:before{content:"\f492"}.fa-vials:before{content:"\f493"}.fa-viber:before{content:"\f409"}.fa-video:before{content:"\f03d"}.fa-video-slash:before{content:"\f4e2"}.fa-vihara:before{content:"\f6a7"}.fa-vimeo:before{content:"\f40a"}.fa-vimeo-square:before{content:"\f194"}.fa-vimeo-v:before{content:"\f27d"}.fa-vine:before{content:"\f1ca"}.fa-virus:before{content:"\e074"}.fa-virus-slash:before{content:"\e075"}.fa-viruses:before{content:"\e076"}.fa-vk:before{content:"\f189"}.fa-vnv:before{content:"\f40b"}.fa-voicemail:before{content:"\f897"}.fa-volleyball-ball:before{content:"\f45f"}.fa-volume-down:before{content:"\f027"}.fa-volume-mute:before{content:"\f6a9"}.fa-volume-off:before{content:"\f026"}.fa-volume-up:before{content:"\f028"}.fa-vote-yea:before{content:"\f772"}.fa-vr-cardboard:before{content:"\f729"}.fa-vuejs:before{content:"\f41f"}.fa-walking:before{content:"\f554"}.fa-wallet:before{content:"\f555"}.fa-warehouse:before{content:"\f494"}.fa-water:before{content:"\f773"}.fa-wave-square:before{content:"\f83e"}.fa-waze:before{content:"\f83f"}.fa-weebly:before{content:"\f5cc"}.fa-weibo:before{content:"\f18a"}.fa-weight:before{content:"\f496"}.fa-weight-hanging:before{content:"\f5cd"}.fa-weixin:before{content:"\f1d7"}.fa-whatsapp:before{content:"\f232"}.fa-whatsapp-square:before{content:"\f40c"}.fa-wheelchair:before{content:"\f193"}.fa-whmcs:before{content:"\f40d"}.fa-wifi:before{content:"\f1eb"}.fa-wikipedia-w:before{content:"\f266"}.fa-wind:before{content:"\f72e"}.fa-window-close:before{content:"\f410"}.fa-window-maximize:before{content:"\f2d0"}.fa-window-minimize:before{content:"\f2d1"}.fa-window-restore:before{content:"\f2d2"}.fa-windows:before{content:"\f17a"}.fa-wine-bottle:before{content:"\f72f"}.fa-wine-glass:before{content:"\f4e3"}.fa-wine-glass-alt:before{content:"\f5ce"}.fa-wix:before{content:"\f5cf"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-won-sign:before{content:"\f159"}.fa-wordpress:before{content:"\f19a"}.fa-wordpress-simple:before{content:"\f411"}.fa-wpbeginner:before{content:"\f297"}.fa-wpexplorer:before{content:"\f2de"}.fa-wpforms:before{content:"\f298"}.fa-wpressr:before{content:"\f3e4"}.fa-wrench:before{content:"\f0ad"}.fa-x-ray:before{content:"\f497"}.fa-xbox:before{content:"\f412"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-y-combinator:before{content:"\f23b"}.fa-yahoo:before{content:"\f19e"}.fa-yammer:before{content:"\f840"}.fa-yandex:before{content:"\f413"}.fa-yandex-international:before{content:"\f414"}.fa-yarn:before{content:"\f7e3"}.fa-yelp:before{content:"\f1e9"}.fa-yen-sign:before{content:"\f157"}.fa-yin-yang:before{content:"\f6ad"}.fa-yoast:before{content:"\f2b1"}.fa-youtube:before{content:"\f167"}.fa-youtube-square:before{content:"\f431"}.fa-zhihu:before{content:"\f63f"}.sr-only{border:0;clip:rect(0,0,0,0);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px}.sr-only-focusable:active,.sr-only-focusable:focus{clip:auto;height:auto;margin:0;overflow:visible;position:static;width:auto}@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands"}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.fab,.far{font-weight:400}@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.far,.fas{font-family:"Font Awesome 5 Free"}.fa,.fas{font-weight:900} \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/common.js.download b/src/assets/images/Gabinete Digital_files/common.js.download deleted file mode 100644 index 7f41e61de..000000000 --- a/src/assets/images/Gabinete Digital_files/common.js.download +++ /dev/null @@ -1,543 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["common"],{ - -/***/ "./node_modules/@ionic/core/dist/esm/button-active-0d5784f9.js": -/*!*********************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm/button-active-0d5784f9.js ***! - \*********************************************************************/ -/*! exports provided: c */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return createButtonActiveGesture; }); -/* harmony import */ var _index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./index-44bf8136.js */ "./node_modules/@ionic/core/dist/esm/index-44bf8136.js"); -/* harmony import */ var _index_eea61379_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index-eea61379.js */ "./node_modules/@ionic/core/dist/esm/index-eea61379.js"); -/* harmony import */ var _haptic_7b8ba70a_js__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./haptic-7b8ba70a.js */ "./node_modules/@ionic/core/dist/esm/haptic-7b8ba70a.js"); - - - - -const createButtonActiveGesture = (el, isButton) => { - let currentTouchedButton; - let initialTouchedButton; - const activateButtonAtPoint = (x, y, hapticFeedbackFn) => { - if (typeof document === 'undefined') { - return; - } - const target = document.elementFromPoint(x, y); - if (!target || !isButton(target)) { - clearActiveButton(); - return; - } - if (target !== currentTouchedButton) { - clearActiveButton(); - setActiveButton(target, hapticFeedbackFn); - } - }; - const setActiveButton = (button, hapticFeedbackFn) => { - currentTouchedButton = button; - if (!initialTouchedButton) { - initialTouchedButton = currentTouchedButton; - } - const buttonToModify = currentTouchedButton; - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["c"])(() => buttonToModify.classList.add('ion-activated')); - hapticFeedbackFn(); - }; - const clearActiveButton = (dispatchClick = false) => { - if (!currentTouchedButton) { - return; - } - const buttonToModify = currentTouchedButton; - Object(_index_44bf8136_js__WEBPACK_IMPORTED_MODULE_0__["c"])(() => buttonToModify.classList.remove('ion-activated')); - /** - * Clicking on one button, but releasing on another button - * does not dispatch a click event in browsers, so we - * need to do it manually here. Some browsers will - * dispatch a click if clicking on one button, dragging over - * another button, and releasing on the original button. In that - * case, we need to make sure we do not cause a double click there. - */ - if (dispatchClick && initialTouchedButton !== currentTouchedButton) { - currentTouchedButton.click(); - } - currentTouchedButton = undefined; - }; - return Object(_index_eea61379_js__WEBPACK_IMPORTED_MODULE_1__["createGesture"])({ - el, - gestureName: 'buttonActiveDrag', - threshold: 0, - onStart: ev => activateButtonAtPoint(ev.currentX, ev.currentY, _haptic_7b8ba70a_js__WEBPACK_IMPORTED_MODULE_2__["a"]), - onMove: ev => activateButtonAtPoint(ev.currentX, ev.currentY, _haptic_7b8ba70a_js__WEBPACK_IMPORTED_MODULE_2__["b"]), - onEnd: () => { - clearActiveButton(true); - Object(_haptic_7b8ba70a_js__WEBPACK_IMPORTED_MODULE_2__["h"])(); - initialTouchedButton = undefined; - } - }); -}; - - - - -/***/ }), - -/***/ "./node_modules/@ionic/core/dist/esm/framework-delegate-d1eb6504.js": -/*!**************************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm/framework-delegate-d1eb6504.js ***! - \**************************************************************************/ -/*! exports provided: a, d */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return attachComponent; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return detachComponent; }); -const attachComponent = async (delegate, container, component, cssClasses, componentProps) => { - if (delegate) { - return delegate.attachViewToDom(container, component, componentProps, cssClasses); - } - if (typeof component !== 'string' && !(component instanceof HTMLElement)) { - throw new Error('framework delegate is missing'); - } - const el = (typeof component === 'string') - ? container.ownerDocument && container.ownerDocument.createElement(component) - : component; - if (cssClasses) { - cssClasses.forEach(c => el.classList.add(c)); - } - if (componentProps) { - Object.assign(el, componentProps); - } - container.appendChild(el); - if (el.componentOnReady) { - await el.componentOnReady(); - } - return el; -}; -const detachComponent = (delegate, element) => { - if (element) { - if (delegate) { - const container = element.parentElement; - return delegate.removeViewFromDom(container, element); - } - element.remove(); - } - return Promise.resolve(); -}; - - - - -/***/ }), - -/***/ "./node_modules/@ionic/core/dist/esm/haptic-7b8ba70a.js": -/*!**************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm/haptic-7b8ba70a.js ***! - \**************************************************************/ -/*! exports provided: a, b, c, d, h */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "a", function() { return hapticSelectionStart; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "b", function() { return hapticSelectionChanged; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return hapticSelection; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "d", function() { return hapticImpact; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return hapticSelectionEnd; }); -const HapticEngine = { - getEngine() { - const win = window; - return (win.TapticEngine) || (win.Capacitor && win.Capacitor.isPluginAvailable('Haptics') && win.Capacitor.Plugins.Haptics); - }, - available() { - return !!this.getEngine(); - }, - isCordova() { - return !!window.TapticEngine; - }, - isCapacitor() { - const win = window; - return !!win.Capacitor; - }, - impact(options) { - const engine = this.getEngine(); - if (!engine) { - return; - } - const style = this.isCapacitor() ? options.style.toUpperCase() : options.style; - engine.impact({ style }); - }, - notification(options) { - const engine = this.getEngine(); - if (!engine) { - return; - } - const style = this.isCapacitor() ? options.style.toUpperCase() : options.style; - engine.notification({ style }); - }, - selection() { - this.impact({ style: 'light' }); - }, - selectionStart() { - const engine = this.getEngine(); - if (!engine) { - return; - } - if (this.isCapacitor()) { - engine.selectionStart(); - } - else { - engine.gestureSelectionStart(); - } - }, - selectionChanged() { - const engine = this.getEngine(); - if (!engine) { - return; - } - if (this.isCapacitor()) { - engine.selectionChanged(); - } - else { - engine.gestureSelectionChanged(); - } - }, - selectionEnd() { - const engine = this.getEngine(); - if (!engine) { - return; - } - if (this.isCapacitor()) { - engine.selectionEnd(); - } - else { - engine.gestureSelectionEnd(); - } - } -}; -/** - * Trigger a selection changed haptic event. Good for one-time events - * (not for gestures) - */ -const hapticSelection = () => { - HapticEngine.selection(); -}; -/** - * Tell the haptic engine that a gesture for a selection change is starting. - */ -const hapticSelectionStart = () => { - HapticEngine.selectionStart(); -}; -/** - * Tell the haptic engine that a selection changed during a gesture. - */ -const hapticSelectionChanged = () => { - HapticEngine.selectionChanged(); -}; -/** - * Tell the haptic engine we are done with a gesture. This needs to be - * called lest resources are not properly recycled. - */ -const hapticSelectionEnd = () => { - HapticEngine.selectionEnd(); -}; -/** - * Use this to indicate success/failure/warning to the user. - * options should be of the type `{ style: 'light' }` (or `medium`/`heavy`) - */ -const hapticImpact = (options) => { - HapticEngine.impact(options); -}; - - - - -/***/ }), - -/***/ "./node_modules/@ionic/core/dist/esm/spinner-configs-c78e170e.js": -/*!***********************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm/spinner-configs-c78e170e.js ***! - \***********************************************************************/ -/*! exports provided: S */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "S", function() { return SPINNERS; }); -const spinners = { - 'bubbles': { - dur: 1000, - circles: 9, - fn: (dur, index, total) => { - const animationDelay = `${(dur * index / total) - dur}ms`; - const angle = 2 * Math.PI * index / total; - return { - r: 5, - style: { - 'top': `${9 * Math.sin(angle)}px`, - 'left': `${9 * Math.cos(angle)}px`, - 'animation-delay': animationDelay, - } - }; - } - }, - 'circles': { - dur: 1000, - circles: 8, - fn: (dur, index, total) => { - const step = index / total; - const animationDelay = `${(dur * step) - dur}ms`; - const angle = 2 * Math.PI * step; - return { - r: 5, - style: { - 'top': `${9 * Math.sin(angle)}px`, - 'left': `${9 * Math.cos(angle)}px`, - 'animation-delay': animationDelay, - } - }; - } - }, - 'circular': { - dur: 1400, - elmDuration: true, - circles: 1, - fn: () => { - return { - r: 20, - cx: 48, - cy: 48, - fill: 'none', - viewBox: '24 24 48 48', - transform: 'translate(0,0)', - style: {} - }; - } - }, - 'crescent': { - dur: 750, - circles: 1, - fn: () => { - return { - r: 26, - style: {} - }; - } - }, - 'dots': { - dur: 750, - circles: 3, - fn: (_, index) => { - const animationDelay = -(110 * index) + 'ms'; - return { - r: 6, - style: { - 'left': `${9 - (9 * index)}px`, - 'animation-delay': animationDelay, - } - }; - } - }, - 'lines': { - dur: 1000, - lines: 12, - fn: (dur, index, total) => { - const transform = `rotate(${30 * index + (index < 6 ? 180 : -180)}deg)`; - const animationDelay = `${(dur * index / total) - dur}ms`; - return { - y1: 17, - y2: 29, - style: { - 'transform': transform, - 'animation-delay': animationDelay, - } - }; - } - }, - 'lines-small': { - dur: 1000, - lines: 12, - fn: (dur, index, total) => { - const transform = `rotate(${30 * index + (index < 6 ? 180 : -180)}deg)`; - const animationDelay = `${(dur * index / total) - dur}ms`; - return { - y1: 12, - y2: 20, - style: { - 'transform': transform, - 'animation-delay': animationDelay, - } - }; - } - } -}; -const SPINNERS = spinners; - - - - -/***/ }), - -/***/ "./node_modules/@ionic/core/dist/esm/theme-3f0b0c04.js": -/*!*************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm/theme-3f0b0c04.js ***! - \*************************************************************/ -/*! exports provided: c, g, h, o */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "c", function() { return createColorClasses; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "g", function() { return getClassMap; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "h", function() { return hostContext; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "o", function() { return openURL; }); -const hostContext = (selector, el) => { - return el.closest(selector) !== null; -}; -/** - * Create the mode and color classes for the component based on the classes passed in - */ -const createColorClasses = (color) => { - return (typeof color === 'string' && color.length > 0) ? { - 'ion-color': true, - [`ion-color-${color}`]: true - } : undefined; -}; -const getClassList = (classes) => { - if (classes !== undefined) { - const array = Array.isArray(classes) ? classes : classes.split(' '); - return array - .filter(c => c != null) - .map(c => c.trim()) - .filter(c => c !== ''); - } - return []; -}; -const getClassMap = (classes) => { - const map = {}; - getClassList(classes).forEach(c => map[c] = true); - return map; -}; -const SCHEME = /^[a-z][a-z0-9+\-.]*:/; -const openURL = async (url, ev, direction, animation) => { - if (url != null && url[0] !== '#' && !SCHEME.test(url)) { - const router = document.querySelector('ion-router'); - if (router) { - if (ev != null) { - ev.preventDefault(); - } - return router.push(url, direction, animation); - } - } - return false; -}; - - - - -/***/ }), - -/***/ "./node_modules/raw-loader/dist/cjs.js!./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.html": -/*!**********************************************************************************************************************!*\ - !*** ./node_modules/raw-loader/dist/cjs.js!./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.html ***! - \**********************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\n \n approve-event-modal\n \n\n\n\n\n\n"); - -/***/ }), - -/***/ "./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.scss": -/*!********************************************************************************!*\ - !*** ./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.scss ***! - \********************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL3BhZ2VzL2FnZW5kYS9hcHByb3ZlLWV2ZW50LW1vZGFsL2FwcHJvdmUtZXZlbnQtbW9kYWwucGFnZS5zY3NzIn0= */"); - -/***/ }), - -/***/ "./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.ts": -/*!******************************************************************************!*\ - !*** ./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.ts ***! - \******************************************************************************/ -/*! exports provided: ApproveEventModalPage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ApproveEventModalPage", function() { return ApproveEventModalPage; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); - - -let ApproveEventModalPage = class ApproveEventModalPage { - constructor() { } - ngOnInit() { - } -}; -ApproveEventModalPage = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"])({ - selector: 'app-approve-event-modal', - template: Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! raw-loader!./approve-event-modal.page.html */ "./node_modules/raw-loader/dist/cjs.js!./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.html")).default, - styles: [Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! ./approve-event-modal.page.scss */ "./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.scss")).default] - }) -], ApproveEventModalPage); - - - -/***/ }), - -/***/ "./src/app/services/alert.service.ts": -/*!*******************************************!*\ - !*** ./src/app/services/alert.service.ts ***! - \*******************************************/ -/*! exports provided: AlertService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AlertService", function() { return AlertService; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); - - - -let AlertService = class AlertService { - constructor(alertController) { - this.alertController = alertController; - } - presentAlert(message) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - const alert = yield this.alertController.create({ - cssClass: 'my-custom-class', - header: 'Mensagem do sistema', - message: message, - buttons: ['OK'] - }); - yield alert.present(); - }); - } -}; -AlertService.ctorParameters = () => [ - { type: _ionic_angular__WEBPACK_IMPORTED_MODULE_2__["AlertController"] } -]; -AlertService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"])({ - providedIn: 'root' - }) -], AlertService); - - - -/***/ }) - -}]); -//# sourceMappingURL=common.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/css2 b/src/assets/images/Gabinete Digital_files/css2 deleted file mode 100644 index d11b86f2d..000000000 --- a/src/assets/images/Gabinete Digital_files/css2 +++ /dev/null @@ -1,756 +0,0 @@ -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOiCnqEu92Fr1Mu51QrEz0dL_nz.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOiCnqEu92Fr1Mu51QrEzQdL_nz.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOiCnqEu92Fr1Mu51QrEzwdL_nz.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOiCnqEu92Fr1Mu51QrEzMdL_nz.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOiCnqEu92Fr1Mu51QrEz8dL_nz.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOiCnqEu92Fr1Mu51QrEz4dL_nz.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin Italic'), local('Roboto-ThinItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOiCnqEu92Fr1Mu51QrEzAdLw.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TjASc3CsTKlA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TjASc-CsTKlA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TjASc2CsTKlA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TjASc5CsTKlA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TjASc1CsTKlA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TjASc0CsTKlA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 300; - font-display: swap; - src: local('Roboto Light Italic'), local('Roboto-LightItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TjASc6CsQ.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xFIzIFKw.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xMIzIFKw.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xEIzIFKw.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xLIzIFKw.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xHIzIFKw.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xGIzIFKw.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 400; - font-display: swap; - src: local('Roboto Italic'), local('Roboto-Italic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1Mu51xIIzI.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51S7ACc3CsTKlA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51S7ACc-CsTKlA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51S7ACc2CsTKlA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51S7ACc5CsTKlA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51S7ACc1CsTKlA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51S7ACc0CsTKlA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium Italic'), local('Roboto-MediumItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51S7ACc6CsQ.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TzBic3CsTKlA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TzBic-CsTKlA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TzBic2CsTKlA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TzBic5CsTKlA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TzBic1CsTKlA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TzBic0CsTKlA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold Italic'), local('Roboto-BoldItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TzBic6CsQ.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 900; - font-display: swap; - src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TLBCc3CsTKlA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 900; - font-display: swap; - src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TLBCc-CsTKlA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 900; - font-display: swap; - src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TLBCc2CsTKlA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 900; - font-display: swap; - src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TLBCc5CsTKlA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 900; - font-display: swap; - src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TLBCc1CsTKlA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 900; - font-display: swap; - src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TLBCc0CsTKlA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: italic; - font-weight: 900; - font-display: swap; - src: local('Roboto Black Italic'), local('Roboto-BlackItalic'), url(https://fonts.gstatic.com/s/roboto/v20/KFOjCnqEu92Fr1Mu51TLBCc6CsQ.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxFIzIFKw.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxMIzIFKw.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxEIzIFKw.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxLIzIFKw.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxHIzIFKw.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxGIzIFKw.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 100; - font-display: swap; - src: local('Roboto Thin'), local('Roboto-Thin'), url(https://fonts.gstatic.com/s/roboto/v20/KFOkCnqEu92Fr1MmgVxIIzI.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCRc4EsA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fABc4EsA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCBc4EsA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBxc4EsA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fCxc4EsA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fChc4EsA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 300; - font-display: swap; - src: local('Roboto Light'), local('Roboto-Light'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmSU5fBBc4.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu72xKOzY.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu5mxKOzY.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7mxKOzY.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4WxKOzY.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7WxKOzY.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu7GxKOzY.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 400; - font-display: swap; - src: local('Roboto'), local('Roboto-Regular'), url(https://fonts.gstatic.com/s/roboto/v20/KFOmCnqEu92Fr1Mu4mxK.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCRc4EsA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fABc4EsA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCBc4EsA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBxc4EsA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fCxc4EsA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fChc4EsA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 500; - font-display: swap; - src: local('Roboto Medium'), local('Roboto-Medium'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmEU9fBBc4.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCRc4EsA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfABc4EsA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCBc4EsA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBxc4EsA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfCxc4EsA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfChc4EsA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 700; - font-display: swap; - src: local('Roboto Bold'), local('Roboto-Bold'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmWUlfBBc4.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} -/* cyrillic-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - font-display: swap; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCRc4EsA.woff2) format('woff2'); - unicode-range: U+0460-052F, U+1C80-1C88, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F; -} -/* cyrillic */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - font-display: swap; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfABc4EsA.woff2) format('woff2'); - unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; -} -/* greek-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - font-display: swap; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCBc4EsA.woff2) format('woff2'); - unicode-range: U+1F00-1FFF; -} -/* greek */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - font-display: swap; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfBxc4EsA.woff2) format('woff2'); - unicode-range: U+0370-03FF; -} -/* vietnamese */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - font-display: swap; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfCxc4EsA.woff2) format('woff2'); - unicode-range: U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+1EA0-1EF9, U+20AB; -} -/* latin-ext */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - font-display: swap; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfChc4EsA.woff2) format('woff2'); - unicode-range: U+0100-024F, U+0259, U+1E00-1EFF, U+2020, U+20A0-20AB, U+20AD-20CF, U+2113, U+2C60-2C7F, U+A720-A7FF; -} -/* latin */ -@font-face { - font-family: 'Roboto'; - font-style: normal; - font-weight: 900; - font-display: swap; - src: local('Roboto Black'), local('Roboto-Black'), url(https://fonts.gstatic.com/s/roboto/v20/KFOlCnqEu92Fr1MmYUtfBBc4.woff2) format('woff2'); - unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; -} diff --git a/src/assets/images/Gabinete Digital_files/default_home-home-module_pages-chat-chat-module_pages-login-login-module.js.download b/src/assets/images/Gabinete Digital_files/default_home-home-module_pages-chat-chat-module_pages-login-login-module.js.download deleted file mode 100644 index 07c4bd7f7..000000000 --- a/src/assets/images/Gabinete Digital_files/default_home-home-module_pages-chat-chat-module_pages-login-login-module.js.download +++ /dev/null @@ -1,3215 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["default~home-home-module~pages-chat-chat-module~pages-login-login-module"],{ - -/***/ "./node_modules/@capacitor/core/dist/esm/core-plugin-definitions.js": -/*!**************************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/core-plugin-definitions.js ***! - \**************************************************************************/ -/*! exports provided: CameraSource, CameraDirection, CameraResultType, FilesystemDirectory, FilesystemEncoding, HapticsImpactStyle, HapticsNotificationType, KeyboardStyle, KeyboardResize, ActionSheetOptionStyle, PermissionType, PhotosAlbumType, StatusBarStyle, StatusBarAnimation */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CameraSource", function() { return CameraSource; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CameraDirection", function() { return CameraDirection; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CameraResultType", function() { return CameraResultType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilesystemDirectory", function() { return FilesystemDirectory; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilesystemEncoding", function() { return FilesystemEncoding; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HapticsImpactStyle", function() { return HapticsImpactStyle; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HapticsNotificationType", function() { return HapticsNotificationType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyboardStyle", function() { return KeyboardStyle; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KeyboardResize", function() { return KeyboardResize; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ActionSheetOptionStyle", function() { return ActionSheetOptionStyle; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PermissionType", function() { return PermissionType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PhotosAlbumType", function() { return PhotosAlbumType; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StatusBarStyle", function() { return StatusBarStyle; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StatusBarAnimation", function() { return StatusBarAnimation; }); -var CameraSource; -(function (CameraSource) { - CameraSource["Prompt"] = "PROMPT"; - CameraSource["Camera"] = "CAMERA"; - CameraSource["Photos"] = "PHOTOS"; -})(CameraSource || (CameraSource = {})); -var CameraDirection; -(function (CameraDirection) { - CameraDirection["Rear"] = "REAR"; - CameraDirection["Front"] = "FRONT"; -})(CameraDirection || (CameraDirection = {})); -var CameraResultType; -(function (CameraResultType) { - CameraResultType["Uri"] = "uri"; - CameraResultType["Base64"] = "base64"; - CameraResultType["DataUrl"] = "dataUrl"; -})(CameraResultType || (CameraResultType = {})); -var FilesystemDirectory; -(function (FilesystemDirectory) { - /** - * The Documents directory - * On iOS it's the app's documents directory. - * Use this directory to store user-generated content. - * On Android it's the Public Documents folder, so it's accessible from other apps. - * It's not accesible on Android 10 unless the app enables legacy External Storage - * by adding `android:requestLegacyExternalStorage="true"` in the `application` tag - * in the `AndroidManifest.xml` - */ - FilesystemDirectory["Documents"] = "DOCUMENTS"; - /** - * The Data directory - * On iOS it will use the Documents directory - * On Android it's the directory holding application files. - * Files will be deleted when the application is uninstalled. - */ - FilesystemDirectory["Data"] = "DATA"; - /** - * The Cache directory - * Can be deleted in cases of low memory, so use this directory to write app-specific files - * that your app can re-create easily. - */ - FilesystemDirectory["Cache"] = "CACHE"; - /** - * The external directory - * On iOS it will use the Documents directory - * On Android it's the directory on the primary shared/external - * storage device where the application can place persistent files it owns. - * These files are internal to the applications, and not typically visible - * to the user as media. - * Files will be deleted when the application is uninstalled. - */ - FilesystemDirectory["External"] = "EXTERNAL"; - /** - * The external storage directory - * On iOS it will use the Documents directory - * On Android it's the primary shared/external storage directory. - * It's not accesible on Android 10 unless the app enables legacy External Storage - * by adding `android:requestLegacyExternalStorage="true"` in the `application` tag - * in the `AndroidManifest.xml` - */ - FilesystemDirectory["ExternalStorage"] = "EXTERNAL_STORAGE"; -})(FilesystemDirectory || (FilesystemDirectory = {})); -var FilesystemEncoding; -(function (FilesystemEncoding) { - FilesystemEncoding["UTF8"] = "utf8"; - FilesystemEncoding["ASCII"] = "ascii"; - FilesystemEncoding["UTF16"] = "utf16"; -})(FilesystemEncoding || (FilesystemEncoding = {})); -var HapticsImpactStyle; -(function (HapticsImpactStyle) { - HapticsImpactStyle["Heavy"] = "HEAVY"; - HapticsImpactStyle["Medium"] = "MEDIUM"; - HapticsImpactStyle["Light"] = "LIGHT"; -})(HapticsImpactStyle || (HapticsImpactStyle = {})); -var HapticsNotificationType; -(function (HapticsNotificationType) { - HapticsNotificationType["SUCCESS"] = "SUCCESS"; - HapticsNotificationType["WARNING"] = "WARNING"; - HapticsNotificationType["ERROR"] = "ERROR"; -})(HapticsNotificationType || (HapticsNotificationType = {})); -var KeyboardStyle; -(function (KeyboardStyle) { - KeyboardStyle["Dark"] = "DARK"; - KeyboardStyle["Light"] = "LIGHT"; -})(KeyboardStyle || (KeyboardStyle = {})); -var KeyboardResize; -(function (KeyboardResize) { - KeyboardResize["Body"] = "body"; - KeyboardResize["Ionic"] = "ionic"; - KeyboardResize["Native"] = "native"; - KeyboardResize["None"] = "none"; -})(KeyboardResize || (KeyboardResize = {})); -var ActionSheetOptionStyle; -(function (ActionSheetOptionStyle) { - ActionSheetOptionStyle["Default"] = "DEFAULT"; - ActionSheetOptionStyle["Destructive"] = "DESTRUCTIVE"; - ActionSheetOptionStyle["Cancel"] = "CANCEL"; -})(ActionSheetOptionStyle || (ActionSheetOptionStyle = {})); -// -var PermissionType; -(function (PermissionType) { - PermissionType["Camera"] = "camera"; - PermissionType["Photos"] = "photos"; - PermissionType["Geolocation"] = "geolocation"; - PermissionType["Notifications"] = "notifications"; - PermissionType["ClipboardRead"] = "clipboard-read"; - PermissionType["ClipboardWrite"] = "clipboard-write"; - PermissionType["Microphone"] = "microphone"; -})(PermissionType || (PermissionType = {})); -var PhotosAlbumType; -(function (PhotosAlbumType) { - /** - * Album is a "smart" album (such as Favorites or Recently Added) - */ - PhotosAlbumType["Smart"] = "smart"; - /** - * Album is a cloud-shared album - */ - PhotosAlbumType["Shared"] = "shared"; - /** - * Album is a user-created album - */ - PhotosAlbumType["User"] = "user"; -})(PhotosAlbumType || (PhotosAlbumType = {})); -var StatusBarStyle; -(function (StatusBarStyle) { - /** - * Light text for dark backgrounds. - */ - StatusBarStyle["Dark"] = "DARK"; - /** - * Dark text for light backgrounds. - */ - StatusBarStyle["Light"] = "LIGHT"; -})(StatusBarStyle || (StatusBarStyle = {})); -var StatusBarAnimation; -(function (StatusBarAnimation) { - /** - * No animation during show/hide. - */ - StatusBarAnimation["None"] = "NONE"; - /** - * Slide animation during show/hide. - */ - StatusBarAnimation["Slide"] = "SLIDE"; - /** - * Fade animation during show/hide. - */ - StatusBarAnimation["Fade"] = "FADE"; -})(StatusBarAnimation || (StatusBarAnimation = {})); -//# sourceMappingURL=core-plugin-definitions.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/global.js": -/*!*********************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/global.js ***! - \*********************************************************/ -/*! exports provided: Capacitor, Plugins */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Capacitor", function() { return Capacitor; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Plugins", function() { return Plugins; }); -/* harmony import */ var _web_runtime__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./web-runtime */ "./node_modules/@capacitor/core/dist/esm/web-runtime.js"); - -// Create our default Capacitor instance, which will be -// overridden on native platforms -var Capacitor = (function (globalThis) { - // Create a new CapacitorWeb instance if one doesn't already exist on globalThis - // Ensure the global is assigned the same Capacitor instance, - // then export Capacitor so it can be imported in other modules - return globalThis.Capacitor = (globalThis.Capacitor || new _web_runtime__WEBPACK_IMPORTED_MODULE_0__["CapacitorWeb"]()); -})( -// figure out the current globalThis, such as "window", "self" or "global" -// ensure errors are not thrown in an node SSR environment or web worker -typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : {}); -var Plugins = Capacitor.Plugins; - -//# sourceMappingURL=global.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/index.js": -/*!********************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/index.js ***! - \********************************************************/ -/*! exports provided: CameraSource, CameraDirection, CameraResultType, FilesystemDirectory, FilesystemEncoding, HapticsImpactStyle, HapticsNotificationType, KeyboardStyle, KeyboardResize, ActionSheetOptionStyle, PermissionType, PhotosAlbumType, StatusBarStyle, StatusBarAnimation, Capacitor, Plugins, AccessibilityPluginWeb, Accessibility, AppPluginWeb, App, BrowserPluginWeb, Browser, CameraPluginWeb, Camera, ClipboardPluginWeb, Clipboard, FilesystemPluginWeb, Filesystem, GeolocationPluginWeb, Geolocation, DevicePluginWeb, Device, LocalNotificationsPluginWeb, LocalNotifications, SharePluginWeb, Share, ModalsPluginWeb, Modals, MotionPluginWeb, Motion, NetworkPluginWeb, Network, PermissionsPluginWeb, Permissions, SplashScreenPluginWeb, SplashScreen, StoragePluginWeb, Storage, ToastPluginWeb, Toast, registerWebPlugin, WebPluginRegistry, WebPlugins, WebPlugin, mergeWebPlugins, mergeWebPlugin */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./core-plugin-definitions */ "./node_modules/@capacitor/core/dist/esm/core-plugin-definitions.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CameraSource", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["CameraSource"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CameraDirection", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["CameraDirection"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CameraResultType", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["CameraResultType"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FilesystemDirectory", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["FilesystemDirectory"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FilesystemEncoding", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["FilesystemEncoding"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HapticsImpactStyle", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["HapticsImpactStyle"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "HapticsNotificationType", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["HapticsNotificationType"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "KeyboardStyle", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["KeyboardStyle"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "KeyboardResize", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["KeyboardResize"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ActionSheetOptionStyle", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["ActionSheetOptionStyle"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PermissionType", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["PermissionType"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PhotosAlbumType", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["PhotosAlbumType"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StatusBarStyle", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["StatusBarStyle"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StatusBarAnimation", function() { return _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_0__["StatusBarAnimation"]; }); - -/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./global */ "./node_modules/@capacitor/core/dist/esm/global.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Capacitor", function() { return _global__WEBPACK_IMPORTED_MODULE_1__["Capacitor"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Plugins", function() { return _global__WEBPACK_IMPORTED_MODULE_1__["Plugins"]; }); - -/* harmony import */ var _web_plugins__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./web-plugins */ "./node_modules/@capacitor/core/dist/esm/web-plugins.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AccessibilityPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["AccessibilityPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Accessibility", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Accessibility"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AppPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["AppPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "App", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["App"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BrowserPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["BrowserPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Browser", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Browser"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CameraPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["CameraPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Camera", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Camera"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ClipboardPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["ClipboardPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Clipboard", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Clipboard"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FilesystemPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["FilesystemPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Filesystem", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Filesystem"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GeolocationPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["GeolocationPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Geolocation", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Geolocation"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DevicePluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["DevicePluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Device", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Device"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LocalNotificationsPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["LocalNotificationsPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LocalNotifications", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["LocalNotifications"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SharePluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["SharePluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Share", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Share"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ModalsPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["ModalsPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Modals", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Modals"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MotionPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["MotionPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Motion", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Motion"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NetworkPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["NetworkPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Network", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Network"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PermissionsPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["PermissionsPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Permissions", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Permissions"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SplashScreenPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["SplashScreenPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SplashScreen", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["SplashScreen"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StoragePluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["StoragePluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Storage", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Storage"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ToastPluginWeb", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["ToastPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Toast", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["Toast"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "registerWebPlugin", function() { return _web_plugins__WEBPACK_IMPORTED_MODULE_2__["registerWebPlugin"]; }); - -/* harmony import */ var _web_index__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web/index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WebPluginRegistry", function() { return _web_index__WEBPACK_IMPORTED_MODULE_3__["WebPluginRegistry"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WebPlugins", function() { return _web_index__WEBPACK_IMPORTED_MODULE_3__["WebPlugins"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "WebPlugin", function() { return _web_index__WEBPACK_IMPORTED_MODULE_3__["WebPlugin"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeWebPlugins", function() { return _web_index__WEBPACK_IMPORTED_MODULE_3__["mergeWebPlugins"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "mergeWebPlugin", function() { return _web_index__WEBPACK_IMPORTED_MODULE_3__["mergeWebPlugin"]; }); - - - - - -//# sourceMappingURL=index.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/util.js": -/*!*******************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/util.js ***! - \*******************************************************/ -/*! exports provided: extend, uuid4 */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "extend", function() { return extend; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "uuid4", function() { return uuid4; }); -var extend = function (target) { - var objs = []; - for (var _i = 1; _i < arguments.length; _i++) { - objs[_i - 1] = arguments[_i]; - } - objs.forEach(function (o) { - if (o && typeof (o) === 'object') { - for (var k in o) { - if (o.hasOwnProperty(k)) { - target[k] = o[k]; - } - } - } - }); - return target; -}; -var uuid4 = function () { - return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) { - var r = Math.random() * 16 | 0, v = c === 'x' ? r : (r & 0x3 | 0x8); - return v.toString(16); - }); -}; -//# sourceMappingURL=util.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web-plugins.js": -/*!**************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web-plugins.js ***! - \**************************************************************/ -/*! exports provided: AccessibilityPluginWeb, Accessibility, AppPluginWeb, App, BrowserPluginWeb, Browser, CameraPluginWeb, Camera, ClipboardPluginWeb, Clipboard, FilesystemPluginWeb, Filesystem, GeolocationPluginWeb, Geolocation, DevicePluginWeb, Device, LocalNotificationsPluginWeb, LocalNotifications, SharePluginWeb, Share, ModalsPluginWeb, Modals, MotionPluginWeb, Motion, NetworkPluginWeb, Network, PermissionsPluginWeb, Permissions, SplashScreenPluginWeb, SplashScreen, StoragePluginWeb, Storage, ToastPluginWeb, Toast, registerWebPlugin */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "registerWebPlugin", function() { return registerWebPlugin; }); -/* harmony import */ var _global__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./global */ "./node_modules/@capacitor/core/dist/esm/global.js"); -/* harmony import */ var _web_index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./web/index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); -/* harmony import */ var _web_accessibility__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./web/accessibility */ "./node_modules/@capacitor/core/dist/esm/web/accessibility.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AccessibilityPluginWeb", function() { return _web_accessibility__WEBPACK_IMPORTED_MODULE_2__["AccessibilityPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Accessibility", function() { return _web_accessibility__WEBPACK_IMPORTED_MODULE_2__["Accessibility"]; }); - -/* harmony import */ var _web_app__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./web/app */ "./node_modules/@capacitor/core/dist/esm/web/app.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "AppPluginWeb", function() { return _web_app__WEBPACK_IMPORTED_MODULE_3__["AppPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "App", function() { return _web_app__WEBPACK_IMPORTED_MODULE_3__["App"]; }); - -/* harmony import */ var _web_browser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./web/browser */ "./node_modules/@capacitor/core/dist/esm/web/browser.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "BrowserPluginWeb", function() { return _web_browser__WEBPACK_IMPORTED_MODULE_4__["BrowserPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Browser", function() { return _web_browser__WEBPACK_IMPORTED_MODULE_4__["Browser"]; }); - -/* harmony import */ var _web_camera__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./web/camera */ "./node_modules/@capacitor/core/dist/esm/web/camera.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "CameraPluginWeb", function() { return _web_camera__WEBPACK_IMPORTED_MODULE_5__["CameraPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Camera", function() { return _web_camera__WEBPACK_IMPORTED_MODULE_5__["Camera"]; }); - -/* harmony import */ var _web_clipboard__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./web/clipboard */ "./node_modules/@capacitor/core/dist/esm/web/clipboard.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ClipboardPluginWeb", function() { return _web_clipboard__WEBPACK_IMPORTED_MODULE_6__["ClipboardPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Clipboard", function() { return _web_clipboard__WEBPACK_IMPORTED_MODULE_6__["Clipboard"]; }); - -/* harmony import */ var _web_filesystem__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./web/filesystem */ "./node_modules/@capacitor/core/dist/esm/web/filesystem.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "FilesystemPluginWeb", function() { return _web_filesystem__WEBPACK_IMPORTED_MODULE_7__["FilesystemPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Filesystem", function() { return _web_filesystem__WEBPACK_IMPORTED_MODULE_7__["Filesystem"]; }); - -/* harmony import */ var _web_geolocation__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./web/geolocation */ "./node_modules/@capacitor/core/dist/esm/web/geolocation.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "GeolocationPluginWeb", function() { return _web_geolocation__WEBPACK_IMPORTED_MODULE_8__["GeolocationPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Geolocation", function() { return _web_geolocation__WEBPACK_IMPORTED_MODULE_8__["Geolocation"]; }); - -/* harmony import */ var _web_device__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./web/device */ "./node_modules/@capacitor/core/dist/esm/web/device.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "DevicePluginWeb", function() { return _web_device__WEBPACK_IMPORTED_MODULE_9__["DevicePluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Device", function() { return _web_device__WEBPACK_IMPORTED_MODULE_9__["Device"]; }); - -/* harmony import */ var _web_local_notifications__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./web/local-notifications */ "./node_modules/@capacitor/core/dist/esm/web/local-notifications.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LocalNotificationsPluginWeb", function() { return _web_local_notifications__WEBPACK_IMPORTED_MODULE_10__["LocalNotificationsPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "LocalNotifications", function() { return _web_local_notifications__WEBPACK_IMPORTED_MODULE_10__["LocalNotifications"]; }); - -/* harmony import */ var _web_share__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./web/share */ "./node_modules/@capacitor/core/dist/esm/web/share.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SharePluginWeb", function() { return _web_share__WEBPACK_IMPORTED_MODULE_11__["SharePluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Share", function() { return _web_share__WEBPACK_IMPORTED_MODULE_11__["Share"]; }); - -/* harmony import */ var _web_modals__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ./web/modals */ "./node_modules/@capacitor/core/dist/esm/web/modals.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ModalsPluginWeb", function() { return _web_modals__WEBPACK_IMPORTED_MODULE_12__["ModalsPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Modals", function() { return _web_modals__WEBPACK_IMPORTED_MODULE_12__["Modals"]; }); - -/* harmony import */ var _web_motion__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ./web/motion */ "./node_modules/@capacitor/core/dist/esm/web/motion.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "MotionPluginWeb", function() { return _web_motion__WEBPACK_IMPORTED_MODULE_13__["MotionPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Motion", function() { return _web_motion__WEBPACK_IMPORTED_MODULE_13__["Motion"]; }); - -/* harmony import */ var _web_network__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ./web/network */ "./node_modules/@capacitor/core/dist/esm/web/network.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "NetworkPluginWeb", function() { return _web_network__WEBPACK_IMPORTED_MODULE_14__["NetworkPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Network", function() { return _web_network__WEBPACK_IMPORTED_MODULE_14__["Network"]; }); - -/* harmony import */ var _web_permissions__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__(/*! ./web/permissions */ "./node_modules/@capacitor/core/dist/esm/web/permissions.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "PermissionsPluginWeb", function() { return _web_permissions__WEBPACK_IMPORTED_MODULE_15__["PermissionsPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Permissions", function() { return _web_permissions__WEBPACK_IMPORTED_MODULE_15__["Permissions"]; }); - -/* harmony import */ var _web_splash_screen__WEBPACK_IMPORTED_MODULE_16__ = __webpack_require__(/*! ./web/splash-screen */ "./node_modules/@capacitor/core/dist/esm/web/splash-screen.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SplashScreenPluginWeb", function() { return _web_splash_screen__WEBPACK_IMPORTED_MODULE_16__["SplashScreenPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "SplashScreen", function() { return _web_splash_screen__WEBPACK_IMPORTED_MODULE_16__["SplashScreen"]; }); - -/* harmony import */ var _web_storage__WEBPACK_IMPORTED_MODULE_17__ = __webpack_require__(/*! ./web/storage */ "./node_modules/@capacitor/core/dist/esm/web/storage.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "StoragePluginWeb", function() { return _web_storage__WEBPACK_IMPORTED_MODULE_17__["StoragePluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Storage", function() { return _web_storage__WEBPACK_IMPORTED_MODULE_17__["Storage"]; }); - -/* harmony import */ var _web_toast__WEBPACK_IMPORTED_MODULE_18__ = __webpack_require__(/*! ./web/toast */ "./node_modules/@capacitor/core/dist/esm/web/toast.js"); -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "ToastPluginWeb", function() { return _web_toast__WEBPACK_IMPORTED_MODULE_18__["ToastPluginWeb"]; }); - -/* harmony reexport (safe) */ __webpack_require__.d(__webpack_exports__, "Toast", function() { return _web_toast__WEBPACK_IMPORTED_MODULE_18__["Toast"]; }); - - - - - - - - - - - - - - - - - - - - -Object(_web_index__WEBPACK_IMPORTED_MODULE_1__["mergeWebPlugins"])(_global__WEBPACK_IMPORTED_MODULE_0__["Plugins"]); -var registerWebPlugin = function (plugin) { - Object(_web_index__WEBPACK_IMPORTED_MODULE_1__["mergeWebPlugin"])(_global__WEBPACK_IMPORTED_MODULE_0__["Plugins"], plugin); -}; -//# sourceMappingURL=web-plugins.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web-runtime.js": -/*!**************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web-runtime.js ***! - \**************************************************************/ -/*! exports provided: CapacitorWeb */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CapacitorWeb", function() { return CapacitorWeb; }); -var CapacitorWeb = /** @class */ (function () { - function CapacitorWeb() { - var _this = this; - this.platform = 'web'; - this.isNative = false; - // Need to assign here to avoid having to define every plugin but still - // get the typed benefits of the provided plugins in PluginRegistry - this.Plugins = {}; - // Gracefully degrade in non-Proxy supporting engines, e.g. IE11. This - // effectively means that trying to access an unavailable plugin will - // locally throw, but this is still better than throwing a syntax error. - if (typeof Proxy !== 'undefined') { - // Build a proxy for the Plugins object that returns the "Noop Plugin" - // if a plugin isn't available - this.Plugins = new Proxy(this.Plugins, { - get: function (target, prop) { - if (typeof target[prop] === 'undefined') { - var thisRef_1 = _this; - return new Proxy({}, { - get: function (_target, _prop) { - if (typeof _target[_prop] === 'undefined') { - return thisRef_1.pluginMethodNoop.bind(thisRef_1, _target, _prop, prop); - } - else { - return _target[_prop]; - } - } - }); - } - else { - return target[prop]; - } - } - }); - } - } - CapacitorWeb.prototype.pluginMethodNoop = function (_target, _prop, pluginName) { - return Promise.reject(pluginName + " does not have web implementation."); - }; - CapacitorWeb.prototype.getPlatform = function () { - return this.platform; - }; - CapacitorWeb.prototype.isPluginAvailable = function (name) { - return this.Plugins.hasOwnProperty(name); - }; - CapacitorWeb.prototype.convertFileSrc = function (filePath) { - return filePath; - }; - CapacitorWeb.prototype.handleError = function (e) { - console.error(e); - }; - return CapacitorWeb; -}()); - -//# sourceMappingURL=web-runtime.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/accessibility.js": -/*!********************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/accessibility.js ***! - \********************************************************************/ -/*! exports provided: AccessibilityPluginWeb, Accessibility */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AccessibilityPluginWeb", function() { return AccessibilityPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Accessibility", function() { return Accessibility; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var AccessibilityPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(AccessibilityPluginWeb, _super); - function AccessibilityPluginWeb() { - return _super.call(this, { - name: 'Accessibility', - platforms: ['web'] - }) || this; - } - AccessibilityPluginWeb.prototype.isScreenReaderEnabled = function () { - throw new Error('Feature not available in the browser'); - }; - AccessibilityPluginWeb.prototype.speak = function (options) { - if (!('speechSynthesis' in window)) { - return Promise.reject('Browser does not support the Speech Synthesis API'); - } - var utterance = new SpeechSynthesisUtterance(options.value); - if (options.language) { - utterance.lang = options.language; - } - window.speechSynthesis.speak(utterance); - return Promise.resolve(); - }; - return AccessibilityPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Accessibility = new AccessibilityPluginWeb(); - -//# sourceMappingURL=accessibility.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/app.js": -/*!**********************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/app.js ***! - \**********************************************************/ -/*! exports provided: AppPluginWeb, App */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppPluginWeb", function() { return AppPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "App", function() { return App; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var AppPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(AppPluginWeb, _super); - function AppPluginWeb() { - var _this = _super.call(this, { - name: 'App', - platforms: ['web'] - }) || this; - if (typeof document !== 'undefined') { - document.addEventListener('visibilitychange', _this.handleVisibilityChange.bind(_this), false); - } - return _this; - } - AppPluginWeb.prototype.exitApp = function () { - throw new Error('Method not implemented.'); - }; - AppPluginWeb.prototype.canOpenUrl = function (_options) { - return Promise.resolve({ value: true }); - }; - AppPluginWeb.prototype.openUrl = function (_options) { - return Promise.resolve({ completed: true }); - }; - AppPluginWeb.prototype.getLaunchUrl = function () { - return Promise.resolve({ url: '' }); - }; - AppPluginWeb.prototype.getState = function () { - return Promise.resolve({ isActive: document.hidden !== true }); - }; - AppPluginWeb.prototype.handleVisibilityChange = function () { - var data = { - isActive: document.hidden !== true - }; - this.notifyListeners('appStateChange', data); - }; - return AppPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var App = new AppPluginWeb(); - -//# sourceMappingURL=app.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/browser.js": -/*!**************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/browser.js ***! - \**************************************************************/ -/*! exports provided: BrowserPluginWeb, Browser */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "BrowserPluginWeb", function() { return BrowserPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Browser", function() { return Browser; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var BrowserPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(BrowserPluginWeb, _super); - function BrowserPluginWeb() { - return _super.call(this, { - name: 'Browser', - platforms: ['web'] - }) || this; - } - BrowserPluginWeb.prototype.open = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - this._lastWindow = window.open(options.url, options.windowName || '_blank'); - return [2 /*return*/, Promise.resolve()]; - }); - }); - }; - BrowserPluginWeb.prototype.prefetch = function (_options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - // Does nothing - return [2 /*return*/, Promise.resolve()]; - }); - }); - }; - BrowserPluginWeb.prototype.close = function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - this._lastWindow && this._lastWindow.close(); - return [2 /*return*/, Promise.resolve()]; - }); - }); - }; - return BrowserPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Browser = new BrowserPluginWeb(); - -//# sourceMappingURL=browser.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/camera.js": -/*!*************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/camera.js ***! - \*************************************************************/ -/*! exports provided: CameraPluginWeb, Camera */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "CameraPluginWeb", function() { return CameraPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Camera", function() { return Camera; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); -/* harmony import */ var _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core-plugin-definitions */ "./node_modules/@capacitor/core/dist/esm/core-plugin-definitions.js"); - - - -var CameraPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(CameraPluginWeb, _super); - function CameraPluginWeb() { - return _super.call(this, { - name: 'Camera', - platforms: ['web'] - }) || this; - } - CameraPluginWeb.prototype.getPhoto = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var _this = this; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - return [2 /*return*/, new Promise(function (resolve, reject) { return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(_this, void 0, void 0, function () { - var cameraModal_1, e_1; - var _this = this; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - if (!options.webUseInput) return [3 /*break*/, 1]; - this.fileInputExperience(options, resolve); - return [3 /*break*/, 7]; - case 1: - if (!customElements.get('pwa-camera-modal')) return [3 /*break*/, 6]; - cameraModal_1 = document.createElement('pwa-camera-modal'); - document.body.appendChild(cameraModal_1); - _a.label = 2; - case 2: - _a.trys.push([2, 4, , 5]); - return [4 /*yield*/, cameraModal_1.componentOnReady()]; - case 3: - _a.sent(); - cameraModal_1.addEventListener('onPhoto', function (e) { return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(_this, void 0, void 0, function () { - var photo, _a; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_b) { - switch (_b.label) { - case 0: - photo = e.detail; - if (!(photo === null)) return [3 /*break*/, 1]; - reject('User cancelled photos app'); - return [3 /*break*/, 4]; - case 1: - if (!(photo instanceof Error)) return [3 /*break*/, 2]; - reject(photo.message); - return [3 /*break*/, 4]; - case 2: - _a = resolve; - return [4 /*yield*/, this._getCameraPhoto(photo, options)]; - case 3: - _a.apply(void 0, [_b.sent()]); - _b.label = 4; - case 4: - cameraModal_1.dismiss(); - document.body.removeChild(cameraModal_1); - return [2 /*return*/]; - } - }); - }); }); - cameraModal_1.present(); - return [3 /*break*/, 5]; - case 4: - e_1 = _a.sent(); - this.fileInputExperience(options, resolve); - return [3 /*break*/, 5]; - case 5: return [3 /*break*/, 7]; - case 6: - console.error("Unable to load PWA Element 'pwa-camera-modal'. See the docs: https://capacitorjs.com/docs/pwa-elements."); - this.fileInputExperience(options, resolve); - _a.label = 7; - case 7: return [2 /*return*/]; - } - }); - }); })]; - }); - }); - }; - CameraPluginWeb.prototype.fileInputExperience = function (options, resolve) { - var input = document.querySelector('#_capacitor-camera-input'); - var cleanup = function () { - input.parentNode && input.parentNode.removeChild(input); - }; - if (!input) { - input = document.createElement('input'); - input.id = '_capacitor-camera-input'; - input.type = 'file'; - document.body.appendChild(input); - } - input.accept = 'image/*'; - input.capture = true; - if (options.source === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraSource"].Photos || options.source === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraSource"].Prompt) { - input.removeAttribute('capture'); - } - else if (options.direction === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraDirection"].Front) { - input.capture = 'user'; - } - else if (options.direction === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraDirection"].Rear) { - input.capture = 'environment'; - } - input.addEventListener('change', function (_e) { - var file = input.files[0]; - var format = 'jpeg'; - if (file.type === 'image/png') { - format = 'png'; - } - else if (file.type === 'image/gif') { - format = 'gif'; - } - if (options.resultType === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraResultType"].DataUrl || options.resultType === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraResultType"].Base64) { - var reader_1 = new FileReader(); - reader_1.addEventListener('load', function () { - if (options.resultType === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraResultType"].DataUrl) { - resolve({ - dataUrl: reader_1.result, - format: format - }); - } - else if (options.resultType === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraResultType"].Base64) { - var b64 = reader_1.result.split(',')[1]; - resolve({ - base64String: b64, - format: format - }); - } - cleanup(); - }); - reader_1.readAsDataURL(file); - } - else { - resolve({ - webPath: URL.createObjectURL(file), - format: format - }); - cleanup(); - } - }); - input.click(); - }; - CameraPluginWeb.prototype._getCameraPhoto = function (photo, options) { - return new Promise(function (resolve, reject) { - var reader = new FileReader(); - var format = photo.type.split('/')[1]; - if (options.resultType === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraResultType"].Uri) { - resolve({ - webPath: URL.createObjectURL(photo), - format: format - }); - } - else { - reader.readAsDataURL(photo); - reader.onloadend = function () { - var r = reader.result; - if (options.resultType === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["CameraResultType"].DataUrl) { - resolve({ - dataUrl: r, - format: format - }); - } - else { - resolve({ - base64String: r.split(',')[1], - format: format - }); - } - }; - reader.onerror = function (e) { - reject(e); - }; - } - }); - }; - return CameraPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Camera = new CameraPluginWeb(); - -//# sourceMappingURL=camera.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/clipboard.js": -/*!****************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/clipboard.js ***! - \****************************************************************/ -/*! exports provided: ClipboardPluginWeb, Clipboard */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ClipboardPluginWeb", function() { return ClipboardPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Clipboard", function() { return Clipboard; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var ClipboardPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(ClipboardPluginWeb, _super); - function ClipboardPluginWeb() { - return _super.call(this, { - name: 'Clipboard', - platforms: ['web'] - }) || this; - } - ClipboardPluginWeb.prototype.write = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var blob, clipboardItemInput, err_1; - var _a; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_b) { - switch (_b.label) { - case 0: - if (!navigator.clipboard) { - return [2 /*return*/, Promise.reject('Clipboard API not available in this browser')]; - } - if (!(options.string !== undefined || options.url)) return [3 /*break*/, 2]; - if (!navigator.clipboard.writeText) { - return [2 /*return*/, Promise.reject('Writting to clipboard not supported in this browser')]; - } - return [4 /*yield*/, navigator.clipboard.writeText(options.string !== undefined ? options.string : options.url)]; - case 1: - _b.sent(); - return [3 /*break*/, 10]; - case 2: - if (!options.image) return [3 /*break*/, 9]; - if (!navigator.clipboard.write) { - return [2 /*return*/, Promise.reject('Setting images not supported in this browser')]; - } - _b.label = 3; - case 3: - _b.trys.push([3, 7, , 8]); - return [4 /*yield*/, fetch(options.image)]; - case 4: return [4 /*yield*/, (_b.sent()).blob()]; - case 5: - blob = _b.sent(); - clipboardItemInput = new ClipboardItem((_a = {}, _a[blob.type] = blob, _a)); - return [4 /*yield*/, navigator.clipboard.write([clipboardItemInput])]; - case 6: - _b.sent(); - return [3 /*break*/, 8]; - case 7: - err_1 = _b.sent(); - return [2 /*return*/, Promise.reject('Failed to write image')]; - case 8: return [3 /*break*/, 10]; - case 9: return [2 /*return*/, Promise.reject('Nothing to write')]; - case 10: return [2 /*return*/, Promise.resolve()]; - } - }); - }); - }; - ClipboardPluginWeb.prototype.read = function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var clipboardItems, type, clipboardBlob, data, err_2; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - if (!navigator.clipboard) { - return [2 /*return*/, Promise.reject('Clipboard API not available in this browser')]; - } - if (!!navigator.clipboard.read) return [3 /*break*/, 1]; - if (!navigator.clipboard.readText) { - return [2 /*return*/, Promise.reject('Reading from clipboard not supported in this browser')]; - } - return [2 /*return*/, this.readText()]; - case 1: - _a.trys.push([1, 5, , 6]); - return [4 /*yield*/, navigator.clipboard.read()]; - case 2: - clipboardItems = _a.sent(); - type = clipboardItems[0].types[0]; - return [4 /*yield*/, clipboardItems[0].getType(type)]; - case 3: - clipboardBlob = _a.sent(); - return [4 /*yield*/, this._getBlobData(clipboardBlob, type)]; - case 4: - data = _a.sent(); - return [2 /*return*/, Promise.resolve({ value: data, type: type })]; - case 5: - err_2 = _a.sent(); - return [2 /*return*/, this.readText()]; - case 6: return [2 /*return*/]; - } - }); - }); - }; - ClipboardPluginWeb.prototype.readText = function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var text; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, navigator.clipboard.readText()]; - case 1: - text = _a.sent(); - return [2 /*return*/, Promise.resolve({ value: text, type: 'text/plain' })]; - } - }); - }); - }; - ClipboardPluginWeb.prototype._getBlobData = function (clipboardBlob, type) { - return new Promise(function (resolve, reject) { - var reader = new FileReader(); - if (type.includes('image')) { - reader.readAsDataURL(clipboardBlob); - } - else { - reader.readAsText(clipboardBlob); - } - reader.onloadend = function () { - var r = reader.result; - resolve(r); - }; - reader.onerror = function (e) { - reject(e); - }; - }); - }; - return ClipboardPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Clipboard = new ClipboardPluginWeb(); - -//# sourceMappingURL=clipboard.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/device.js": -/*!*************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/device.js ***! - \*************************************************************/ -/*! exports provided: DevicePluginWeb, Device */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DevicePluginWeb", function() { return DevicePluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Device", function() { return Device; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util */ "./node_modules/@capacitor/core/dist/esm/util.js"); - - - -var DevicePluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(DevicePluginWeb, _super); - function DevicePluginWeb() { - return _super.call(this, { - name: 'Device', - platforms: ['web'] - }) || this; - } - DevicePluginWeb.prototype.getInfo = function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var ua, uaFields; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - ua = navigator.userAgent; - uaFields = this.parseUa(ua); - return [2 /*return*/, Promise.resolve({ - model: uaFields.model, - platform: 'web', - appVersion: '', - appBuild: '', - appId: '', - appName: '', - operatingSystem: uaFields.operatingSystem, - osVersion: uaFields.osVersion, - manufacturer: navigator.vendor, - isVirtual: false, - uuid: this.getUid() - })]; - }); - }); - }; - DevicePluginWeb.prototype.getBatteryInfo = function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var battery, e_1; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - battery = {}; - _a.label = 1; - case 1: - _a.trys.push([1, 3, , 4]); - return [4 /*yield*/, navigator.getBattery()]; - case 2: - battery = _a.sent(); - return [3 /*break*/, 4]; - case 3: - e_1 = _a.sent(); - return [3 /*break*/, 4]; - case 4: return [2 /*return*/, Promise.resolve({ - batteryLevel: battery.level, - isCharging: battery.charging - })]; - } - }); - }); - }; - DevicePluginWeb.prototype.getLanguageCode = function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - return [2 /*return*/, { - value: navigator.language - }]; - }); - }); - }; - DevicePluginWeb.prototype.parseUa = function (_ua) { - var uaFields = {}; - var start = _ua.indexOf('(') + 1; - var end = _ua.indexOf(') AppleWebKit'); - if (_ua.indexOf(') Gecko') !== -1) { - end = _ua.indexOf(') Gecko'); - } - var fields = _ua.substring(start, end); - if (_ua.indexOf('Android') !== -1) { - uaFields.model = fields.replace('; wv', '').split('; ').pop().split(' Build')[0]; - uaFields.osVersion = fields.split('; ')[1]; - } - else { - uaFields.model = fields.split('; ')[0]; - if (navigator.oscpu) { - uaFields.osVersion = navigator.oscpu; - } - else { - if (_ua.indexOf('Windows') !== -1) { - uaFields.osVersion = fields; - } - else { - var lastParts = fields.split('; ').pop().replace(' like Mac OS X', '').split(' '); - uaFields.osVersion = lastParts[lastParts.length - 1].replace(/_/g, '.'); - } - } - } - if (/android/i.test(_ua)) { - uaFields.operatingSystem = 'android'; - } - else if (/iPad|iPhone|iPod/.test(_ua) && !window.MSStream) { - uaFields.operatingSystem = 'ios'; - } - else if (/Win/.test(_ua)) { - uaFields.operatingSystem = 'windows'; - } - else if (/Mac/i.test(_ua)) { - uaFields.operatingSystem = 'mac'; - } - else { - uaFields.operatingSystem = 'unknown'; - } - return uaFields; - }; - DevicePluginWeb.prototype.getUid = function () { - var uid = window.localStorage.getItem('_capuid'); - if (uid) { - return uid; - } - uid = Object(_util__WEBPACK_IMPORTED_MODULE_2__["uuid4"])(); - window.localStorage.setItem('_capuid', uid); - return uid; - }; - return DevicePluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Device = new DevicePluginWeb(); - -//# sourceMappingURL=device.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/filesystem.js": -/*!*****************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/filesystem.js ***! - \*****************************************************************/ -/*! exports provided: FilesystemPluginWeb, Filesystem */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "FilesystemPluginWeb", function() { return FilesystemPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Filesystem", function() { return Filesystem; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); -/* harmony import */ var _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core-plugin-definitions */ "./node_modules/@capacitor/core/dist/esm/core-plugin-definitions.js"); - - - -var FilesystemPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(FilesystemPluginWeb, _super); - function FilesystemPluginWeb() { - var _this = _super.call(this, { - name: 'Filesystem', - platforms: ['web'] - }) || this; - _this.DEFAULT_DIRECTORY = _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["FilesystemDirectory"].Data; - _this.DB_VERSION = 1; - _this.DB_NAME = 'Disc'; - _this._writeCmds = ['add', 'put', 'delete']; - return _this; - } - FilesystemPluginWeb.prototype.initDb = function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var _this = this; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - if (this._db !== undefined) { - return [2 /*return*/, this._db]; - } - if (!('indexedDB' in window)) { - throw new Error('This browser doesn\'t support IndexedDB'); - } - return [2 /*return*/, new Promise(function (resolve, reject) { - var request = indexedDB.open(_this.DB_NAME, _this.DB_VERSION); - request.onupgradeneeded = FilesystemPluginWeb.doUpgrade; - request.onsuccess = function () { - _this._db = request.result; - resolve(request.result); - }; - request.onerror = function () { return reject(request.error); }; - request.onblocked = function () { - console.warn('db blocked'); - }; - })]; - }); - }); - }; - FilesystemPluginWeb.doUpgrade = function (event) { - var eventTarget = event.target; - var db = eventTarget.result; - switch (event.oldVersion) { - case 0: - case 1: - default: - if (db.objectStoreNames.contains('FileStorage')) { - db.deleteObjectStore('FileStorage'); - } - var store = db.createObjectStore('FileStorage', { keyPath: 'path' }); - store.createIndex('by_folder', 'folder'); - } - }; - FilesystemPluginWeb.prototype.dbRequest = function (cmd, args) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var readFlag; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly'; - return [2 /*return*/, this.initDb() - .then(function (conn) { - return new Promise(function (resolve, reject) { - var tx = conn.transaction(['FileStorage'], readFlag); - var store = tx.objectStore('FileStorage'); - var req = store[cmd].apply(store, args); - req.onsuccess = function () { return resolve(req.result); }; - req.onerror = function () { return reject(req.error); }; - }); - })]; - }); - }); - }; - FilesystemPluginWeb.prototype.dbIndexRequest = function (indexName, cmd, args) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var readFlag; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - readFlag = this._writeCmds.indexOf(cmd) !== -1 ? 'readwrite' : 'readonly'; - return [2 /*return*/, this.initDb() - .then(function (conn) { - return new Promise(function (resolve, reject) { - var tx = conn.transaction(['FileStorage'], readFlag); - var store = tx.objectStore('FileStorage'); - var index = store.index(indexName); - var req = index[cmd].apply(index, args); - req.onsuccess = function () { return resolve(req.result); }; - req.onerror = function () { return reject(req.error); }; - }); - })]; - }); - }); - }; - FilesystemPluginWeb.prototype.getPath = function (directory, uriPath) { - directory = directory || this.DEFAULT_DIRECTORY; - var cleanedUriPath = uriPath !== undefined ? uriPath.replace(/^[/]+|[/]+$/g, '') : ''; - var fsPath = '/' + directory; - if (uriPath !== '') - fsPath += '/' + cleanedUriPath; - return fsPath; - }; - FilesystemPluginWeb.prototype.clear = function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var conn, tx, store; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: return [4 /*yield*/, this.initDb()]; - case 1: - conn = _a.sent(); - tx = conn.transaction(['FileStorage'], 'readwrite'); - store = tx.objectStore('FileStorage'); - store.clear(); - return [2 /*return*/, {}]; - } - }); - }); - }; - /** - * Read a file from disk - * @param options options for the file read - * @return a promise that resolves with the read file data result - */ - FilesystemPluginWeb.prototype.readFile = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, entry; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - path = this.getPath(options.directory, options.path); - return [4 /*yield*/, this.dbRequest('get', [path])]; - case 1: - entry = _a.sent(); - if (entry === undefined) - throw Error('File does not exist.'); - return [2 /*return*/, { data: entry.content }]; - } - }); - }); - }; - /** - * Write a file to disk in the specified location on device - * @param options options for the file write - * @return a promise that resolves with the file write result - */ - FilesystemPluginWeb.prototype.writeFile = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, data, doRecursive, occupiedEntry, encoding, parentPath, parentEntry, subDirIndex, parentArgPath, now, pathObj; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - path = this.getPath(options.directory, options.path); - data = options.data; - doRecursive = options.recursive; - return [4 /*yield*/, this.dbRequest('get', [path])]; - case 1: - occupiedEntry = _a.sent(); - if (occupiedEntry && occupiedEntry.type === 'directory') - throw ('The supplied path is a directory.'); - encoding = options.encoding; - parentPath = path.substr(0, path.lastIndexOf('/')); - return [4 /*yield*/, this.dbRequest('get', [parentPath])]; - case 2: - parentEntry = _a.sent(); - if (!(parentEntry === undefined)) return [3 /*break*/, 4]; - subDirIndex = parentPath.indexOf('/', 1); - if (!(subDirIndex !== -1)) return [3 /*break*/, 4]; - parentArgPath = parentPath.substr(subDirIndex); - return [4 /*yield*/, this.mkdir({ path: parentArgPath, directory: options.directory, recursive: doRecursive })]; - case 3: - _a.sent(); - _a.label = 4; - case 4: - now = Date.now(); - pathObj = { - path: path, - folder: parentPath, - type: 'file', - size: data.length, - ctime: now, - mtime: now, - content: !encoding && data.indexOf(',') >= 0 ? data.split(',')[1] : data, - }; - return [4 /*yield*/, this.dbRequest('put', [pathObj])]; - case 5: - _a.sent(); - return [2 /*return*/, { - uri: pathObj.path - }]; - } - }); - }); - }; - /** - * Append to a file on disk in the specified location on device - * @param options options for the file append - * @return a promise that resolves with the file write result - */ - FilesystemPluginWeb.prototype.appendFile = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, data, parentPath, now, ctime, occupiedEntry, parentEntry, parentArgPathIndex, parentArgPath, pathObj; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - path = this.getPath(options.directory, options.path); - data = options.data; - parentPath = path.substr(0, path.lastIndexOf('/')); - now = Date.now(); - ctime = now; - return [4 /*yield*/, this.dbRequest('get', [path])]; - case 1: - occupiedEntry = _a.sent(); - if (occupiedEntry && occupiedEntry.type === 'directory') - throw ('The supplied path is a directory.'); - return [4 /*yield*/, this.dbRequest('get', [parentPath])]; - case 2: - parentEntry = _a.sent(); - if (!(parentEntry === undefined)) return [3 /*break*/, 4]; - parentArgPathIndex = parentPath.indexOf('/', 1); - parentArgPath = parentArgPathIndex !== -1 ? parentPath.substr(parentArgPathIndex) : '/'; - return [4 /*yield*/, this.mkdir({ path: parentArgPath, directory: options.directory, recursive: true })]; - case 3: - _a.sent(); - _a.label = 4; - case 4: - if (occupiedEntry !== undefined) { - data = occupiedEntry.content + data; - ctime = occupiedEntry.ctime; - } - pathObj = { - path: path, - folder: parentPath, - type: 'file', - size: data.length, - ctime: ctime, - mtime: now, - content: data - }; - return [4 /*yield*/, this.dbRequest('put', [pathObj])]; - case 5: - _a.sent(); - return [2 /*return*/, {}]; - } - }); - }); - }; - /** - * Delete a file from disk - * @param options options for the file delete - * @return a promise that resolves with the deleted file data result - */ - FilesystemPluginWeb.prototype.deleteFile = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, entry, entries; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - path = this.getPath(options.directory, options.path); - return [4 /*yield*/, this.dbRequest('get', [path])]; - case 1: - entry = _a.sent(); - if (entry === undefined) - throw Error('File does not exist.'); - return [4 /*yield*/, this.dbIndexRequest('by_folder', 'getAllKeys', [IDBKeyRange.only(path)])]; - case 2: - entries = _a.sent(); - if (entries.length !== 0) - throw Error('Folder is not empty.'); - return [4 /*yield*/, this.dbRequest('delete', [path])]; - case 3: - _a.sent(); - return [2 /*return*/, {}]; - } - }); - }); - }; - /** - * Create a directory. - * @param options options for the mkdir - * @return a promise that resolves with the mkdir result - */ - FilesystemPluginWeb.prototype.mkdir = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, doRecursive, parentPath, depth, parentEntry, occupiedEntry, parentArgPath, now, pathObj; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - path = this.getPath(options.directory, options.path); - doRecursive = options.recursive; - parentPath = path.substr(0, path.lastIndexOf('/')); - depth = (path.match(/\//g) || []).length; - return [4 /*yield*/, this.dbRequest('get', [parentPath])]; - case 1: - parentEntry = _a.sent(); - return [4 /*yield*/, this.dbRequest('get', [path])]; - case 2: - occupiedEntry = _a.sent(); - if (depth === 1) - throw Error('Cannot create Root directory'); - if (occupiedEntry !== undefined) - throw Error('Current directory does already exist.'); - if (!doRecursive && depth !== 2 && parentEntry === undefined) - throw Error('Parent directory must exist'); - if (!(doRecursive && depth !== 2 && parentEntry === undefined)) return [3 /*break*/, 4]; - parentArgPath = parentPath.substr(parentPath.indexOf('/', 1)); - return [4 /*yield*/, this.mkdir({ - path: parentArgPath, - directory: options.directory, - recursive: doRecursive - })]; - case 3: - _a.sent(); - _a.label = 4; - case 4: - now = Date.now(); - pathObj = { path: path, folder: parentPath, type: 'directory', size: 0, ctime: now, mtime: now }; - return [4 /*yield*/, this.dbRequest('put', [pathObj])]; - case 5: - _a.sent(); - return [2 /*return*/, {}]; - } - }); - }); - }; - /** - * Remove a directory - * @param options the options for the directory remove - */ - FilesystemPluginWeb.prototype.rmdir = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, directory, recursive, fullPath, entry, readDirResult, _i, _a, entry_1, entryPath, entryObj; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_b) { - switch (_b.label) { - case 0: - path = options.path, directory = options.directory, recursive = options.recursive; - fullPath = this.getPath(directory, path); - return [4 /*yield*/, this.dbRequest('get', [fullPath])]; - case 1: - entry = _b.sent(); - if (entry === undefined) - throw Error('Folder does not exist.'); - if (entry.type !== 'directory') - throw Error('Requested path is not a directory'); - return [4 /*yield*/, this.readdir({ path: path, directory: directory })]; - case 2: - readDirResult = _b.sent(); - if (readDirResult.files.length !== 0 && !recursive) - throw Error('Folder is not empty'); - _i = 0, _a = readDirResult.files; - _b.label = 3; - case 3: - if (!(_i < _a.length)) return [3 /*break*/, 9]; - entry_1 = _a[_i]; - entryPath = path + "/" + entry_1; - return [4 /*yield*/, this.stat({ path: entryPath, directory: directory })]; - case 4: - entryObj = _b.sent(); - if (!(entryObj.type === 'file')) return [3 /*break*/, 6]; - return [4 /*yield*/, this.deleteFile({ path: entryPath, directory: directory })]; - case 5: - _b.sent(); - return [3 /*break*/, 8]; - case 6: return [4 /*yield*/, this.rmdir({ path: entryPath, directory: directory, recursive: recursive })]; - case 7: - _b.sent(); - _b.label = 8; - case 8: - _i++; - return [3 /*break*/, 3]; - case 9: return [4 /*yield*/, this.dbRequest('delete', [fullPath])]; - case 10: - _b.sent(); - return [2 /*return*/, {}]; - } - }); - }); - }; - /** - * Return a list of files from the directory (not recursive) - * @param options the options for the readdir operation - * @return a promise that resolves with the readdir directory listing result - */ - FilesystemPluginWeb.prototype.readdir = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, entry, entries, names; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - path = this.getPath(options.directory, options.path); - return [4 /*yield*/, this.dbRequest('get', [path])]; - case 1: - entry = _a.sent(); - if (options.path !== '' && entry === undefined) - throw Error('Folder does not exist.'); - return [4 /*yield*/, this.dbIndexRequest('by_folder', 'getAllKeys', [IDBKeyRange.only(path)])]; - case 2: - entries = _a.sent(); - names = entries.map(function (e) { - return e.substring(path.length + 1); - }); - return [2 /*return*/, { files: names }]; - } - }); - }); - }; - /** - * Return full File URI for a path and directory - * @param options the options for the stat operation - * @return a promise that resolves with the file stat result - */ - FilesystemPluginWeb.prototype.getUri = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, entry; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - path = this.getPath(options.directory, options.path); - return [4 /*yield*/, this.dbRequest('get', [path])]; - case 1: - entry = _a.sent(); - if (!(entry === undefined)) return [3 /*break*/, 3]; - return [4 /*yield*/, this.dbRequest('get', [path + '/'])]; - case 2: - entry = (_a.sent()); - _a.label = 3; - case 3: - if (entry === undefined) - throw Error('Entry does not exist.'); - return [2 /*return*/, { - uri: entry.path - }]; - } - }); - }); - }; - /** - * Return data about a file - * @param options the options for the stat operation - * @return a promise that resolves with the file stat result - */ - FilesystemPluginWeb.prototype.stat = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var path, entry; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - path = this.getPath(options.directory, options.path); - return [4 /*yield*/, this.dbRequest('get', [path])]; - case 1: - entry = _a.sent(); - if (!(entry === undefined)) return [3 /*break*/, 3]; - return [4 /*yield*/, this.dbRequest('get', [path + '/'])]; - case 2: - entry = (_a.sent()); - _a.label = 3; - case 3: - if (entry === undefined) - throw Error('Entry does not exist.'); - return [2 /*return*/, { - type: entry.type, - size: entry.size, - ctime: entry.ctime, - mtime: entry.mtime, - uri: entry.path - }]; - } - }); - }); - }; - /** - * Rename a file or directory - * @param options the options for the rename operation - * @return a promise that resolves with the rename result - */ - FilesystemPluginWeb.prototype.rename = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - return [2 /*return*/, this._copy(options, true)]; - }); - }); - }; - /** - * Copy a file or directory - * @param options the options for the copy operation - * @return a promise that resolves with the copy result - */ - FilesystemPluginWeb.prototype.copy = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - return [2 /*return*/, this._copy(options, false)]; - }); - }); - }; - /** - * Function that can perform a copy or a rename - * @param options the options for the rename operation - * @param doRename whether to perform a rename or copy operation - * @return a promise that resolves with the result - */ - FilesystemPluginWeb.prototype._copy = function (options, doRename) { - if (doRename === void 0) { doRename = false; } - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var to, from, fromDirectory, toDirectory, fromPath, toPath, toObj, e_1, toPathComponents, toPath_1, toParentDirectory, fromObj, updateTime, _a, file, e_2, contents, _i, contents_1, filename; - var _this = this; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_b) { - switch (_b.label) { - case 0: - to = options.to, from = options.from, fromDirectory = options.directory, toDirectory = options.toDirectory; - if (!to || !from) { - throw Error('Both to and from must be provided'); - } - // If no "to" directory is provided, use the "from" directory - if (!toDirectory) { - toDirectory = fromDirectory; - } - fromPath = this.getPath(fromDirectory, from); - toPath = this.getPath(toDirectory, to); - // Test that the "to" and "from" locations are different - if (fromPath === toPath) { - return [2 /*return*/, {}]; - } - if (toPath.startsWith(fromPath)) { - throw Error('To path cannot contain the from path'); - } - _b.label = 1; - case 1: - _b.trys.push([1, 3, , 6]); - return [4 /*yield*/, this.stat({ - path: to, - directory: toDirectory - })]; - case 2: - toObj = _b.sent(); - return [3 /*break*/, 6]; - case 3: - e_1 = _b.sent(); - toPathComponents = to.split('/'); - toPathComponents.pop(); - toPath_1 = toPathComponents.join('/'); - if (!(toPathComponents.length > 0)) return [3 /*break*/, 5]; - return [4 /*yield*/, this.stat({ - path: toPath_1, - directory: toDirectory, - })]; - case 4: - toParentDirectory = _b.sent(); - if (toParentDirectory.type !== 'directory') { - throw new Error('Parent directory of the to path is a file'); - } - _b.label = 5; - case 5: return [3 /*break*/, 6]; - case 6: - // Cannot overwrite a directory - if (toObj && toObj.type === 'directory') { - throw new Error('Cannot overwrite a directory with a file'); - } - return [4 /*yield*/, this.stat({ - path: from, - directory: fromDirectory, - })]; - case 7: - fromObj = _b.sent(); - updateTime = function (path, ctime, mtime) { return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(_this, void 0, void 0, function () { - var fullPath, entry; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - fullPath = this.getPath(toDirectory, path); - return [4 /*yield*/, this.dbRequest('get', [fullPath])]; - case 1: - entry = _a.sent(); - entry.ctime = ctime; - entry.mtime = mtime; - return [4 /*yield*/, this.dbRequest('put', [entry])]; - case 2: - _a.sent(); - return [2 /*return*/]; - } - }); - }); }; - _a = fromObj.type; - switch (_a) { - case 'file': return [3 /*break*/, 8]; - case 'directory': return [3 /*break*/, 15]; - } - return [3 /*break*/, 28]; - case 8: return [4 /*yield*/, this.readFile({ - path: from, - directory: fromDirectory - })]; - case 9: - file = _b.sent(); - if (!doRename) return [3 /*break*/, 11]; - return [4 /*yield*/, this.deleteFile({ - path: from, - directory: fromDirectory - })]; - case 10: - _b.sent(); - _b.label = 11; - case 11: - // Write the file to the new location - return [4 /*yield*/, this.writeFile({ - path: to, - directory: toDirectory, - data: file.data - })]; - case 12: - // Write the file to the new location - _b.sent(); - if (!doRename) return [3 /*break*/, 14]; - return [4 /*yield*/, updateTime(to, fromObj.ctime, fromObj.mtime)]; - case 13: - _b.sent(); - _b.label = 14; - case 14: - // Resolve promise - return [2 /*return*/, {}]; - case 15: - if (toObj) { - throw Error('Cannot move a directory over an existing object'); - } - _b.label = 16; - case 16: - _b.trys.push([16, 20, , 21]); - // Create the to directory - return [4 /*yield*/, this.mkdir({ - path: to, - directory: toDirectory, - recursive: false, - })]; - case 17: - // Create the to directory - _b.sent(); - if (!doRename) return [3 /*break*/, 19]; - return [4 /*yield*/, updateTime(to, fromObj.ctime, fromObj.mtime)]; - case 18: - _b.sent(); - _b.label = 19; - case 19: return [3 /*break*/, 21]; - case 20: - e_2 = _b.sent(); - return [3 /*break*/, 21]; - case 21: return [4 /*yield*/, this.readdir({ - path: from, - directory: fromDirectory, - })]; - case 22: - contents = (_b.sent()).files; - _i = 0, contents_1 = contents; - _b.label = 23; - case 23: - if (!(_i < contents_1.length)) return [3 /*break*/, 26]; - filename = contents_1[_i]; - // Move item from the from directory to the to directory - return [4 /*yield*/, this._copy({ - from: from + "/" + filename, - to: to + "/" + filename, - directory: fromDirectory, - toDirectory: toDirectory, - }, doRename)]; - case 24: - // Move item from the from directory to the to directory - _b.sent(); - _b.label = 25; - case 25: - _i++; - return [3 /*break*/, 23]; - case 26: - if (!doRename) return [3 /*break*/, 28]; - return [4 /*yield*/, this.rmdir({ - path: from, - directory: fromDirectory - })]; - case 27: - _b.sent(); - _b.label = 28; - case 28: return [2 /*return*/, {}]; - } - }); - }); - }; - FilesystemPluginWeb._debug = true; - return FilesystemPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Filesystem = new FilesystemPluginWeb(); - -//# sourceMappingURL=filesystem.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/geolocation.js": -/*!******************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/geolocation.js ***! - \******************************************************************/ -/*! exports provided: GeolocationPluginWeb, Geolocation */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GeolocationPluginWeb", function() { return GeolocationPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Geolocation", function() { return Geolocation; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); -/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../util */ "./node_modules/@capacitor/core/dist/esm/util.js"); - - - -var GeolocationPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(GeolocationPluginWeb, _super); - function GeolocationPluginWeb() { - return _super.call(this, { - name: 'Geolocation', - platforms: ['web'] - }) || this; - } - GeolocationPluginWeb.prototype.getCurrentPosition = function (options) { - var _this = this; - return new Promise(function (resolve, reject) { - return _this.requestPermissions().then(function (_result) { - window.navigator.geolocation.getCurrentPosition(function (pos) { - resolve(pos); - }, function (err) { - reject(err); - }, Object(_util__WEBPACK_IMPORTED_MODULE_2__["extend"])({ - enableHighAccuracy: true, - timeout: 10000, - maximumAge: 0 - }, options)); - }); - }); - }; - GeolocationPluginWeb.prototype.watchPosition = function (options, callback) { - var id = window.navigator.geolocation.watchPosition(function (pos) { - callback(pos); - }, function (err) { - callback(null, err); - }, Object(_util__WEBPACK_IMPORTED_MODULE_2__["extend"])({ - enableHighAccuracy: true, - timeout: 10000, - maximumAge: 0 - }, options)); - return "" + id; - }; - GeolocationPluginWeb.prototype.clearWatch = function (options) { - window.navigator.geolocation.clearWatch(parseInt(options.id, 10)); - return Promise.resolve(); - }; - return GeolocationPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Geolocation = new GeolocationPluginWeb(); - -//# sourceMappingURL=geolocation.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/index.js": -/*!************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/index.js ***! - \************************************************************/ -/*! exports provided: WebPluginRegistry, WebPlugins, WebPlugin, mergeWebPlugins, mergeWebPlugin */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebPluginRegistry", function() { return WebPluginRegistry; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebPlugins", function() { return WebPlugins; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "WebPlugin", function() { return WebPlugin; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeWebPlugins", function() { return mergeWebPlugins; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "mergeWebPlugin", function() { return mergeWebPlugin; }); -var WebPluginRegistry = /** @class */ (function () { - function WebPluginRegistry() { - this.plugins = {}; - this.loadedPlugins = {}; - } - WebPluginRegistry.prototype.addPlugin = function (plugin) { - this.plugins[plugin.config.name] = plugin; - }; - WebPluginRegistry.prototype.getPlugin = function (name) { - return this.plugins[name]; - }; - WebPluginRegistry.prototype.loadPlugin = function (name) { - var plugin = this.getPlugin(name); - if (!plugin) { - console.error("Unable to load web plugin " + name + ", no such plugin found."); - return; - } - plugin.load(); - }; - WebPluginRegistry.prototype.getPlugins = function () { - var p = []; - for (var name_1 in this.plugins) { - p.push(this.plugins[name_1]); - } - return p; - }; - return WebPluginRegistry; -}()); - -var WebPlugins = new WebPluginRegistry(); - -var WebPlugin = /** @class */ (function () { - function WebPlugin(config, pluginRegistry) { - this.config = config; - this.loaded = false; - this.listeners = {}; - this.windowListeners = {}; - if (!pluginRegistry) { - WebPlugins.addPlugin(this); - } - else { - pluginRegistry.addPlugin(this); - } - } - WebPlugin.prototype.addWindowListener = function (handle) { - window.addEventListener(handle.windowEventName, handle.handler); - handle.registered = true; - }; - WebPlugin.prototype.removeWindowListener = function (handle) { - if (!handle) { - return; - } - window.removeEventListener(handle.windowEventName, handle.handler); - handle.registered = false; - }; - WebPlugin.prototype.addListener = function (eventName, listenerFunc) { - var _this = this; - var listeners = this.listeners[eventName]; - if (!listeners) { - this.listeners[eventName] = []; - } - this.listeners[eventName].push(listenerFunc); - // If we haven't added a window listener for this event and it requires one, - // go ahead and add it - var windowListener = this.windowListeners[eventName]; - if (windowListener && !windowListener.registered) { - this.addWindowListener(windowListener); - } - return { - remove: function () { - _this.removeListener(eventName, listenerFunc); - } - }; - }; - WebPlugin.prototype.removeListener = function (eventName, listenerFunc) { - var listeners = this.listeners[eventName]; - if (!listeners) { - return; - } - var index = listeners.indexOf(listenerFunc); - this.listeners[eventName].splice(index, 1); - // If there are no more listeners for this type of event, - // remove the window listener - if (!this.listeners[eventName].length) { - this.removeWindowListener(this.windowListeners[eventName]); - } - }; - WebPlugin.prototype.removeAllListeners = function () { - this.listeners = {}; - for (var listener in this.windowListeners) { - this.removeWindowListener(this.windowListeners[listener]); - } - this.windowListeners = {}; - }; - WebPlugin.prototype.notifyListeners = function (eventName, data) { - var listeners = this.listeners[eventName]; - if (listeners) { - listeners.forEach(function (listener) { return listener(data); }); - } - }; - WebPlugin.prototype.hasListeners = function (eventName) { - return !!this.listeners[eventName].length; - }; - WebPlugin.prototype.registerWindowListener = function (windowEventName, pluginEventName) { - var _this = this; - this.windowListeners[pluginEventName] = { - registered: false, - windowEventName: windowEventName, - pluginEventName: pluginEventName, - handler: function (event) { - _this.notifyListeners(pluginEventName, event); - } - }; - }; - WebPlugin.prototype.requestPermissions = function () { - if (Capacitor.isNative) { - return Capacitor.nativePromise(this.config.name, 'requestPermissions', {}); - } - else { - return Promise.resolve({ results: [] }); - } - }; - WebPlugin.prototype.load = function () { - this.loaded = true; - }; - return WebPlugin; -}()); - -var shouldMergeWebPlugin = function (plugin) { - return plugin.config.platforms && plugin.config.platforms.indexOf(Capacitor.platform) >= 0; -}; -/** - * For all our known web plugins, merge them into the global plugins - * registry if they aren't already existing. If they don't exist, that - * means there's no existing native implementation for it. - * @param knownPlugins the Capacitor.Plugins global registry. - */ -var mergeWebPlugins = function (knownPlugins) { - var plugins = WebPlugins.getPlugins(); - for (var _i = 0, plugins_1 = plugins; _i < plugins_1.length; _i++) { - var plugin = plugins_1[_i]; - mergeWebPlugin(knownPlugins, plugin); - } -}; -var mergeWebPlugin = function (knownPlugins, plugin) { - // If we already have a plugin registered (meaning it was defined in the native layer), - // then we should only overwrite it if the corresponding web plugin activates on - // a certain platform. For example: Geolocation uses the WebPlugin on Android but not iOS - if (knownPlugins.hasOwnProperty(plugin.config.name) && !shouldMergeWebPlugin(plugin)) { - return; - } - knownPlugins[plugin.config.name] = plugin; -}; -//# sourceMappingURL=index.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/local-notifications.js": -/*!**************************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/local-notifications.js ***! - \**************************************************************************/ -/*! exports provided: LocalNotificationsPluginWeb, LocalNotifications */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LocalNotificationsPluginWeb", function() { return LocalNotificationsPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LocalNotifications", function() { return LocalNotifications; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var LocalNotificationsPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(LocalNotificationsPluginWeb, _super); - function LocalNotificationsPluginWeb() { - var _this = _super.call(this, { - name: 'LocalNotifications', - platforms: ['web'] - }) || this; - _this.pending = []; - return _this; - } - LocalNotificationsPluginWeb.prototype.createChannel = function (channel) { - throw new Error('Feature not available in the browser. ' + channel.id); - }; - LocalNotificationsPluginWeb.prototype.deleteChannel = function (channel) { - throw new Error('Feature not available in the browser. ' + channel.id); - }; - LocalNotificationsPluginWeb.prototype.listChannels = function () { - throw new Error('Feature not available in the browser'); - }; - LocalNotificationsPluginWeb.prototype.sendPending = function () { - var _this = this; - var toRemove = []; - var now = +new Date; - this.pending.forEach(function (localNotification) { - if (localNotification.schedule && localNotification.schedule.at) { - if (+localNotification.schedule.at <= now) { - _this.buildNotification(localNotification); - toRemove.push(localNotification); - } - } - }); - console.log('Sent pending, removing', toRemove); - this.pending = this.pending.filter(function (localNotification) { return !toRemove.find(function (ln) { return ln === localNotification; }); }); - }; - LocalNotificationsPluginWeb.prototype.sendNotification = function (localNotification) { - var _this = this; - var l = localNotification; - if (localNotification.schedule && localNotification.schedule.at) { - var diff = +localNotification.schedule.at - +new Date; - this.pending.push(l); - setTimeout(function () { - _this.sendPending(); - }, diff); - return; - } - this.buildNotification(localNotification); - }; - LocalNotificationsPluginWeb.prototype.buildNotification = function (localNotification) { - var l = localNotification; - return new Notification(l.title, { - body: l.body - }); - }; - LocalNotificationsPluginWeb.prototype.schedule = function (options) { - var _this = this; - var notifications = []; - options.notifications.forEach(function (notification) { - notifications.push(_this.sendNotification(notification)); - }); - return Promise.resolve({ - notifications: options.notifications.map(function (notification) { return { id: '' + notification.id }; }) - }); - }; - LocalNotificationsPluginWeb.prototype.getPending = function () { - return Promise.resolve({ - notifications: this.pending.map(function (localNotification) { - return { - id: '' + localNotification.id - }; - }) - }); - }; - LocalNotificationsPluginWeb.prototype.registerActionTypes = function (_options) { - throw new Error('Method not implemented.'); - }; - LocalNotificationsPluginWeb.prototype.cancel = function (pending) { - console.log('Cancel these', pending); - this.pending = this.pending.filter(function (localNotification) { return !pending.notifications.find(function (ln) { return ln.id === '' + localNotification.id; }); }); - return Promise.resolve(); - }; - LocalNotificationsPluginWeb.prototype.areEnabled = function () { - return Promise.resolve({ - value: Notification.permission === 'granted' - }); - }; - LocalNotificationsPluginWeb.prototype.requestPermission = function () { - return new Promise(function (resolve) { - Notification.requestPermission(function (result) { - var granted = true; - if (result === 'denied' || result === 'default') { - granted = false; - } - resolve({ granted: granted }); - }); - }); - }; - LocalNotificationsPluginWeb.prototype.requestPermissions = function () { - return new Promise(function (resolve, reject) { - Notification.requestPermission(function (result) { - if (result === 'denied' || result === 'default') { - reject(result); - return; - } - resolve({ - results: [result] - }); - }); - }); - }; - return LocalNotificationsPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var LocalNotifications = new LocalNotificationsPluginWeb(); - -//# sourceMappingURL=local-notifications.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/modals.js": -/*!*************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/modals.js ***! - \*************************************************************/ -/*! exports provided: ModalsPluginWeb, Modals */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ModalsPluginWeb", function() { return ModalsPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Modals", function() { return Modals; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var ModalsPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(ModalsPluginWeb, _super); - function ModalsPluginWeb() { - return _super.call(this, { - name: 'Modals', - platforms: ['web'] - }) || this; - } - ModalsPluginWeb.prototype.alert = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - window.alert(options.message); - return [2 /*return*/, Promise.resolve()]; - }); - }); - }; - ModalsPluginWeb.prototype.prompt = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var val; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - val = window.prompt(options.message, options.inputText || ''); - return [2 /*return*/, Promise.resolve({ - value: val, - cancelled: val === null - })]; - }); - }); - }; - ModalsPluginWeb.prototype.confirm = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var val; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - val = window.confirm(options.message); - return [2 /*return*/, Promise.resolve({ - value: val - })]; - }); - }); - }; - ModalsPluginWeb.prototype.showActions = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var _this = this; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - return [2 /*return*/, new Promise(function (resolve, _reject) { return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(_this, void 0, void 0, function () { - var actionSheet; - var _this = this; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - actionSheet = document.querySelector('pwa-action-sheet'); - if (!actionSheet) { - actionSheet = document.createElement('pwa-action-sheet'); - document.body.appendChild(actionSheet); - } - actionSheet.header = options.title; - actionSheet.cancelable = false; - actionSheet.options = options.options; - actionSheet.addEventListener('onSelection', function (e) { return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(_this, void 0, void 0, function () { - var selection; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - selection = e.detail; - resolve({ - index: selection - }); - return [2 /*return*/]; - }); - }); }); - return [2 /*return*/]; - }); - }); })]; - }); - }); - }; - return ModalsPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Modals = new ModalsPluginWeb(); - -//# sourceMappingURL=modals.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/motion.js": -/*!*************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/motion.js ***! - \*************************************************************/ -/*! exports provided: MotionPluginWeb, Motion */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "MotionPluginWeb", function() { return MotionPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Motion", function() { return Motion; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var MotionPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(MotionPluginWeb, _super); - function MotionPluginWeb() { - var _this = _super.call(this, { - name: 'Motion' - }) || this; - _this.registerWindowListener('devicemotion', 'accel'); - _this.registerWindowListener('deviceorientation', 'orientation'); - return _this; - } - return MotionPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Motion = new MotionPluginWeb(); - -//# sourceMappingURL=motion.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/network.js": -/*!**************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/network.js ***! - \**************************************************************/ -/*! exports provided: NetworkPluginWeb, Network */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "NetworkPluginWeb", function() { return NetworkPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Network", function() { return Network; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var NetworkPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(NetworkPluginWeb, _super); - function NetworkPluginWeb() { - var _this = _super.call(this, { - name: 'Network', - platforms: ['web'] - }) || this; - _this.listenerFunction = null; - return _this; - } - NetworkPluginWeb.prototype.getStatus = function () { - return new Promise(function (resolve, reject) { - if (!window.navigator) { - reject('Network info not available'); - return; - } - var connected = window.navigator.onLine; - var connection = window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection; - var connectionType = connection ? (connection.type || connection.effectiveType) : 'wifi'; - resolve({ - connected: connected, - connectionType: connected ? connectionType : 'none' - }); - }); - }; - NetworkPluginWeb.prototype.addListener = function (eventName, listenerFunc) { - var thisRef = this; - var connection = window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection; - var connectionType = connection ? (connection.type || connection.effectiveType) : 'wifi'; - var onlineBindFunc = listenerFunc.bind(thisRef, { connected: true, connectionType: connectionType }); - var offlineBindFunc = listenerFunc.bind(thisRef, { connected: false, connectionType: 'none' }); - if (eventName.localeCompare('networkStatusChange') === 0) { - window.addEventListener('online', onlineBindFunc); - window.addEventListener('offline', offlineBindFunc); - return { - remove: function () { - window.removeEventListener('online', onlineBindFunc); - window.removeEventListener('offline', offlineBindFunc); - } - }; - } - }; - return NetworkPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Network = new NetworkPluginWeb(); - -//# sourceMappingURL=network.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/permissions.js": -/*!******************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/permissions.js ***! - \******************************************************************/ -/*! exports provided: PermissionsPluginWeb, Permissions */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PermissionsPluginWeb", function() { return PermissionsPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Permissions", function() { return Permissions; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); -/* harmony import */ var _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../core-plugin-definitions */ "./node_modules/@capacitor/core/dist/esm/core-plugin-definitions.js"); - - - -var PermissionsPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(PermissionsPluginWeb, _super); - function PermissionsPluginWeb() { - return _super.call(this, { - name: 'Permissions' - }) || this; - } - PermissionsPluginWeb.prototype.query = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var navigator, name, ret; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - switch (_a.label) { - case 0: - navigator = window.navigator; - if (!navigator.permissions) { - return [2 /*return*/, Promise.reject('This browser does not support the Permissions API')]; - } - name = options.name === _core_plugin_definitions__WEBPACK_IMPORTED_MODULE_2__["PermissionType"].Photos ? 'camera' : options.name; - return [4 /*yield*/, navigator.permissions.query({ name: name })]; - case 1: - ret = _a.sent(); - return [2 /*return*/, { - state: ret.state - }]; - } - }); - }); - }; - return PermissionsPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Permissions = new PermissionsPluginWeb(); - -//# sourceMappingURL=permissions.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/share.js": -/*!************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/share.js ***! - \************************************************************/ -/*! exports provided: SharePluginWeb, Share */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SharePluginWeb", function() { return SharePluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Share", function() { return Share; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var SharePluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(SharePluginWeb, _super); - function SharePluginWeb() { - return _super.call(this, { - name: 'Share', - platforms: ['web'] - }) || this; - } - SharePluginWeb.prototype.share = function (options) { - if (!navigator.share) { - return Promise.reject('Web Share API not available'); - } - return navigator.share({ - title: options.title, - text: options.text, - url: options.url - }); - }; - return SharePluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Share = new SharePluginWeb(); - -//# sourceMappingURL=share.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/splash-screen.js": -/*!********************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/splash-screen.js ***! - \********************************************************************/ -/*! exports provided: SplashScreenPluginWeb, SplashScreen */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplashScreenPluginWeb", function() { return SplashScreenPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "SplashScreen", function() { return SplashScreen; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var SplashScreenPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(SplashScreenPluginWeb, _super); - function SplashScreenPluginWeb() { - return _super.call(this, { - name: 'SplashScreen', - platforms: ['web'] - }) || this; - } - SplashScreenPluginWeb.prototype.show = function (_options, _callback) { - return Promise.resolve(); - }; - SplashScreenPluginWeb.prototype.hide = function (_options, _callback) { - return Promise.resolve(); - }; - return SplashScreenPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var SplashScreen = new SplashScreenPluginWeb(); - -//# sourceMappingURL=splash-screen.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/storage.js": -/*!**************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/storage.js ***! - \**************************************************************/ -/*! exports provided: StoragePluginWeb, Storage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StoragePluginWeb", function() { return StoragePluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Storage", function() { return Storage; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var StoragePluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(StoragePluginWeb, _super); - function StoragePluginWeb() { - var _this = _super.call(this, { - name: 'Storage', - platforms: ['web'] - }) || this; - _this.KEY_PREFIX = '_cap_'; - return _this; - } - StoragePluginWeb.prototype.get = function (options) { - var _this = this; - return new Promise(function (resolve, _reject) { - resolve({ - value: window.localStorage.getItem(_this.makeKey(options.key)) - }); - }); - }; - StoragePluginWeb.prototype.set = function (options) { - var _this = this; - return new Promise(function (resolve, _reject) { - window.localStorage.setItem(_this.makeKey(options.key), options.value); - resolve(); - }); - }; - StoragePluginWeb.prototype.remove = function (options) { - var _this = this; - return new Promise(function (resolve, _reject) { - window.localStorage.removeItem(_this.makeKey(options.key)); - resolve(); - }); - }; - StoragePluginWeb.prototype.keys = function () { - var _this = this; - return new Promise(function (resolve, _reject) { - resolve({ - keys: Object.keys(localStorage).filter(function (k) { return _this.isKey(k); }).map(function (k) { return _this.getKey(k); }) - }); - }); - }; - StoragePluginWeb.prototype.clear = function () { - var _this = this; - return new Promise(function (resolve, _reject) { - Object.keys(localStorage) - .filter(function (k) { return _this.isKey(k); }) - .forEach(function (k) { return window.localStorage.removeItem(k); }); - resolve(); - }); - }; - StoragePluginWeb.prototype.makeKey = function (key) { - return this.KEY_PREFIX + key; - }; - StoragePluginWeb.prototype.isKey = function (key) { - return key.indexOf(this.KEY_PREFIX) === 0; - }; - StoragePluginWeb.prototype.getKey = function (key) { - return key.substr(this.KEY_PREFIX.length); - }; - return StoragePluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Storage = new StoragePluginWeb(); - -//# sourceMappingURL=storage.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/dist/esm/web/toast.js": -/*!************************************************************!*\ - !*** ./node_modules/@capacitor/core/dist/esm/web/toast.js ***! - \************************************************************/ -/*! exports provided: ToastPluginWeb, Toast */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ToastPluginWeb", function() { return ToastPluginWeb; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "Toast", function() { return Toast; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _index__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./index */ "./node_modules/@capacitor/core/dist/esm/web/index.js"); - - -var ToastPluginWeb = /** @class */ (function (_super) { - Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(ToastPluginWeb, _super); - function ToastPluginWeb() { - return _super.call(this, { - name: 'Toast', - platforms: ['web'] - }) || this; - } - ToastPluginWeb.prototype.show = function (options) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function () { - var duration, toast; - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__generator"])(this, function (_a) { - duration = 2000; - if (options.duration) { - duration = options.duration === 'long' ? 3500 : 2000; - } - toast = document.createElement('pwa-toast'); - toast.duration = duration; - toast.message = options.text; - document.body.appendChild(toast); - return [2 /*return*/]; - }); - }); - }; - return ToastPluginWeb; -}(_index__WEBPACK_IMPORTED_MODULE_1__["WebPlugin"])); - -var Toast = new ToastPluginWeb(); - -//# sourceMappingURL=toast.js.map - -/***/ }), - -/***/ "./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js": -/*!**********************************************************************!*\ - !*** ./node_modules/@capacitor/core/node_modules/tslib/tslib.es6.js ***! - \**********************************************************************/ -/*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __createBinding, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault, __classPrivateFieldGet, __classPrivateFieldSet */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__createBinding", function() { return __createBinding; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldGet", function() { return __classPrivateFieldGet; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__classPrivateFieldSet", function() { return __classPrivateFieldSet; }); -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. - -Permission to use, copy, modify, and/or distribute this software for any -purpose with or without fee is hereby granted. - -THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH -REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY -AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, -INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM -LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR -OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR -PERFORMANCE OF THIS SOFTWARE. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -var __assign = function() { - __assign = Object.assign || function __assign(t) { - for (var s, i = 1, n = arguments.length; i < n; i++) { - s = arguments[i]; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; - } - return t; - } - return __assign.apply(this, arguments); -} - -function __rest(s, e) { - var t = {}; - for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) - t[p] = s[p]; - if (s != null && typeof Object.getOwnPropertySymbols === "function") - for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { - if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) - t[p[i]] = s[p[i]]; - } - return t; -} - -function __decorate(decorators, target, key, desc) { - var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d; - if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc); - else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r; - return c > 3 && r && Object.defineProperty(target, key, r), r; -} - -function __param(paramIndex, decorator) { - return function (target, key) { decorator(target, key, paramIndex); } -} - -function __metadata(metadataKey, metadataValue) { - if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue); -} - -function __awaiter(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()); - }); -} - -function __generator(thisArg, body) { - var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g; - return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; - function verb(n) { return function (v) { return step([n, v]); }; } - function step(op) { - if (f) throw new TypeError("Generator is already executing."); - while (_) try { - if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; - if (y = 0, t) op = [op[0] & 2, t.value]; - switch (op[0]) { - case 0: case 1: t = op; break; - case 4: _.label++; return { value: op[1], done: false }; - case 5: _.label++; y = op[1]; op = [0]; continue; - case 7: op = _.ops.pop(); _.trys.pop(); continue; - default: - if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } - if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } - if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } - if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } - if (t[2]) _.ops.pop(); - _.trys.pop(); continue; - } - op = body.call(thisArg, _); - } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } - if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; - } -} - -function __createBinding(o, m, k, k2) { - if (k2 === undefined) k2 = k; - o[k2] = m[k]; -} - -function __exportStar(m, exports) { - for (var p in m) if (p !== "default" && !exports.hasOwnProperty(p)) exports[p] = m[p]; -} - -function __values(o) { - var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; - if (m) return m.call(o); - if (o && typeof o.length === "number") return { - next: function () { - if (o && i >= o.length) o = void 0; - return { value: o && o[i++], done: !o }; - } - }; - throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); -} - -function __read(o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -} - -function __spread() { - for (var ar = [], i = 0; i < arguments.length; i++) - ar = ar.concat(__read(arguments[i])); - return ar; -} - -function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; -}; - -function __await(v) { - return this instanceof __await ? (this.v = v, this) : new __await(v); -} - -function __asyncGenerator(thisArg, _arguments, generator) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var g = generator.apply(thisArg, _arguments || []), i, q = []; - return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i; - function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; } - function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } } - function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); } - function fulfill(value) { resume("next", value); } - function reject(value) { resume("throw", value); } - function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); } -} - -function __asyncDelegator(o) { - var i, p; - return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i; - function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; } -} - -function __asyncValues(o) { - if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); - var m = o[Symbol.asyncIterator], i; - return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); - function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } - function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } -} - -function __makeTemplateObject(cooked, raw) { - if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; } - return cooked; -}; - -function __importStar(mod) { - if (mod && mod.__esModule) return mod; - var result = {}; - if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; - result.default = mod; - return result; -} - -function __importDefault(mod) { - return (mod && mod.__esModule) ? mod : { default: mod }; -} - -function __classPrivateFieldGet(receiver, privateMap) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to get private field on non-instance"); - } - return privateMap.get(receiver); -} - -function __classPrivateFieldSet(receiver, privateMap, value) { - if (!privateMap.has(receiver)) { - throw new TypeError("attempted to set private field on non-instance"); - } - privateMap.set(receiver, value); - return value; -} - - -/***/ }), - -/***/ "./src/app/config/auth-constants.ts": -/*!******************************************!*\ - !*** ./src/app/config/auth-constants.ts ***! - \******************************************/ -/*! exports provided: AuthConnstants */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AuthConnstants", function() { return AuthConnstants; }); -/* This file stores all the keys */ -class AuthConnstants { -} -/* My reference key */ -AuthConnstants.AUTH = 'userDataKey'; - - -/***/ }), - -/***/ "./src/app/services/auth.service.ts": -/*!******************************************!*\ - !*** ./src/app/services/auth.service.ts ***! - \******************************************/ -/*! exports provided: AuthService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AuthService", function() { return AuthService; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _storage_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./storage.service */ "./src/app/services/storage.service.ts"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); -/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); -/* harmony import */ var src_environments_environment__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! src/environments/environment */ "./src/environments/environment.ts"); -/* harmony import */ var _http_service__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./http.service */ "./src/app/services/http.service.ts"); -/* harmony import */ var rxjs__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! rxjs */ "./node_modules/rxjs/_esm2015/index.js"); -/* harmony import */ var _config_auth_constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../config/auth-constants */ "./src/app/config/auth-constants.ts"); - - - - - - - - - -let AuthService = class AuthService { - constructor(http, httpService, storageService, router) { - this.http = http; - this.httpService = httpService; - this.storageService = storageService; - this.router = router; - this.userData$ = new rxjs__WEBPACK_IMPORTED_MODULE_7__["BehaviorSubject"](''); - } - login(user) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - user.BasicAuthKey = 'Basic ' + btoa(user.domainName + '\\' + user.username + ':' + user.password); //conversão em base64 das credenciais inseridas - const options = { headers: { 'Authorization': user.BasicAuthKey } }; - const service = src_environments_environment__WEBPACK_IMPORTED_MODULE_5__["environment"].apiURL + "userauthentication/GetValidateAuth"; - let result; - result = yield this.http.get(service, options).toPromise(); - if (result) { - this.ValidatedUser = user; - } - return result; - }); - } - logout() { - this.ValidatedUser = null; - } - loginChat() { - const body = { "user": "admin", "password": "tabteste@006" }; - const url = "http://192.168.100.111:3000/api/v1/login"; - return this.http.post(url, body); - } - //Login to rocketChat server - loginChat2(postData) { - return this.httpService.post('login', postData); - } - //Get user data from RocketChat - getUserData() { - this.storageService.get(_config_auth_constants__WEBPACK_IMPORTED_MODULE_8__["AuthConnstants"].AUTH).then(res => { - this.userData$.next(res); - }); - } - logoutChat() { - //this.storageService.clear(); - this.storageService.removeStorageItem(_config_auth_constants__WEBPACK_IMPORTED_MODULE_8__["AuthConnstants"].AUTH).then(res => { - this.userData$.next(''); - this.router.navigate(['']); - }); - } -}; -AuthService.ctorParameters = () => [ - { type: _angular_common_http__WEBPACK_IMPORTED_MODULE_4__["HttpClient"] }, - { type: _http_service__WEBPACK_IMPORTED_MODULE_6__["HttpService"] }, - { type: _storage_service__WEBPACK_IMPORTED_MODULE_2__["StorageService"] }, - { type: _angular_router__WEBPACK_IMPORTED_MODULE_3__["Router"] } -]; -AuthService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"])({ - providedIn: 'root' - }) -], AuthService); - - - -/***/ }), - -/***/ "./src/app/services/http.service.ts": -/*!******************************************!*\ - !*** ./src/app/services/http.service.ts ***! - \******************************************/ -/*! exports provided: HttpService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HttpService", function() { return HttpService; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var src_environments_environment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! src/environments/environment */ "./src/environments/environment.ts"); - - - - -let HttpService = class HttpService { - constructor(http) { - this.http = http; - } - post(serviceName, data) { - const headers = new _angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpHeaders"](); - const options = { header: headers, withCredentials: false }; - const url = src_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].apiChatUrl + serviceName; - const body = { "user": "admin", "password": "tabteste@006" }; - return this.http.post(url, /* JSON.stringify( */ data /* ), options */); - } - get(serviceName, options) { - const url = src_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].apiChatUrl + serviceName; - return this.http.get(url, options); - } -}; -HttpService.ctorParameters = () => [ - { type: _angular_common_http__WEBPACK_IMPORTED_MODULE_1__["HttpClient"] } -]; -HttpService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_2__["Injectable"])({ - providedIn: 'root' - }) -], HttpService); - - - -/***/ }), - -/***/ "./src/app/services/storage.service.ts": -/*!*********************************************!*\ - !*** ./src/app/services/storage.service.ts ***! - \*********************************************/ -/*! exports provided: StorageService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "StorageService", function() { return StorageService; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _capacitor_core__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @capacitor/core */ "./node_modules/@capacitor/core/dist/esm/index.js"); - - - -const { Storage } = _capacitor_core__WEBPACK_IMPORTED_MODULE_2__["Plugins"]; -let StorageService = class StorageService { - constructor() { } - // Store the value - store(storageKey, value) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - const encryptedValue = btoa(escape(JSON.stringify(value))); - yield Storage.set({ - key: storageKey, - value: encryptedValue - }); - }); - } - // Get the value - get(storageKey) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - const ret = yield Storage.get({ key: storageKey }); - return JSON.parse(unescape(atob(ret.value))); - }); - } - removeStorageItem(storageKey) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - yield Storage.remove({ key: storageKey }); - }); - } - // Clear storage - clear() { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - yield Storage.clear(); - }); - } -}; -StorageService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"])({ - providedIn: 'root' - }) -], StorageService); - - - -/***/ }) - -}]); -//# sourceMappingURL=default~home-home-module~pages-chat-chat-module~pages-login-login-module.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/event-list-event-list-module.js.download b/src/assets/images/Gabinete Digital_files/event-list-event-list-module.js.download deleted file mode 100644 index 16a71ca09..000000000 --- a/src/assets/images/Gabinete Digital_files/event-list-event-list-module.js.download +++ /dev/null @@ -1,228 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["event-list-event-list-module"],{ - -/***/ "./node_modules/raw-loader/dist/cjs.js!./src/app/pages/gabinete-digital/event-list/event-list.page.html": -/*!**************************************************************************************************************!*\ - !*** ./node_modules/raw-loader/dist/cjs.js!./src/app/pages/gabinete-digital/event-list/event-list.page.html ***! - \**************************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\n \n \n \n \n Eventos para Aprovação\n \n \n \n \n Calendário do MDGPR\n \n \n Presidente da República\n \n \n \n\n\n\n
\n \n
\n \n \n \n
\n
\n

08:30

\n

12:30

\n
\n
\n

Luanda | Palácio Presidencial

\n

Reunião de Conselho de Ministros

\n
\n
\n
\n
\n
\n
\n\n
\n \n \n \n
\n
\n

08:30

\n

12:30

\n
\n
\n

Luanda | Palácio Presidencial

\n

Reunião de Conselho de Ministros

\n
\n
\n
\n
\n
\n
\n\n
\n"); - -/***/ }), - -/***/ "./src/app/pages/gabinete-digital/event-list/event-list-routing.module.ts": -/*!********************************************************************************!*\ - !*** ./src/app/pages/gabinete-digital/event-list/event-list-routing.module.ts ***! - \********************************************************************************/ -/*! exports provided: EventListPageRoutingModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventListPageRoutingModule", function() { return EventListPageRoutingModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); -/* harmony import */ var _event_list_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./event-list.page */ "./src/app/pages/gabinete-digital/event-list/event-list.page.ts"); - - - - -const routes = [ - { - path: '', - component: _event_list_page__WEBPACK_IMPORTED_MODULE_3__["EventListPage"] - } -]; -let EventListPageRoutingModule = class EventListPageRoutingModule { -}; -EventListPageRoutingModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"].forChild(routes)], - exports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"]], - }) -], EventListPageRoutingModule); - - - -/***/ }), - -/***/ "./src/app/pages/gabinete-digital/event-list/event-list.module.ts": -/*!************************************************************************!*\ - !*** ./src/app/pages/gabinete-digital/event-list/event-list.module.ts ***! - \************************************************************************/ -/*! exports provided: EventListPageModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventListPageModule", function() { return EventListPageModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var _event_list_routing_module__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./event-list-routing.module */ "./src/app/pages/gabinete-digital/event-list/event-list-routing.module.ts"); -/* harmony import */ var _event_list_page__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./event-list.page */ "./src/app/pages/gabinete-digital/event-list/event-list.page.ts"); - - - - - - - -let EventListPageModule = class EventListPageModule { -}; -EventListPageModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [ - _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], - _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormsModule"], - _ionic_angular__WEBPACK_IMPORTED_MODULE_4__["IonicModule"], - _event_list_routing_module__WEBPACK_IMPORTED_MODULE_5__["EventListPageRoutingModule"] - ], - declarations: [_event_list_page__WEBPACK_IMPORTED_MODULE_6__["EventListPage"]] - }) -], EventListPageModule); - - - -/***/ }), - -/***/ "./src/app/pages/gabinete-digital/event-list/event-list.page.scss": -/*!************************************************************************!*\ - !*** ./src/app/pages/gabinete-digital/event-list/event-list.page.scss ***! - \************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = (".Rectangle {\n width: 360px;\n border-radius: 15px;\n box-shadow: 0 0 10px 0 rgba(0, 0, 0, 0.07);\n border: solid 1px #e9e9e9;\n background-color: var(--white);\n margin: 0 auto;\n padding: 10px;\n margin-bottom: 10px;\n overflow: auto;\n}\n\n.rectangle-content {\n width: 340px;\n border-radius: 5px;\n border-right: 5px solid yellowgreen;\n overflow: auto;\n}\n\n.approve-event-time {\n float: left;\n}\n\n.approve-event-time p {\n width: 33px;\n font-family: Roboto;\n font-size: rem(13);\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: var(--Antartic-grey);\n margin: 0;\n padding: 0;\n}\n\n.approve-event-detail {\n float: left;\n margin-left: 10px;\n}\n\n.approve-event-detail p {\n width: 250px;\n font-family: Roboto;\n font-size: rem(13);\n font-weight: normal;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: var(--black);\n margin: 0;\n padding: 0;\n}\n\n.approve-event-detail h3 {\n width: 250px;\n font-family: Roboto;\n font-size: 15px;\n font-weight: bold;\n font-stretch: normal;\n font-style: normal;\n line-height: normal;\n letter-spacing: normal;\n color: #0d89d1;\n margin: 0;\n padding: 0;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcGFnZXMvZ2FiaW5ldGUtZGlnaXRhbC9ldmVudC1saXN0L0M6XFxVc2Vyc1xcdGlhZ28ua2F5YXlhXFxkZXZlbG9wbWVudFxcZ2FiaW5ldGUtZGlnaXRhbC9zcmNcXGFwcFxccGFnZXNcXGdhYmluZXRlLWRpZ2l0YWxcXGV2ZW50LWxpc3RcXGV2ZW50LWxpc3QucGFnZS5zY3NzIiwic3JjL2FwcC9wYWdlcy9nYWJpbmV0ZS1kaWdpdGFsL2V2ZW50LWxpc3QvZXZlbnQtbGlzdC5wYWdlLnNjc3MiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7RUFDRSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSwwQ0FBQTtFQUNBLHlCQUFBO0VBQ0EsOEJBQUE7RUFDQSxjQUFBO0VBQ0EsYUFBQTtFQUNBLG1CQUFBO0VBQ0EsY0FBQTtBQ0NGOztBRENBO0VBQ0UsWUFBQTtFQUNBLGtCQUFBO0VBQ0EsbUNBQUE7RUFDQSxjQUFBO0FDRUY7O0FEQ0E7RUFDRSxXQUFBO0FDRUY7O0FEQUE7RUFDRSxXQUFBO0VBQ0EsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsbUJBQUE7RUFDQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLDJCQUFBO0VBQ0EsU0FBQTtFQUNBLFVBQUE7QUNHRjs7QUREQTtFQUNFLFdBQUE7RUFDQSxpQkFBQTtBQ0lGOztBREZBO0VBQ0UsWUFBQTtFQUNBLG1CQUFBO0VBQ0EsZUFBQTtFQUNBLG1CQUFBO0VBQ0Esb0JBQUE7RUFDQSxrQkFBQTtFQUNBLG1CQUFBO0VBQ0Esc0JBQUE7RUFDQSxtQkFBQTtFQUNBLFNBQUE7RUFDQSxVQUFBO0FDS0Y7O0FESEE7RUFDRSxZQUFBO0VBQ0EsbUJBQUE7RUFDQSxlQUFBO0VBQ0EsaUJBQUE7RUFDQSxvQkFBQTtFQUNBLGtCQUFBO0VBQ0EsbUJBQUE7RUFDQSxzQkFBQTtFQUNBLGNBQUE7RUFDQSxTQUFBO0VBQ0EsVUFBQTtBQ01GIiwiZmlsZSI6InNyYy9hcHAvcGFnZXMvZ2FiaW5ldGUtZGlnaXRhbC9ldmVudC1saXN0L2V2ZW50LWxpc3QucGFnZS5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiLlJlY3RhbmdsZSB7XHJcbiAgd2lkdGg6IDM2MHB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDE1cHg7XHJcbiAgYm94LXNoYWRvdzogMCAwIDEwcHggMCByZ2JhKDAsIDAsIDAsIDAuMDcpO1xyXG4gIGJvcmRlcjogc29saWQgMXB4ICNlOWU5ZTk7XHJcbiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0td2hpdGUpO1xyXG4gIG1hcmdpbjogMCBhdXRvO1xyXG4gIHBhZGRpbmc6IDEwcHg7XHJcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuICBvdmVyZmxvdzogYXV0bztcclxufVxyXG4ucmVjdGFuZ2xlLWNvbnRlbnR7XHJcbiAgd2lkdGg6IDM0MHB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcclxuICBib3JkZXItcmlnaHQ6IDVweCBzb2xpZCB5ZWxsb3dncmVlbjtcclxuICBvdmVyZmxvdzogYXV0bztcclxufVxyXG5cclxuLmFwcHJvdmUtZXZlbnQtdGltZXtcclxuICBmbG9hdDogbGVmdDtcclxufVxyXG4uYXBwcm92ZS1ldmVudC10aW1lIHB7XHJcbiAgd2lkdGg6IDMzcHg7XHJcbiAgZm9udC1mYW1pbHk6IFJvYm90bztcclxuICBmb250LXNpemU6IDEzcHg7XHJcbiAgZm9udC13ZWlnaHQ6IG5vcm1hbDtcclxuICBmb250LXN0cmV0Y2g6IG5vcm1hbDtcclxuICBmb250LXN0eWxlOiBub3JtYWw7XHJcbiAgbGluZS1oZWlnaHQ6IG5vcm1hbDtcclxuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xyXG4gIGNvbG9yOiB2YXIoLS1BbnRhcnRpYy1ncmV5KTtcclxuICBtYXJnaW46IDA7XHJcbiAgcGFkZGluZzogMDtcclxufVxyXG4uYXBwcm92ZS1ldmVudC1kZXRhaWx7XHJcbiAgZmxvYXQ6IGxlZnQ7XHJcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XHJcbn1cclxuLmFwcHJvdmUtZXZlbnQtZGV0YWlsIHB7XHJcbiAgd2lkdGg6IDI1MHB4O1xyXG4gIGZvbnQtZmFtaWx5OiBSb2JvdG87XHJcbiAgZm9udC1zaXplOiAxM3B4O1xyXG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XHJcbiAgZm9udC1zdHJldGNoOiBub3JtYWw7XHJcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xyXG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcclxuICBjb2xvcjogdmFyKC0tYmxhY2spO1xyXG4gIG1hcmdpbjogMDtcclxuICBwYWRkaW5nOiAwO1xyXG59XHJcbi5hcHByb3ZlLWV2ZW50LWRldGFpbCBoM3tcclxuICB3aWR0aDogMjUwcHg7XHJcbiAgZm9udC1mYW1pbHk6IFJvYm90bztcclxuICBmb250LXNpemU6IDE1cHg7XHJcbiAgZm9udC13ZWlnaHQ6IGJvbGQ7XHJcbiAgZm9udC1zdHJldGNoOiBub3JtYWw7XHJcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xyXG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XHJcbiAgbGV0dGVyLXNwYWNpbmc6IG5vcm1hbDtcclxuICBjb2xvcjogIzBkODlkMTtcclxuICBtYXJnaW46IDA7XHJcbiAgcGFkZGluZzogMDtcclxufVxyXG4iLCIuUmVjdGFuZ2xlIHtcbiAgd2lkdGg6IDM2MHB4O1xuICBib3JkZXItcmFkaXVzOiAxNXB4O1xuICBib3gtc2hhZG93OiAwIDAgMTBweCAwIHJnYmEoMCwgMCwgMCwgMC4wNyk7XG4gIGJvcmRlcjogc29saWQgMXB4ICNlOWU5ZTk7XG4gIGJhY2tncm91bmQtY29sb3I6IHZhcigtLXdoaXRlKTtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmc6IDEwcHg7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4ucmVjdGFuZ2xlLWNvbnRlbnQge1xuICB3aWR0aDogMzQwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbiAgYm9yZGVyLXJpZ2h0OiA1cHggc29saWQgeWVsbG93Z3JlZW47XG4gIG92ZXJmbG93OiBhdXRvO1xufVxuXG4uYXBwcm92ZS1ldmVudC10aW1lIHtcbiAgZmxvYXQ6IGxlZnQ7XG59XG5cbi5hcHByb3ZlLWV2ZW50LXRpbWUgcCB7XG4gIHdpZHRoOiAzM3B4O1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3RyZXRjaDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gIGNvbG9yOiB2YXIoLS1BbnRhcnRpYy1ncmV5KTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufVxuXG4uYXBwcm92ZS1ldmVudC1kZXRhaWwge1xuICBmbG9hdDogbGVmdDtcbiAgbWFyZ2luLWxlZnQ6IDEwcHg7XG59XG5cbi5hcHByb3ZlLWV2ZW50LWRldGFpbCBwIHtcbiAgd2lkdGg6IDI1MHB4O1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDEzcHg7XG4gIGZvbnQtd2VpZ2h0OiBub3JtYWw7XG4gIGZvbnQtc3RyZXRjaDogbm9ybWFsO1xuICBmb250LXN0eWxlOiBub3JtYWw7XG4gIGxpbmUtaGVpZ2h0OiBub3JtYWw7XG4gIGxldHRlci1zcGFjaW5nOiBub3JtYWw7XG4gIGNvbG9yOiB2YXIoLS1ibGFjayk7XG4gIG1hcmdpbjogMDtcbiAgcGFkZGluZzogMDtcbn1cblxuLmFwcHJvdmUtZXZlbnQtZGV0YWlsIGgzIHtcbiAgd2lkdGg6IDI1MHB4O1xuICBmb250LWZhbWlseTogUm9ib3RvO1xuICBmb250LXNpemU6IDE1cHg7XG4gIGZvbnQtd2VpZ2h0OiBib2xkO1xuICBmb250LXN0cmV0Y2g6IG5vcm1hbDtcbiAgZm9udC1zdHlsZTogbm9ybWFsO1xuICBsaW5lLWhlaWdodDogbm9ybWFsO1xuICBsZXR0ZXItc3BhY2luZzogbm9ybWFsO1xuICBjb2xvcjogIzBkODlkMTtcbiAgbWFyZ2luOiAwO1xuICBwYWRkaW5nOiAwO1xufSJdfQ== */"); - -/***/ }), - -/***/ "./src/app/pages/gabinete-digital/event-list/event-list.page.ts": -/*!**********************************************************************!*\ - !*** ./src/app/pages/gabinete-digital/event-list/event-list.page.ts ***! - \**********************************************************************/ -/*! exports provided: EventListPage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventListPage", function() { return EventListPage; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var src_app_services_processes_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! src/app/services/processes.service */ "./src/app/services/processes.service.ts"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var _agenda_approve_event_modal_approve_event_modal_page__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../../agenda/approve-event-modal/approve-event-modal.page */ "./src/app/pages/agenda/approve-event-modal/approve-event-modal.page.ts"); - - - - - -let EventListPage = class EventListPage { - constructor(processes, modalController) { - this.processes = processes; - this.modalController = modalController; - } - ngOnInit() { - this.LoadToApproveEvents(); - this.segment = "MDGPR"; - this.eventBody = { - BodyType: 'string', - Text: 'string', - }; - this.eventPerson = { - EmailAddress: 'tiago.kayaya@hotmail.com', - Name: 'Tiago', - IsRequired: false, - }; - this.eventsPRList = [ - { - EventId: '1', - Subject: 'Reunião do Conselho de Ministros', - Body: this.eventBody, - Location: 'Luanda', - CalendarId: 'string', - CalendarName: 'Oficial', - StartDate: new Date, - EndDate: new Date, - EventType: 'Reunião', - Attendees: null, - IsMeeting: true, - IsRecurring: false, - AppointmentState: 2, - TimeZone: '', - Organizer: '', - Categories: null, - HasAttachments: false, - }, - { - EventId: '1', - Subject: 'Viagem', - Body: this.eventBody, - Location: 'Luanda', - CalendarId: 'string', - CalendarName: 'Pessoal', - StartDate: new Date, - EndDate: new Date, - EventType: 'Reunião', - Attendees: null, - IsMeeting: true, - IsRecurring: false, - AppointmentState: 2, - TimeZone: '', - Organizer: '', - Categories: null, - HasAttachments: false, - }, - ]; - } - LoadToApproveEvents() { - this.processes.GetToApprovedEvents('PR', 'false').subscribe(res => { - this.eventsPRList = res; - console.log(res); - }); - this.processes.GetToApprovedEvents('MDGPR', 'false').subscribe(res => { - this.eventsMDGPRList = res; - console.log(res); - }); - } - openApproveModal() { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - const modal = yield this.modalController.create({ - component: _agenda_approve_event_modal_approve_event_modal_page__WEBPACK_IMPORTED_MODULE_4__["ApproveEventModalPage"], - componentProps: { - segment: this.segment, - }, - cssClass: 'cal-modal', - backdropDismiss: false - }); - yield modal.present(); - modal.onDidDismiss(); - }); - } -}; -EventListPage.ctorParameters = () => [ - { type: src_app_services_processes_service__WEBPACK_IMPORTED_MODULE_2__["ProcessesService"] }, - { type: _ionic_angular__WEBPACK_IMPORTED_MODULE_3__["ModalController"] } -]; -EventListPage = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"])({ - selector: 'app-event-list', - template: Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! raw-loader!./event-list.page.html */ "./node_modules/raw-loader/dist/cjs.js!./src/app/pages/gabinete-digital/event-list/event-list.page.html")).default, - styles: [Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! ./event-list.page.scss */ "./src/app/pages/gabinete-digital/event-list/event-list.page.scss")).default] - }) -], EventListPage); - - - -/***/ }) - -}]); -//# sourceMappingURL=event-list-event-list-module.js.map diff --git a/src/assets/images/Gabinete Digital_files/focus-visible-15ada7f7-js.js.download b/src/assets/images/Gabinete Digital_files/focus-visible-15ada7f7-js.js.download deleted file mode 100644 index 1ca218c8d..000000000 --- a/src/assets/images/Gabinete Digital_files/focus-visible-15ada7f7-js.js.download +++ /dev/null @@ -1,61 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["focus-visible-15ada7f7-js"],{ - -/***/ "./node_modules/@ionic/core/dist/esm/focus-visible-15ada7f7.js": -/*!*********************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm/focus-visible-15ada7f7.js ***! - \*********************************************************************/ -/*! exports provided: startFocusVisible */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startFocusVisible", function() { return startFocusVisible; }); -const ION_FOCUSED = 'ion-focused'; -const ION_FOCUSABLE = 'ion-focusable'; -const FOCUS_KEYS = ['Tab', 'ArrowDown', 'Space', 'Escape', ' ', 'Shift', 'Enter', 'ArrowLeft', 'ArrowRight', 'ArrowUp']; -const startFocusVisible = () => { - let currentFocus = []; - let keyboardMode = true; - const doc = document; - const setFocus = (elements) => { - currentFocus.forEach(el => el.classList.remove(ION_FOCUSED)); - elements.forEach(el => el.classList.add(ION_FOCUSED)); - currentFocus = elements; - }; - const pointerDown = () => { - keyboardMode = false; - setFocus([]); - }; - doc.addEventListener('keydown', ev => { - keyboardMode = FOCUS_KEYS.includes(ev.key); - if (!keyboardMode) { - setFocus([]); - } - }); - doc.addEventListener('focusin', ev => { - if (keyboardMode && ev.composedPath) { - const toFocus = ev.composedPath().filter((el) => { - if (el.classList) { - return el.classList.contains(ION_FOCUSABLE); - } - return false; - }); - setFocus(toFocus); - } - }); - doc.addEventListener('focusout', () => { - if (doc.activeElement === doc.body) { - setFocus([]); - } - }); - doc.addEventListener('touchstart', pointerDown); - doc.addEventListener('mousedown', pointerDown); -}; - - - - -/***/ }) - -}]); -//# sourceMappingURL=focus-visible-15ada7f7-js.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/home-home-module.js.download b/src/assets/images/Gabinete Digital_files/home-home-module.js.download deleted file mode 100644 index 21f80efe7..000000000 --- a/src/assets/images/Gabinete Digital_files/home-home-module.js.download +++ /dev/null @@ -1,527 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["home-home-module"],{ - -/***/ "./node_modules/raw-loader/dist/cjs.js!./src/app/home/home.page.html": -/*!***************************************************************************!*\ - !*** ./node_modules/raw-loader/dist/cjs.js!./src/app/home/home.page.html ***! - \***************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\r\n \r\n \r\n \r\n {{totalEvent}}\r\n Home\r\n \r\n \r\n \r\n \r\n Agenda\r\n \r\n \r\n \r\n {{totalExpediente}}\r\n Gabinete Digital\r\n \r\n \r\n \r\n \r\n Chat\r\n \r\n \r\n \r\n \r\n"); - -/***/ }), - -/***/ "./src/app/home/home-routing.module.ts": -/*!*********************************************!*\ - !*** ./src/app/home/home-routing.module.ts ***! - \*********************************************/ -/*! exports provided: HomePageRoutingModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HomePageRoutingModule", function() { return HomePageRoutingModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); -/* harmony import */ var _resolvers_userData_resolver__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../resolvers/userData.resolver */ "./src/app/resolvers/userData.resolver.ts"); -/* harmony import */ var _home_page__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./home.page */ "./src/app/home/home.page.ts"); - - - - - -const routes = [ - { - path: 'home', - component: _home_page__WEBPACK_IMPORTED_MODULE_4__["HomePage"], - /* canActivate: [HomeGuard], */ - resolve: { - userData: _resolvers_userData_resolver__WEBPACK_IMPORTED_MODULE_3__["UserDataResolver"] - }, - children: [ - { - path: 'events', - children: [ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-events-events-module */[__webpack_require__.e("common"), __webpack_require__.e("pages-events-events-module")]).then(__webpack_require__.bind(null, /*! ../pages/events/events.module */ "./src/app/pages/events/events.module.ts")).then(m => m.EventsPageModule) - }, - { - path: ':eventId/:caller', - loadChildren: () => Promise.all(/*! import() | pages-events-event-detail-event-detail-module */[__webpack_require__.e("default~attendees-attendees-module~event-detail-event-detail-module~pages-agenda-agenda-module~pages~2e9e46f5"), __webpack_require__.e("default~attachments-attachments-module~event-detail-event-detail-module~pages-events-event-detail-ev~f3bcdd0b"), __webpack_require__.e("default~event-detail-event-detail-module~pages-events-event-detail-event-detail-module"), __webpack_require__.e("common")]).then(__webpack_require__.bind(null, /*! ../pages/events/event-detail/event-detail.module */ "./src/app/pages/events/event-detail/event-detail.module.ts")).then(m => m.EventDetailPageModule), - }, - ] - }, - { - path: 'attachments', - children: [ - { - path: ':eventId', - loadChildren: () => Promise.all(/*! import() | pages-events-attachments-attachments-module */[__webpack_require__.e("default~attachments-attachments-module~event-detail-event-detail-module~pages-events-event-detail-ev~f3bcdd0b"), __webpack_require__.e("attachments-attachments-module")]).then(__webpack_require__.bind(null, /*! ../pages/events/attachments/attachments.module */ "./src/app/pages/events/attachments/attachments.module.ts")).then(m => m.AttachmentsPageModule) - }, - ] - }, - { - path: 'attendees', - children: [ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-events-attendees-attendees-module */[__webpack_require__.e("default~attendees-attendees-module~event-detail-event-detail-module~pages-agenda-agenda-module~pages~2e9e46f5"), __webpack_require__.e("attendees-attendees-module")]).then(__webpack_require__.bind(null, /*! ../pages/events/attendees/attendees.module */ "./src/app/pages/events/attendees/attendees.module.ts")).then(m => m.AttendeesPageModule) - }, - ] - }, - { - path: 'login', - children: [ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-login-login-module */[__webpack_require__.e("default~home-home-module~pages-chat-chat-module~pages-login-login-module"), __webpack_require__.e("pages-login-login-module")]).then(__webpack_require__.bind(null, /*! ../pages/login/login.module */ "./src/app/pages/login/login.module.ts")).then(m => m.LoginPageModule) - }, - ] - }, - { - path: 'agenda', - children: [ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-agenda-agenda-module */[__webpack_require__.e("default~attendees-attendees-module~event-detail-event-detail-module~pages-agenda-agenda-module~pages~2e9e46f5"), __webpack_require__.e("default~expediente-expediente-module~pages-agenda-agenda-module"), __webpack_require__.e("common"), __webpack_require__.e("pages-agenda-agenda-module")]).then(__webpack_require__.bind(null, /*! ../pages/agenda/agenda.module */ "./src/app/pages/agenda/agenda.module.ts")).then(m => m.AgendaPageModule) - }, - { - path: ':eventId/:caller', - loadChildren: () => Promise.all(/*! import() | pages-events-event-detail-event-detail-module */[__webpack_require__.e("default~attendees-attendees-module~event-detail-event-detail-module~pages-agenda-agenda-module~pages~2e9e46f5"), __webpack_require__.e("default~attachments-attachments-module~event-detail-event-detail-module~pages-events-event-detail-ev~f3bcdd0b"), __webpack_require__.e("default~event-detail-event-detail-module~pages-events-event-detail-event-detail-module"), __webpack_require__.e("common")]).then(__webpack_require__.bind(null, /*! ../pages/events/event-detail/event-detail.module */ "./src/app/pages/events/event-detail/event-detail.module.ts")).then(m => m.EventDetailPageModule), - } - ] - }, - { - path: 'gabinete-digital', - children: [ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-gabinete-digital-gabinete-digital-module */[__webpack_require__.e("common"), __webpack_require__.e("pages-gabinete-digital-gabinete-digital-module")]).then(__webpack_require__.bind(null, /*! ../pages/gabinete-digital/gabinete-digital.module */ "./src/app/pages/gabinete-digital/gabinete-digital.module.ts")).then(m => m.GabineteDigitalPageModule) - }, - { - path: 'expediente', - children: [ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-gabinete-digital-expediente-expediente-module */[__webpack_require__.e("default~expediente-expediente-module~pages-agenda-agenda-module"), __webpack_require__.e("expediente-expediente-module")]).then(__webpack_require__.bind(null, /*! ../pages/gabinete-digital/expediente/expediente.module */ "./src/app/pages/gabinete-digital/expediente/expediente.module.ts")).then(m => m.ExpedientePageModule) - }, - { - path: ':SerialNumber', - loadChildren: () => Promise.all(/*! import() | pages-gabinete-digital-expediente-expediente-detail-expediente-detail-module */[__webpack_require__.e("common"), __webpack_require__.e("expediente-detail-expediente-detail-module")]).then(__webpack_require__.bind(null, /*! ../pages/gabinete-digital/expediente/expediente-detail/expediente-detail.module */ "./src/app/pages/gabinete-digital/expediente/expediente-detail/expediente-detail.module.ts")).then(m => m.ExpedienteDetailPageModule) - }, - { - path: 'events/:eventId/:caller', - loadChildren: () => Promise.all(/*! import() | pages-events-event-detail-event-detail-module */[__webpack_require__.e("default~attendees-attendees-module~event-detail-event-detail-module~pages-agenda-agenda-module~pages~2e9e46f5"), __webpack_require__.e("default~attachments-attachments-module~event-detail-event-detail-module~pages-events-event-detail-ev~f3bcdd0b"), __webpack_require__.e("default~event-detail-event-detail-module~pages-events-event-detail-event-detail-module"), __webpack_require__.e("common")]).then(__webpack_require__.bind(null, /*! ../pages/events/event-detail/event-detail.module */ "./src/app/pages/events/event-detail/event-detail.module.ts")).then(m => m.EventDetailPageModule), - } - ] - }, - { - path: 'event-list', - children: [ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-gabinete-digital-event-list-event-list-module */[__webpack_require__.e("common"), __webpack_require__.e("event-list-event-list-module")]).then(__webpack_require__.bind(null, /*! ../pages/gabinete-digital/event-list/event-list.module */ "./src/app/pages/gabinete-digital/event-list/event-list.module.ts")).then(m => m.EventListPageModule) - }, - ] - }, - ] - }, - { - path: 'search', - children: [ - { - path: '', - loadChildren: () => __webpack_require__.e(/*! import() | pages-search-search-module */ "pages-search-search-module").then(__webpack_require__.bind(null, /*! ../pages/search/search.module */ "./src/app/pages/search/search.module.ts")).then(m => m.SearchPageModule) - } - ] - }, - /* { - path: 'expediente', - children: [ - { - path:'', - loadChildren: ()=> import('../pages/gabinete-digital/expediente/expediente.module').then(m => m.ExpedientePageModule) - } - ] - }, */ - { - path: 'chat', - children: [ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-chat-chat-module */[__webpack_require__.e("default~home-home-module~pages-chat-chat-module~pages-login-login-module"), __webpack_require__.e("pages-chat-chat-module")]).then(__webpack_require__.bind(null, /*! ../pages/chat/chat.module */ "./src/app/pages/chat/chat.module.ts")).then(m => m.ChatPageModule) - } - ] - }, - ] - }, - { - path: '', - redirectTo: 'home/events', - pathMatch: 'full' - } -]; -let HomePageRoutingModule = class HomePageRoutingModule { -}; -HomePageRoutingModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"].forChild(routes)], - exports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"]], - }) -], HomePageRoutingModule); - - - -/***/ }), - -/***/ "./src/app/home/home.module.ts": -/*!*************************************!*\ - !*** ./src/app/home/home.module.ts ***! - \*************************************/ -/*! exports provided: HomePageModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HomePageModule", function() { return HomePageModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var _home_routing_module__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./home-routing.module */ "./src/app/home/home-routing.module.ts"); -/* harmony import */ var _home_page__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./home.page */ "./src/app/home/home.page.ts"); - - - - - - - -/* import { IonicSelectableModule } from 'ionic-selectable'; */ -let HomePageModule = class HomePageModule { -}; -HomePageModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [ - _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], - _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormsModule"], - _ionic_angular__WEBPACK_IMPORTED_MODULE_4__["IonicModule"], - _home_routing_module__WEBPACK_IMPORTED_MODULE_5__["HomePageRoutingModule"], - ], - declarations: [_home_page__WEBPACK_IMPORTED_MODULE_6__["HomePage"]] - }) -], HomePageModule); - - - -/***/ }), - -/***/ "./src/app/home/home.page.scss": -/*!*************************************!*\ - !*** ./src/app/home/home.page.scss ***! - \*************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("ion-tab-bar {\n --background: #e3dfdf;\n --color: #000;\n}\n\nion-badge {\n /* */\n /* display: inline-block;*/\n min-width: 18px;\n font-size: 15px;\n /* font-weight: $badge-font-weight;\n line-height: 1;\n\n white-space: nowrap;\n vertical-align: baseline; */\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvaG9tZS9DOlxcVXNlcnNcXHRpYWdvLmtheWF5YVxcZGV2ZWxvcG1lbnRcXGdhYmluZXRlLWRpZ2l0YWwvc3JjXFxhcHBcXGhvbWVcXGhvbWUucGFnZS5zY3NzIiwic3JjL2FwcC9ob21lL2hvbWUucGFnZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBO0VBQ0kscUJBQUE7RUFDQSxhQUFBO0FDQUo7O0FEYUE7RUFBVyxLQUFBO0VBRVQsMEJBQUE7RUFFQSxlQUFBO0VBQ0EsZUFYZTtFQVlmOzs7OzZCQUFBO0FDUEYiLCJmaWxlIjoic3JjL2FwcC9ob21lL2hvbWUucGFnZS5zY3NzIiwic291cmNlc0NvbnRlbnQiOlsiXHJcbmlvbi10YWItYmFye1xyXG4gICAgLS1iYWNrZ3JvdW5kOiAjZTNkZmRmO1xyXG4gICAgLS1jb2xvcjogIzAwMDtcclxufVxyXG5cclxuLy8gQmFkZ2VcclxuLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cclxuXHJcbi8vLyBAcHJvcCAtIEZvbnQgc2l6ZSBvZiB0aGUgYmFkZ2VcclxuJGJhZGdlLWZvbnQtc2l6ZToxNXB4ICFkZWZhdWx0O1xyXG5cclxuLy8vIEBwcm9wIC0gRm9udCB3ZWlnaHQgb2YgdGhlIGJhZGdlXHJcbiRiYWRnZS1mb250LXdlaWdodDpib2xkICFkZWZhdWx0O1xyXG5cclxuXHJcbmlvbi1iYWRnZSB7LyogICovXHJcblxyXG4gIC8qIGRpc3BsYXk6IGlubGluZS1ibG9jazsqL1xyXG5cclxuICBtaW4td2lkdGg6IDE4cHg7IFxyXG4gIGZvbnQtc2l6ZTogJGJhZGdlLWZvbnQtc2l6ZTtcclxuICAvKiBmb250LXdlaWdodDogJGJhZGdlLWZvbnQtd2VpZ2h0O1xyXG4gIGxpbmUtaGVpZ2h0OiAxO1xyXG5cclxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xyXG4gIHZlcnRpY2FsLWFsaWduOiBiYXNlbGluZTsgKi9cclxufSIsImlvbi10YWItYmFyIHtcbiAgLS1iYWNrZ3JvdW5kOiAjZTNkZmRmO1xuICAtLWNvbG9yOiAjMDAwO1xufVxuXG5pb24tYmFkZ2Uge1xuICAvKiAgKi9cbiAgLyogZGlzcGxheTogaW5saW5lLWJsb2NrOyovXG4gIG1pbi13aWR0aDogMThweDtcbiAgZm9udC1zaXplOiAxNXB4O1xuICAvKiBmb250LXdlaWdodDogJGJhZGdlLWZvbnQtd2VpZ2h0O1xuICBsaW5lLWhlaWdodDogMTtcblxuICB3aGl0ZS1zcGFjZTogbm93cmFwO1xuICB2ZXJ0aWNhbC1hbGlnbjogYmFzZWxpbmU7ICovXG59Il19 */"); - -/***/ }), - -/***/ "./src/app/home/home.page.ts": -/*!***********************************!*\ - !*** ./src/app/home/home.page.ts ***! - \***********************************/ -/*! exports provided: HomePage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "HomePage", function() { return HomePage; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _services_events_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/events.service */ "./src/app/services/events.service.ts"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -/* harmony import */ var _services_processes_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../services/processes.service */ "./src/app/services/processes.service.ts"); - - - - - -let HomePage = class HomePage { - constructor(eventService, processesbackend) { - this.eventService = eventService; - this.processesbackend = processesbackend; - this.totalEvent = 0; - this.totalExpediente = 0; - } - ngOnInit() { - this.eventService.getAllEvents(Object(_angular_common__WEBPACK_IMPORTED_MODULE_3__["formatDate"])(new Date(), 'yyyy-MM-dd', 'pt') + ' 00:00:00', Object(_angular_common__WEBPACK_IMPORTED_MODULE_3__["formatDate"])(new Date(), 'yyyy-MM-dd', 'pt') + ' 23:59:59') - .subscribe(response => { - this.eventsList = response; - this.totalEvent = this.eventsList.length; - }); - this.processesbackend.GetTasksList("Expediente", true).subscribe(result => { - this.totalExpediente = result; - }); - } -}; -HomePage.ctorParameters = () => [ - { type: _services_events_service__WEBPACK_IMPORTED_MODULE_2__["EventsService"] }, - { type: _services_processes_service__WEBPACK_IMPORTED_MODULE_4__["ProcessesService"] } -]; -HomePage = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"])({ - selector: 'app-home', - template: Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! raw-loader!./home.page.html */ "./node_modules/raw-loader/dist/cjs.js!./src/app/home/home.page.html")).default, - styles: [Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! ./home.page.scss */ "./src/app/home/home.page.scss")).default] - }) -], HomePage); - - - -/***/ }), - -/***/ "./src/app/resolvers/userData.resolver.ts": -/*!************************************************!*\ - !*** ./src/app/resolvers/userData.resolver.ts ***! - \************************************************/ -/*! exports provided: UserDataResolver */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "UserDataResolver", function() { return UserDataResolver; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _services_auth_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ../services/auth.service */ "./src/app/services/auth.service.ts"); - - - -let UserDataResolver = class UserDataResolver { - constructor(authService) { - this.authService = authService; - } - resolve() { - return this.authService.getUserData(); - } -}; -UserDataResolver.ctorParameters = () => [ - { type: _services_auth_service__WEBPACK_IMPORTED_MODULE_2__["AuthService"] } -]; -UserDataResolver = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"])({ - providedIn: 'root' - }) -], UserDataResolver); - - - -/***/ }), - -/***/ "./src/app/services/events.service.ts": -/*!********************************************!*\ - !*** ./src/app/services/events.service.ts ***! - \********************************************/ -/*! exports provided: EventsService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "EventsService", function() { return EventsService; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); -/* harmony import */ var src_environments_environment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! src/environments/environment */ "./src/environments/environment.ts"); -/* harmony import */ var _services_auth_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../services/auth.service */ "./src/app/services/auth.service.ts"); - - - - - -let EventsService = class EventsService { - //lastloadedevent: Event; - constructor(http, user) { - this.http = http; - this.authheader = {}; - this.loggeduser = user.ValidatedUser; - this.headers = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpHeaders"](); - this.headers = this.headers.set('Authorization', this.loggeduser.BasicAuthKey); - } - getAllEvents(startdate, enddate) { - const geturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].apiURL + 'calendar/GetAllEvents'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("StartDate", startdate); - params = params.set("EndDate", enddate); - let options = { - headers: this.headers, - params: params - }; - return this.http.get(`${geturl}`, options); - } - getEvents(calendarname, startdate, enddate) { - const geturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].apiURL + 'calendar/GetEvents'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("CalendarName", calendarname); - params = params.set("StartDate", startdate); - params = params.set("EndDate", enddate); - let options = { - headers: this.headers, - params: params - }; - return this.http.get(`${geturl}`, options); - } - getEvent(eventid) { - let geturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].apiURL + 'Calendar/GetEvent'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("EventId", eventid); - let options = { - headers: this.headers, - params: params - }; - return this.http.get(`${geturl}`, options); - } - putEvent(event, conflictResolutionMode, sendInvitationsOrCancellationsMode) { - const puturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].apiURL + 'calendar/PutEvent'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("conflictResolutionMode", conflictResolutionMode.toString()); - params = params.set("sendInvitationsOrCancellationsMode", sendInvitationsOrCancellationsMode.toString()); - let options = { - headers: this.headers, - params: params - }; - return this.http.put(`${puturl}`, event, options); - } - postEvent(event, calendarName) { - const puturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].apiURL + 'calendar/PostEvent'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("CalendarName", calendarName); - let options = { - headers: this.headers, - params: params - }; - return this.http.post(`${puturl}`, event, options); - } - deleteEvent(eventid, deletemode) { - const puturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].apiURL + 'calendar/PostEvent'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("EventId", eventid); - params = params.set("deleteMode", deletemode.toString()); - let options = { - headers: this.headers, - params: params - }; - return this.http.delete(`${puturl}`, options); - } -}; -EventsService.ctorParameters = () => [ - { type: _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpClient"] }, - { type: _services_auth_service__WEBPACK_IMPORTED_MODULE_4__["AuthService"] } -]; -EventsService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"])({ - providedIn: 'root' - }) -], EventsService); - - - -/***/ }), - -/***/ "./src/app/services/processes.service.ts": -/*!***********************************************!*\ - !*** ./src/app/services/processes.service.ts ***! - \***********************************************/ -/*! exports provided: ProcessesService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ProcessesService", function() { return ProcessesService; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); -/* harmony import */ var _services_auth_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ../services/auth.service */ "./src/app/services/auth.service.ts"); -/* harmony import */ var src_environments_environment__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! src/environments/environment */ "./src/environments/environment.ts"); - - - - - -let ProcessesService = class ProcessesService { - constructor(http, user) { - this.http = http; - this.authheader = {}; - this.loggeduser = user.ValidatedUser; - this.headers = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpHeaders"](); - this.headers = this.headers.set('Authorization', this.loggeduser.BasicAuthKey); - } - GetTasksList(processname, onlycount) { - const geturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_4__["environment"].apiURL + 'tasks/List'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("ProcessName", processname); - params = params.set("OnlyCount", onlycount.toString()); - let options = { - headers: this.headers, - params: params - }; - return this.http.get(`${geturl}`, options); - } - GetTask(serialnumber) { - const geturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_4__["environment"].apiURL + 'tasks/Get'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("SerialNumber", serialnumber); - let options = { - headers: this.headers, - params: params - }; - return this.http.get(`${geturl}`, options); - } - GetMDOficialTasks() { - const geturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_4__["environment"].apiURL + 'tasks/GetMDOficialTasks'; - let options = { - headers: this.headers, - }; - return this.http.get(`${geturl}`, options); - } - GetMDPersonalTasks() { - const geturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_4__["environment"].apiURL + 'tasks/GetMDPersonalTasks'; - let options = { - headers: this.headers, - }; - return this.http.get(`${geturl}`, options); - } - GetToApprovedEvents(categoryname, count) { - const geturl = src_environments_environment__WEBPACK_IMPORTED_MODULE_4__["environment"].apiURL + 'Tasks/ListByCategory'; - let params = new _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpParams"](); - params = params.set("categoryname", categoryname); - params = params.set("onlyCount", count); - let options = { - headers: this.headers, - params: params - }; - return this.http.get(`${geturl}`, options); - } -}; -ProcessesService.ctorParameters = () => [ - { type: _angular_common_http__WEBPACK_IMPORTED_MODULE_2__["HttpClient"] }, - { type: _services_auth_service__WEBPACK_IMPORTED_MODULE_3__["AuthService"] } -]; -ProcessesService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"])({ - providedIn: 'root' - }) -], ProcessesService); - - - -/***/ }) - -}]); -//# sourceMappingURL=home-home-module.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/index-index-module.js.download b/src/assets/images/Gabinete Digital_files/index-index-module.js.download deleted file mode 100644 index cfed54fa8..000000000 --- a/src/assets/images/Gabinete Digital_files/index-index-module.js.download +++ /dev/null @@ -1,151 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["index-index-module"],{ - -/***/ "./node_modules/raw-loader/dist/cjs.js!./src/app/index/index.page.html": -/*!*****************************************************************************!*\ - !*** ./node_modules/raw-loader/dist/cjs.js!./src/app/index/index.page.html ***! - \*****************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\r\n \r\n\r\n"); - -/***/ }), - -/***/ "./src/app/index/index-routing.module.ts": -/*!***********************************************!*\ - !*** ./src/app/index/index-routing.module.ts ***! - \***********************************************/ -/*! exports provided: IndexPageRoutingModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IndexPageRoutingModule", function() { return IndexPageRoutingModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); -/* harmony import */ var _index_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./index.page */ "./src/app/index/index.page.ts"); - - - - -const routes = [ - { - path: '', - component: _index_page__WEBPACK_IMPORTED_MODULE_3__["IndexPage"], - /* canActivate: [IndexGuard], */ - children: [ - /*{ - path: '', - loadChildren: ()=> import('../pages/welcome/welcome.module').then(m => m.WelcomePageModule) - }, */ - { - path: '', - loadChildren: () => Promise.all(/*! import() | pages-login-login-module */[__webpack_require__.e("default~home-home-module~pages-chat-chat-module~pages-login-login-module"), __webpack_require__.e("pages-login-login-module")]).then(__webpack_require__.bind(null, /*! ../pages/login/login.module */ "./src/app/pages/login/login.module.ts")).then(m => m.LoginPageModule) - }, - ] - } -]; -let IndexPageRoutingModule = class IndexPageRoutingModule { -}; -IndexPageRoutingModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"].forChild(routes)], - exports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"]], - }) -], IndexPageRoutingModule); - - - -/***/ }), - -/***/ "./src/app/index/index.module.ts": -/*!***************************************!*\ - !*** ./src/app/index/index.module.ts ***! - \***************************************/ -/*! exports provided: IndexPageModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IndexPageModule", function() { return IndexPageModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var _index_routing_module__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./index-routing.module */ "./src/app/index/index-routing.module.ts"); -/* harmony import */ var _index_page__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./index.page */ "./src/app/index/index.page.ts"); - - - - - - - -let IndexPageModule = class IndexPageModule { -}; -IndexPageModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [ - _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], - _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormsModule"], - _ionic_angular__WEBPACK_IMPORTED_MODULE_4__["IonicModule"], - _index_routing_module__WEBPACK_IMPORTED_MODULE_5__["IndexPageRoutingModule"] - ], - declarations: [_index_page__WEBPACK_IMPORTED_MODULE_6__["IndexPage"]] - }) -], IndexPageModule); - - - -/***/ }), - -/***/ "./src/app/index/index.page.scss": -/*!***************************************!*\ - !*** ./src/app/index/index.page.scss ***! - \***************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2luZGV4L2luZGV4LnBhZ2Uuc2NzcyJ9 */"); - -/***/ }), - -/***/ "./src/app/index/index.page.ts": -/*!*************************************!*\ - !*** ./src/app/index/index.page.ts ***! - \*************************************/ -/*! exports provided: IndexPage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "IndexPage", function() { return IndexPage; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); - - -let IndexPage = class IndexPage { - constructor() { } - ngOnInit() { - } -}; -IndexPage = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"])({ - selector: 'app-index', - template: Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! raw-loader!./index.page.html */ "./node_modules/raw-loader/dist/cjs.js!./src/app/index/index.page.html")).default, - styles: [Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! ./index.page.scss */ "./src/app/index/index.page.scss")).default] - }) -], IndexPage); - - - -/***/ }) - -}]); -//# sourceMappingURL=index-index-module.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/keyboard-dd970efc-js.js.download b/src/assets/images/Gabinete Digital_files/keyboard-dd970efc-js.js.download deleted file mode 100644 index 6ff7b9aca..000000000 --- a/src/assets/images/Gabinete Digital_files/keyboard-dd970efc-js.js.download +++ /dev/null @@ -1,153 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["keyboard-dd970efc-js"],{ - -/***/ "./node_modules/@ionic/core/dist/esm/keyboard-dd970efc.js": -/*!****************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm/keyboard-dd970efc.js ***! - \****************************************************************/ -/*! exports provided: KEYBOARD_DID_CLOSE, KEYBOARD_DID_OPEN, copyVisualViewport, keyboardDidClose, keyboardDidOpen, keyboardDidResize, resetKeyboardAssist, setKeyboardClose, setKeyboardOpen, startKeyboardAssist, trackViewportChanges */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KEYBOARD_DID_CLOSE", function() { return KEYBOARD_DID_CLOSE; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "KEYBOARD_DID_OPEN", function() { return KEYBOARD_DID_OPEN; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "copyVisualViewport", function() { return copyVisualViewport; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyboardDidClose", function() { return keyboardDidClose; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyboardDidOpen", function() { return keyboardDidOpen; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "keyboardDidResize", function() { return keyboardDidResize; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "resetKeyboardAssist", function() { return resetKeyboardAssist; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setKeyboardClose", function() { return setKeyboardClose; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "setKeyboardOpen", function() { return setKeyboardOpen; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "startKeyboardAssist", function() { return startKeyboardAssist; }); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "trackViewportChanges", function() { return trackViewportChanges; }); -const KEYBOARD_DID_OPEN = 'ionKeyboardDidShow'; -const KEYBOARD_DID_CLOSE = 'ionKeyboardDidHide'; -const KEYBOARD_THRESHOLD = 150; -let previousVisualViewport = {}; -let currentVisualViewport = {}; -let keyboardOpen = false; -/** - * This is only used for tests - */ -const resetKeyboardAssist = () => { - previousVisualViewport = {}; - currentVisualViewport = {}; - keyboardOpen = false; -}; -const startKeyboardAssist = (win) => { - startNativeListeners(win); - if (!win.visualViewport) { - return; - } - currentVisualViewport = copyVisualViewport(win.visualViewport); - win.visualViewport.onresize = () => { - trackViewportChanges(win); - if (keyboardDidOpen() || keyboardDidResize(win)) { - setKeyboardOpen(win); - } - else if (keyboardDidClose(win)) { - setKeyboardClose(win); - } - }; -}; -/** - * Listen for events fired by native keyboard plugin - * in Capacitor/Cordova so devs only need to listen - * in one place. - */ -const startNativeListeners = (win) => { - win.addEventListener('keyboardDidShow', ev => setKeyboardOpen(win, ev)); - win.addEventListener('keyboardDidHide', () => setKeyboardClose(win)); -}; -const setKeyboardOpen = (win, ev) => { - fireKeyboardOpenEvent(win, ev); - keyboardOpen = true; -}; -const setKeyboardClose = (win) => { - fireKeyboardCloseEvent(win); - keyboardOpen = false; -}; -/** - * Returns `true` if the `keyboardOpen` flag is not - * set, the previous visual viewport width equal the current - * visual viewport width, and if the scaled difference - * of the previous visual viewport height minus the current - * visual viewport height is greater than KEYBOARD_THRESHOLD - * - * We need to be able to accommodate users who have zooming - * enabled in their browser (or have zoomed in manually) which - * is why we take into account the current visual viewport's - * scale value. - */ -const keyboardDidOpen = () => { - const scaledHeightDifference = (previousVisualViewport.height - currentVisualViewport.height) * currentVisualViewport.scale; - return (!keyboardOpen && - previousVisualViewport.width === currentVisualViewport.width && - scaledHeightDifference > KEYBOARD_THRESHOLD); -}; -/** - * Returns `true` if the keyboard is open, - * but the keyboard did not close - */ -const keyboardDidResize = (win) => { - return keyboardOpen && !keyboardDidClose(win); -}; -/** - * Determine if the keyboard was closed - * Returns `true` if the `keyboardOpen` flag is set and - * the current visual viewport height equals the - * layout viewport height. - */ -const keyboardDidClose = (win) => { - return keyboardOpen && currentVisualViewport.height === win.innerHeight; -}; -/** - * Dispatch a keyboard open event - */ -const fireKeyboardOpenEvent = (win, nativeEv) => { - const keyboardHeight = nativeEv ? nativeEv.keyboardHeight : win.innerHeight - currentVisualViewport.height; - const ev = new CustomEvent(KEYBOARD_DID_OPEN, { - detail: { keyboardHeight } - }); - win.dispatchEvent(ev); -}; -/** - * Dispatch a keyboard close event - */ -const fireKeyboardCloseEvent = (win) => { - const ev = new CustomEvent(KEYBOARD_DID_CLOSE); - win.dispatchEvent(ev); -}; -/** - * Given a window object, create a copy of - * the current visual and layout viewport states - * while also preserving the previous visual and - * layout viewport states - */ -const trackViewportChanges = (win) => { - previousVisualViewport = Object.assign({}, currentVisualViewport); - currentVisualViewport = copyVisualViewport(win.visualViewport); -}; -/** - * Creates a deep copy of the visual viewport - * at a given state - */ -const copyVisualViewport = (visualViewport) => { - return { - width: Math.round(visualViewport.width), - height: Math.round(visualViewport.height), - offsetTop: visualViewport.offsetTop, - offsetLeft: visualViewport.offsetLeft, - pageTop: visualViewport.pageTop, - pageLeft: visualViewport.pageLeft, - scale: visualViewport.scale - }; -}; - - - - -/***/ }) - -}]); -//# sourceMappingURL=keyboard-dd970efc-js.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/main.js.download b/src/assets/images/Gabinete Digital_files/main.js.download deleted file mode 100644 index e065824ee..000000000 --- a/src/assets/images/Gabinete Digital_files/main.js.download +++ /dev/null @@ -1,561 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["main"],{ - -/***/ "./$$_lazy_route_resource lazy recursive": -/*!******************************************************!*\ - !*** ./$$_lazy_route_resource lazy namespace object ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -function webpackEmptyAsyncContext(req) { - // Here Promise.resolve().then() is used instead of new Promise() to prevent - // uncaught exception popping up in devtools - return Promise.resolve().then(function() { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - }); -} -webpackEmptyAsyncContext.keys = function() { return []; }; -webpackEmptyAsyncContext.resolve = webpackEmptyAsyncContext; -module.exports = webpackEmptyAsyncContext; -webpackEmptyAsyncContext.id = "./$$_lazy_route_resource lazy recursive"; - -/***/ }), - -/***/ "./node_modules/@ionic/core/dist/esm lazy recursive ^\\.\\/.*\\.entry\\.js$ include: \\.entry\\.js$ exclude: \\.system\\.entry\\.js$": -/*!*****************************************************************************************************************************************!*\ - !*** ./node_modules/@ionic/core/dist/esm lazy ^\.\/.*\.entry\.js$ include: \.entry\.js$ exclude: \.system\.entry\.js$ namespace object ***! - \*****************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./ion-action-sheet.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-action-sheet.entry.js", - "common", - 0 - ], - "./ion-alert.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-alert.entry.js", - "common", - 1 - ], - "./ion-app_8.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-app_8.entry.js", - "common", - 2 - ], - "./ion-avatar_3.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-avatar_3.entry.js", - "common", - 3 - ], - "./ion-back-button.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-back-button.entry.js", - "common", - 4 - ], - "./ion-backdrop.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-backdrop.entry.js", - 5 - ], - "./ion-button_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-button_2.entry.js", - "common", - 6 - ], - "./ion-card_5.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-card_5.entry.js", - "common", - 7 - ], - "./ion-checkbox.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-checkbox.entry.js", - "common", - 8 - ], - "./ion-chip.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-chip.entry.js", - "common", - 9 - ], - "./ion-col_3.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-col_3.entry.js", - 10 - ], - "./ion-datetime_3.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-datetime_3.entry.js", - "common", - 11 - ], - "./ion-fab_3.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-fab_3.entry.js", - "common", - 12 - ], - "./ion-img.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-img.entry.js", - 13 - ], - "./ion-infinite-scroll_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-infinite-scroll_2.entry.js", - 14 - ], - "./ion-input.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-input.entry.js", - "common", - 15 - ], - "./ion-item-option_3.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-item-option_3.entry.js", - "common", - 16 - ], - "./ion-item_8.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-item_8.entry.js", - "common", - 17 - ], - "./ion-loading.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-loading.entry.js", - "common", - 18 - ], - "./ion-menu_3.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-menu_3.entry.js", - "common", - 19 - ], - "./ion-modal.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-modal.entry.js", - "common", - 20 - ], - "./ion-nav_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-nav_2.entry.js", - "common", - 21 - ], - "./ion-popover.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-popover.entry.js", - "common", - 22 - ], - "./ion-progress-bar.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-progress-bar.entry.js", - "common", - 23 - ], - "./ion-radio_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-radio_2.entry.js", - "common", - 24 - ], - "./ion-range.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-range.entry.js", - "common", - 25 - ], - "./ion-refresher_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-refresher_2.entry.js", - "common", - 26 - ], - "./ion-reorder_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-reorder_2.entry.js", - "common", - 27 - ], - "./ion-ripple-effect.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-ripple-effect.entry.js", - 28 - ], - "./ion-route_4.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-route_4.entry.js", - "common", - 29 - ], - "./ion-searchbar.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-searchbar.entry.js", - "common", - 30 - ], - "./ion-segment_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-segment_2.entry.js", - "common", - 31 - ], - "./ion-select_3.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-select_3.entry.js", - "common", - 32 - ], - "./ion-slide_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-slide_2.entry.js", - 33 - ], - "./ion-spinner.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-spinner.entry.js", - "common", - 34 - ], - "./ion-split-pane.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-split-pane.entry.js", - 35 - ], - "./ion-tab-bar_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-tab-bar_2.entry.js", - "common", - 36 - ], - "./ion-tab_2.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-tab_2.entry.js", - "common", - 37 - ], - "./ion-text.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-text.entry.js", - "common", - 38 - ], - "./ion-textarea.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-textarea.entry.js", - "common", - 39 - ], - "./ion-toast.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-toast.entry.js", - "common", - 40 - ], - "./ion-toggle.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-toggle.entry.js", - "common", - 41 - ], - "./ion-virtual-scroll.entry.js": [ - "./node_modules/@ionic/core/dist/esm/ion-virtual-scroll.entry.js", - 42 - ] -}; -function webpackAsyncContext(req) { - if(!__webpack_require__.o(map, req)) { - return Promise.resolve().then(function() { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - }); - } - - var ids = map[req], id = ids[0]; - return Promise.all(ids.slice(1).map(__webpack_require__.e)).then(function() { - return __webpack_require__(id); - }); -} -webpackAsyncContext.keys = function webpackAsyncContextKeys() { - return Object.keys(map); -}; -webpackAsyncContext.id = "./node_modules/@ionic/core/dist/esm lazy recursive ^\\.\\/.*\\.entry\\.js$ include: \\.entry\\.js$ exclude: \\.system\\.entry\\.js$"; -module.exports = webpackAsyncContext; - -/***/ }), - -/***/ "./node_modules/raw-loader/dist/cjs.js!./src/app/app.component.html": -/*!**************************************************************************!*\ - !*** ./node_modules/raw-loader/dist/cjs.js!./src/app/app.component.html ***! - \**************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\r\n \r\n\r\n"); - -/***/ }), - -/***/ "./node_modules/webpack/hot sync ^\\.\\/log$": -/*!*************************************************!*\ - !*** (webpack)/hot sync nonrecursive ^\.\/log$ ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var map = { - "./log": "./node_modules/webpack/hot/log.js" -}; - - -function webpackContext(req) { - var id = webpackContextResolve(req); - return __webpack_require__(id); -} -function webpackContextResolve(req) { - if(!__webpack_require__.o(map, req)) { - var e = new Error("Cannot find module '" + req + "'"); - e.code = 'MODULE_NOT_FOUND'; - throw e; - } - return map[req]; -} -webpackContext.keys = function webpackContextKeys() { - return Object.keys(map); -}; -webpackContext.resolve = webpackContextResolve; -module.exports = webpackContext; -webpackContext.id = "./node_modules/webpack/hot sync ^\\.\\/log$"; - -/***/ }), - -/***/ "./src/app/app-routing.module.ts": -/*!***************************************!*\ - !*** ./src/app/app-routing.module.ts ***! - \***************************************/ -/*! exports provided: AppRoutingModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppRoutingModule", function() { return AppRoutingModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); - - - -const routes = [ - { - path: '', - loadChildren: () => __webpack_require__.e(/*! import() | index-index-module */ "index-index-module").then(__webpack_require__.bind(null, /*! ./index/index.module */ "./src/app/index/index.module.ts")).then(m => m.IndexPageModule) - }, - { - path: '', - loadChildren: () => Promise.all(/*! import() | home-home-module */[__webpack_require__.e("default~home-home-module~pages-chat-chat-module~pages-login-login-module"), __webpack_require__.e("home-home-module")]).then(__webpack_require__.bind(null, /*! ./home/home.module */ "./src/app/home/home.module.ts")).then(m => m.HomePageModule) - }, - { - path: 'chat', - loadChildren: () => Promise.all(/*! import() | pages-chat-chat-module */[__webpack_require__.e("default~home-home-module~pages-chat-chat-module~pages-login-login-module"), __webpack_require__.e("pages-chat-chat-module")]).then(__webpack_require__.bind(null, /*! ./pages/chat/chat.module */ "./src/app/pages/chat/chat.module.ts")).then(m => m.ChatPageModule) - }, -]; -let AppRoutingModule = class AppRoutingModule { -}; -AppRoutingModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [ - _angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"].forRoot(routes, { preloadingStrategy: _angular_router__WEBPACK_IMPORTED_MODULE_2__["PreloadAllModules"] }) - ], - exports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"]] - }) -], AppRoutingModule); - - - -/***/ }), - -/***/ "./src/app/app.component.scss": -/*!************************************!*\ - !*** ./src/app/app.component.scss ***! - \************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJzcmMvYXBwL2FwcC5jb21wb25lbnQuc2NzcyJ9 */"); - -/***/ }), - -/***/ "./src/app/app.component.ts": -/*!**********************************!*\ - !*** ./src/app/app.component.ts ***! - \**********************************/ -/*! exports provided: AppComponent */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppComponent", function() { return AppComponent; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var _ionic_native_splash_screen_ngx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @ionic-native/splash-screen/ngx */ "./node_modules/@ionic-native/splash-screen/__ivy_ngcc__/ngx/index.js"); -/* harmony import */ var _ionic_native_status_bar_ngx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ionic-native/status-bar/ngx */ "./node_modules/@ionic-native/status-bar/__ivy_ngcc__/ngx/index.js"); - - - - - -let AppComponent = class AppComponent { - constructor(platform, splashScreen, statusBar) { - this.platform = platform; - this.splashScreen = splashScreen; - this.statusBar = statusBar; - this.initializeApp(); - } - initializeApp() { - this.platform.ready().then(() => { - this.statusBar.styleDefault(); - this.splashScreen.hide(); - }); - } -}; -AppComponent.ctorParameters = () => [ - { type: _ionic_angular__WEBPACK_IMPORTED_MODULE_2__["Platform"] }, - { type: _ionic_native_splash_screen_ngx__WEBPACK_IMPORTED_MODULE_3__["SplashScreen"] }, - { type: _ionic_native_status_bar_ngx__WEBPACK_IMPORTED_MODULE_4__["StatusBar"] } -]; -AppComponent = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"])({ - selector: 'app-root', - template: Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! raw-loader!./app.component.html */ "./node_modules/raw-loader/dist/cjs.js!./src/app/app.component.html")).default, - styles: [Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! ./app.component.scss */ "./src/app/app.component.scss")).default] - }) -], AppComponent); - - - -/***/ }), - -/***/ "./src/app/app.module.ts": -/*!*******************************!*\ - !*** ./src/app/app.module.ts ***! - \*******************************/ -/*! exports provided: AppModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AppModule", function() { return AppModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/platform-browser */ "./node_modules/@angular/platform-browser/__ivy_ngcc__/fesm2015/platform-browser.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var _ionic_native_splash_screen_ngx__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! @ionic-native/splash-screen/ngx */ "./node_modules/@ionic-native/splash-screen/__ivy_ngcc__/ngx/index.js"); -/* harmony import */ var _ionic_native_status_bar_ngx__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ionic-native/status-bar/ngx */ "./node_modules/@ionic-native/status-bar/__ivy_ngcc__/ngx/index.js"); -/* harmony import */ var _app_routing_module__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./app-routing.module */ "./src/app/app-routing.module.ts"); -/* harmony import */ var _app_component__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./app.component */ "./src/app/app.component.ts"); -/* harmony import */ var _angular_common_http__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! @angular/common/http */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/http.js"); -/* harmony import */ var _ionic_native_in_app_browser_ngx__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! @ionic-native/in-app-browser/ngx */ "./node_modules/@ionic-native/in-app-browser/__ivy_ngcc__/ngx/index.js"); -/* harmony import */ var ngx_socket_io__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ngx-socket-io */ "./node_modules/ngx-socket-io/__ivy_ngcc__/fesm2015/ngx-socket-io.js"); - - - - - - - - - - - - -const config = { url: 'http://localhost:3001', options: {} }; -let AppModule = class AppModule { -}; -AppModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - declarations: [_app_component__WEBPACK_IMPORTED_MODULE_8__["AppComponent"]], - entryComponents: [], - imports: [_angular_platform_browser__WEBPACK_IMPORTED_MODULE_2__["BrowserModule"], _ionic_angular__WEBPACK_IMPORTED_MODULE_4__["IonicModule"].forRoot(), _app_routing_module__WEBPACK_IMPORTED_MODULE_7__["AppRoutingModule"], _angular_common_http__WEBPACK_IMPORTED_MODULE_9__["HttpClientModule"], ngx_socket_io__WEBPACK_IMPORTED_MODULE_11__["SocketIoModule"].forRoot(config)], - providers: [ - _ionic_native_status_bar_ngx__WEBPACK_IMPORTED_MODULE_6__["StatusBar"], - _ionic_native_splash_screen_ngx__WEBPACK_IMPORTED_MODULE_5__["SplashScreen"], - _angular_common_http__WEBPACK_IMPORTED_MODULE_9__["HttpClientModule"], - { provide: _angular_router__WEBPACK_IMPORTED_MODULE_3__["RouteReuseStrategy"], useClass: _ionic_angular__WEBPACK_IMPORTED_MODULE_4__["IonicRouteStrategy"] }, - _ionic_native_in_app_browser_ngx__WEBPACK_IMPORTED_MODULE_10__["InAppBrowser"], - ], - bootstrap: [_app_component__WEBPACK_IMPORTED_MODULE_8__["AppComponent"]], - schemas: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["CUSTOM_ELEMENTS_SCHEMA"]] - }) -], AppModule); - - - -/***/ }), - -/***/ "./src/environments/environment.ts": -/*!*****************************************!*\ - !*** ./src/environments/environment.ts ***! - \*****************************************/ -/*! exports provided: environment */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "environment", function() { return environment; }); -// This file can be replaced during build by using the `fileReplacements` array. -// `ng build --prod` replaces `environment.ts` with `environment.prod.ts`. -// The list of file replacements can be found in `angular.json`. -const environment = { - production: false, - apiURL: 'http://gpr-dev-01.gabinetedigital.local/GabineteDigital.Services/V3/api/', - apiChatUrl: 'http://192.168.100.111:3000/api/v1/', - domain: 'gabinetedigital.local', - defaultuser: 'paulo.pinto', - defaultuserpwd: 'tabteste@006' -}; -/* - * For easier debugging in development mode, you can import the following file - * to ignore zone related error stack frames such as `zone.run`, `zoneDelegate.invokeTask`. - * - * This import should be commented out in production mode because it will have a negative impact - * on performance if an error is thrown. - */ -// import 'zone.js/dist/zone-error'; // Included with Angular CLI. - - -/***/ }), - -/***/ "./src/main.ts": -/*!*********************!*\ - !*** ./src/main.ts ***! - \*********************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/platform-browser-dynamic */ "./node_modules/@angular/platform-browser-dynamic/__ivy_ngcc__/fesm2015/platform-browser-dynamic.js"); -/* harmony import */ var _app_app_module__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./app/app.module */ "./src/app/app.module.ts"); -/* harmony import */ var _environments_environment__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./environments/environment */ "./src/environments/environment.ts"); - - - - -if (_environments_environment__WEBPACK_IMPORTED_MODULE_3__["environment"].production) { - Object(_angular_core__WEBPACK_IMPORTED_MODULE_0__["enableProdMode"])(); -} -Object(_angular_platform_browser_dynamic__WEBPACK_IMPORTED_MODULE_1__["platformBrowserDynamic"])().bootstrapModule(_app_app_module__WEBPACK_IMPORTED_MODULE_2__["AppModule"]) - .catch(err => console.log(err)); - - -/***/ }), - -/***/ 0: -/*!**********************************************************************************************************!*\ - !*** multi (webpack)-dev-server/client?http://0.0.0.0:0/sockjs-node&sockPath=/sockjs-node ./src/main.ts ***! - \**********************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! C:\Users\tiago.kayaya\development\gabinete-digital\node_modules\webpack-dev-server\client\index.js?http://0.0.0.0:0/sockjs-node&sockPath=/sockjs-node */"./node_modules/webpack-dev-server/client/index.js?http://0.0.0.0:0/sockjs-node&sockPath=/sockjs-node"); -module.exports = __webpack_require__(/*! C:\Users\tiago.kayaya\development\gabinete-digital\src\main.ts */"./src/main.ts"); - - -/***/ }), - -/***/ 1: -/*!********************!*\ - !*** ws (ignored) ***! - \********************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -/* (ignored) */ - -/***/ }) - -},[[0,"runtime","vendor"]]]); -//# sourceMappingURL=main.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/pages-gabinete-digital-gabinete-digital-module.js.download b/src/assets/images/Gabinete Digital_files/pages-gabinete-digital-gabinete-digital-module.js.download deleted file mode 100644 index 5662f5b86..000000000 --- a/src/assets/images/Gabinete Digital_files/pages-gabinete-digital-gabinete-digital-module.js.download +++ /dev/null @@ -1,196 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["pages-gabinete-digital-gabinete-digital-module"],{ - -/***/ "./node_modules/raw-loader/dist/cjs.js!./src/app/pages/gabinete-digital/gabinete-digital.page.html": -/*!*********************************************************************************************************!*\ - !*** ./node_modules/raw-loader/dist/cjs.js!./src/app/pages/gabinete-digital/gabinete-digital.page.html ***! - \*********************************************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\r\n \r\n Gabinete Digital\r\n \r\n\r\n\r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Eventos para Aprovação\r\n \r\n \r\n Minha agenda\r\n {{count_ev_md}}\r\n \r\n \r\n Agenda do Presidente\r\n {{count_ev_pr}}\r\n \r\n \r\n \r\n \r\n \r\n \r\n Expediente\r\n \r\n \r\n Correspondência\r\n {{ count_exp_dailywork }}\r\n \r\n \r\n Pedidos de parecer\r\n {{count_exp_pp}}\r\n \r\n \r\n Pedidos de deferimento\r\n {{count_exp_pd}}\r\n \r\n \r\n \r\n\r\n\r\n \r\n Expediente para o PR\r\n \r\n \r\n Correspondência\r\n {{count_de_pr}}\r\n \r\n \r\n \r\n\r\n\r\n \r\n Despachos Efectuados\r\n \r\n \r\n Presidente da República\r\n {{count_de_pr}}\r\n \r\n \r\n \r\n\r\n\r\n \r\n Diplomas\r\n \r\n \r\n Por validar (MDGPR)\r\n {{count_dip_pv}}\r\n \r\n \r\n Assinados pelo PR\r\n {{count_dip_apr}}\r\n \r\n \r\n \r\n\r\n\r\n\r\n"); - -/***/ }), - -/***/ "./src/app/pages/gabinete-digital/gabinete-digital-routing.module.ts": -/*!***************************************************************************!*\ - !*** ./src/app/pages/gabinete-digital/gabinete-digital-routing.module.ts ***! - \***************************************************************************/ -/*! exports provided: GabineteDigitalPageRoutingModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GabineteDigitalPageRoutingModule", function() { return GabineteDigitalPageRoutingModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); -/* harmony import */ var _gabinete_digital_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./gabinete-digital.page */ "./src/app/pages/gabinete-digital/gabinete-digital.page.ts"); - - - - -const routes = [ - { - path: '', - component: _gabinete_digital_page__WEBPACK_IMPORTED_MODULE_3__["GabineteDigitalPage"] - }, - { - path: 'expediente', - loadChildren: () => Promise.all(/*! import() | expediente-expediente-module */[__webpack_require__.e("default~expediente-expediente-module~pages-agenda-agenda-module"), __webpack_require__.e("expediente-expediente-module")]).then(__webpack_require__.bind(null, /*! ./expediente/expediente.module */ "./src/app/pages/gabinete-digital/expediente/expediente.module.ts")).then(m => m.ExpedientePageModule) - }, - { - path: 'event-list', - loadChildren: () => Promise.all(/*! import() | event-list-event-list-module */[__webpack_require__.e("common"), __webpack_require__.e("event-list-event-list-module")]).then(__webpack_require__.bind(null, /*! ./event-list/event-list.module */ "./src/app/pages/gabinete-digital/event-list/event-list.module.ts")).then(m => m.EventListPageModule) - }, - { - path: 'event-list-pr', - loadChildren: () => __webpack_require__.e(/*! import() | event-list-pr-event-list-pr-module */ "event-list-pr-event-list-pr-module").then(__webpack_require__.bind(null, /*! ./event-list-pr/event-list-pr.module */ "./src/app/pages/gabinete-digital/event-list-pr/event-list-pr.module.ts")).then(m => m.EventListPrPageModule) - } -]; -let GabineteDigitalPageRoutingModule = class GabineteDigitalPageRoutingModule { -}; -GabineteDigitalPageRoutingModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"].forChild(routes)], - exports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"]], - }) -], GabineteDigitalPageRoutingModule); - - - -/***/ }), - -/***/ "./src/app/pages/gabinete-digital/gabinete-digital.module.ts": -/*!*******************************************************************!*\ - !*** ./src/app/pages/gabinete-digital/gabinete-digital.module.ts ***! - \*******************************************************************/ -/*! exports provided: GabineteDigitalPageModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GabineteDigitalPageModule", function() { return GabineteDigitalPageModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var _gabinete_digital_routing_module__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./gabinete-digital-routing.module */ "./src/app/pages/gabinete-digital/gabinete-digital-routing.module.ts"); -/* harmony import */ var _gabinete_digital_page__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./gabinete-digital.page */ "./src/app/pages/gabinete-digital/gabinete-digital.page.ts"); - - - - - - - -/* */ -let GabineteDigitalPageModule = class GabineteDigitalPageModule { -}; -GabineteDigitalPageModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [ - _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], - _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormsModule"], - _ionic_angular__WEBPACK_IMPORTED_MODULE_4__["IonicModule"], - /* */ - _gabinete_digital_routing_module__WEBPACK_IMPORTED_MODULE_5__["GabineteDigitalPageRoutingModule"] - ], - declarations: [_gabinete_digital_page__WEBPACK_IMPORTED_MODULE_6__["GabineteDigitalPage"]], - schemas: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["CUSTOM_ELEMENTS_SCHEMA"]] - }) -], GabineteDigitalPageModule); - - - -/***/ }), - -/***/ "./src/app/pages/gabinete-digital/gabinete-digital.page.scss": -/*!*******************************************************************!*\ - !*** ./src/app/pages/gabinete-digital/gabinete-digital.page.scss ***! - \*******************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = (":host ion-card-title {\n text-align: center;\n}\n:host ion-card {\n background-color: #d4d5ca;\n border-radius: 20px;\n}\n:host ion-item {\n --ion-background-color:#dae3f3;\n margin-bottom: 10px;\n border-radius: 5px;\n}\n:host ion-button {\n color: #000;\n --background:none;\n --border-color: none;\n --box-shadow:none;\n}\n:host ion-label {\n padding: 10px;\n}\n.ion-item-change-color {\n --ion-background-color:#fff2cc !important;\n margin-bottom: 10px;\n border-radius: 5px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcGFnZXMvZ2FiaW5ldGUtZGlnaXRhbC9DOlxcVXNlcnNcXHRpYWdvLmtheWF5YVxcZGV2ZWxvcG1lbnRcXGdhYmluZXRlLWRpZ2l0YWwvc3JjXFxhcHBcXHBhZ2VzXFxnYWJpbmV0ZS1kaWdpdGFsXFxnYWJpbmV0ZS1kaWdpdGFsLnBhZ2Uuc2NzcyIsInNyYy9hcHAvcGFnZXMvZ2FiaW5ldGUtZGlnaXRhbC9nYWJpbmV0ZS1kaWdpdGFsLnBhZ2Uuc2NzcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDRTtFQUNJLGtCQUFBO0FDQU47QURHQTtFQUNFLHlCQUFBO0VBQ0EsbUJBQUE7QUNERjtBREdBO0VBQ0UsOEJBQUE7RUFDQSxtQkFBQTtFQUNBLGtCQUFBO0FDREY7QURHQTtFQUNHLFdBQUE7RUFDRCxpQkFBQTtFQUNBLG9CQUFBO0VBQ0EsaUJBQUE7QUNERjtBREdBO0VBQ0csYUFBQTtBQ0RIO0FESUE7RUFDRSx5Q0FBQTtFQUNBLG1CQUFBO0VBQ0Esa0JBQUE7QUNERiIsImZpbGUiOiJzcmMvYXBwL3BhZ2VzL2dhYmluZXRlLWRpZ2l0YWwvZ2FiaW5ldGUtZGlnaXRhbC5wYWdlLnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyI6aG9zdHtcclxuICBpb24tY2FyZC10aXRsZXtcclxuICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xyXG4gIH1cclxuXHJcbmlvbi1jYXJke1xyXG4gIGJhY2tncm91bmQtY29sb3I6ICNkNGQ1Y2E7XHJcbiAgYm9yZGVyLXJhZGl1czogMjBweDtcclxufVxyXG5pb24taXRlbXtcclxuICAtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yOiNkYWUzZjM7XHJcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcclxuICBib3JkZXItcmFkaXVzOiA1cHg7XHJcbn1cclxuaW9uLWJ1dHRvbntcclxuICAgY29sb3I6ICMwMDA7XHJcbiAgLS1iYWNrZ3JvdW5kOm5vbmU7XHJcbiAgLS1ib3JkZXItY29sb3I6IG5vbmU7XHJcbiAgLS1ib3gtc2hhZG93Om5vbmU7XHJcbn1cclxuaW9uLWxhYmVse1xyXG4gICBwYWRkaW5nOiAxMHB4O1xyXG59XHJcbn1cclxuLmlvbi1pdGVtLWNoYW5nZS1jb2xvcntcclxuICAtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yOiNmZmYyY2MgIWltcG9ydGFudDtcclxuICBtYXJnaW4tYm90dG9tOiAxMHB4O1xyXG4gIGJvcmRlci1yYWRpdXM6IDVweDtcclxufSIsIjpob3N0IGlvbi1jYXJkLXRpdGxlIHtcbiAgdGV4dC1hbGlnbjogY2VudGVyO1xufVxuOmhvc3QgaW9uLWNhcmQge1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjZDRkNWNhO1xuICBib3JkZXItcmFkaXVzOiAyMHB4O1xufVxuOmhvc3QgaW9uLWl0ZW0ge1xuICAtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yOiNkYWUzZjM7XG4gIG1hcmdpbi1ib3R0b206IDEwcHg7XG4gIGJvcmRlci1yYWRpdXM6IDVweDtcbn1cbjpob3N0IGlvbi1idXR0b24ge1xuICBjb2xvcjogIzAwMDtcbiAgLS1iYWNrZ3JvdW5kOm5vbmU7XG4gIC0tYm9yZGVyLWNvbG9yOiBub25lO1xuICAtLWJveC1zaGFkb3c6bm9uZTtcbn1cbjpob3N0IGlvbi1sYWJlbCB7XG4gIHBhZGRpbmc6IDEwcHg7XG59XG5cbi5pb24taXRlbS1jaGFuZ2UtY29sb3Ige1xuICAtLWlvbi1iYWNrZ3JvdW5kLWNvbG9yOiNmZmYyY2MgIWltcG9ydGFudDtcbiAgbWFyZ2luLWJvdHRvbTogMTBweDtcbiAgYm9yZGVyLXJhZGl1czogNXB4O1xufSJdfQ== */"); - -/***/ }), - -/***/ "./src/app/pages/gabinete-digital/gabinete-digital.page.ts": -/*!*****************************************************************!*\ - !*** ./src/app/pages/gabinete-digital/gabinete-digital.page.ts ***! - \*****************************************************************/ -/*! exports provided: GabineteDigitalPage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "GabineteDigitalPage", function() { return GabineteDigitalPage; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var src_app_services_processes_service__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! src/app/services/processes.service */ "./src/app/services/processes.service.ts"); -/* harmony import */ var src_app_services_alert_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! src/app/services/alert.service */ "./src/app/services/alert.service.ts"); - - - - -let GabineteDigitalPage = class GabineteDigitalPage { - constructor(processesbackend, alertService) { - this.processesbackend = processesbackend; - this.alertService = alertService; - } - ngOnInit() { - this.LoadCounts(); - console.log('cheguei'); - } - LoadCounts() { - this.showLoader = true; - this.processesbackend.GetTasksList("Expediente", true).subscribe(result => { - this.showLoader = false; - this.count_exp_dailywork = result; - }); - this.processesbackend.GetToApprovedEvents('PR', 'true').subscribe(res => { - this.count_ev_pr = res; - }); - this.processesbackend.GetToApprovedEvents('MDGPR', 'true').subscribe(res => { - this.count_ev_md = res; - }); - this.count_exp_pp = "-"; - this.count_exp_pd = "-"; - this.count_dip_apr = "-"; - this.count_dip_pv = "-"; - this.count_de_pr = "-"; - this.count_ev_md = '-'; - } - doRefresh(event) { - this.LoadCounts(); - setTimeout(() => { - event.target.complete(); - }, 2000); - } - notImplemented() { - this.alertService.presentAlert('Funcionalidade em desenvolvimento'); - } -}; -GabineteDigitalPage.ctorParameters = () => [ - { type: src_app_services_processes_service__WEBPACK_IMPORTED_MODULE_2__["ProcessesService"] }, - { type: src_app_services_alert_service__WEBPACK_IMPORTED_MODULE_3__["AlertService"] } -]; -GabineteDigitalPage = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"])({ - selector: 'app-gabinete-digital', - template: Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! raw-loader!./gabinete-digital.page.html */ "./node_modules/raw-loader/dist/cjs.js!./src/app/pages/gabinete-digital/gabinete-digital.page.html")).default, - styles: [Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! ./gabinete-digital.page.scss */ "./src/app/pages/gabinete-digital/gabinete-digital.page.scss")).default] - }) -], GabineteDigitalPage); - - - -/***/ }) - -}]); -//# sourceMappingURL=pages-gabinete-digital-gabinete-digital-module.js.map diff --git a/src/assets/images/Gabinete Digital_files/pages-login-login-module.js.download b/src/assets/images/Gabinete Digital_files/pages-login-login-module.js.download deleted file mode 100644 index 8b254b5a5..000000000 --- a/src/assets/images/Gabinete Digital_files/pages-login-login-module.js.download +++ /dev/null @@ -1,281 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["pages-login-login-module"],{ - -/***/ "./node_modules/raw-loader/dist/cjs.js!./src/app/pages/login/login.page.html": -/*!***********************************************************************************!*\ - !*** ./node_modules/raw-loader/dist/cjs.js!./src/app/pages/login/login.page.html ***! - \***********************************************************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = ("\r\n
\r\n
\r\n logo\r\n
\r\n

Inicie a sessão

\r\n
\r\n \r\n \r\n Nome de utilizador\r\n \r\n \r\n \r\n Palavra-passe\r\n \r\n \r\n Iniciar\r\n \r\n
\r\n
\r\n
\r\n"); - -/***/ }), - -/***/ "./src/app/pages/login/login-routing.module.ts": -/*!*****************************************************!*\ - !*** ./src/app/pages/login/login-routing.module.ts ***! - \*****************************************************/ -/*! exports provided: LoginPageRoutingModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginPageRoutingModule", function() { return LoginPageRoutingModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); -/* harmony import */ var _login_page__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./login.page */ "./src/app/pages/login/login.page.ts"); - - - - -const routes = [ - { - path: '', - component: _login_page__WEBPACK_IMPORTED_MODULE_3__["LoginPage"] - } -]; -let LoginPageRoutingModule = class LoginPageRoutingModule { -}; -LoginPageRoutingModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"].forChild(routes)], - exports: [_angular_router__WEBPACK_IMPORTED_MODULE_2__["RouterModule"]], - }) -], LoginPageRoutingModule); - - - -/***/ }), - -/***/ "./src/app/pages/login/login.module.ts": -/*!*********************************************!*\ - !*** ./src/app/pages/login/login.module.ts ***! - \*********************************************/ -/*! exports provided: LoginPageModule */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginPageModule", function() { return LoginPageModule; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_common__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/common */ "./node_modules/@angular/common/__ivy_ngcc__/fesm2015/common.js"); -/* harmony import */ var _angular_forms__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! @angular/forms */ "./node_modules/@angular/forms/__ivy_ngcc__/fesm2015/forms.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var _login_routing_module__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./login-routing.module */ "./src/app/pages/login/login-routing.module.ts"); -/* harmony import */ var _login_page__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./login.page */ "./src/app/pages/login/login.page.ts"); - - - - - - - -let LoginPageModule = class LoginPageModule { -}; -LoginPageModule = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["NgModule"])({ - imports: [ - _angular_common__WEBPACK_IMPORTED_MODULE_2__["CommonModule"], - _angular_forms__WEBPACK_IMPORTED_MODULE_3__["FormsModule"], - _ionic_angular__WEBPACK_IMPORTED_MODULE_4__["IonicModule"], - _login_routing_module__WEBPACK_IMPORTED_MODULE_5__["LoginPageRoutingModule"] - ], - declarations: [_login_page__WEBPACK_IMPORTED_MODULE_6__["LoginPage"]], - schemas: [_angular_core__WEBPACK_IMPORTED_MODULE_1__["CUSTOM_ELEMENTS_SCHEMA"]] - }) -], LoginPageModule); - - - -/***/ }), - -/***/ "./src/app/pages/login/login.page.scss": -/*!*********************************************!*\ - !*** ./src/app/pages/login/login.page.scss ***! - \*********************************************/ -/*! exports provided: default */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony default export */ __webpack_exports__["default"] = (".wrapper {\n margin: 0 auto;\n}\n\n.div-logo {\n width: 270px;\n margin: 0 auto;\n padding-bottom: 15px;\n}\n\n.div-logo img {\n width: 100%;\n}\n\nform {\n /* border: 1px solid red; */\n padding: 10px;\n}\n\n.wrapper ion-label {\n font-size: 20px;\n}\n\n.wrapper ion-input {\n font-size: 22px;\n}\n\n.wrapper ion-button {\n font-size: medium;\n margin-top: 25px;\n}\n/*# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInNyYy9hcHAvcGFnZXMvbG9naW4vQzpcXFVzZXJzXFx0aWFnby5rYXlheWFcXGRldmVsb3BtZW50XFxnYWJpbmV0ZS1kaWdpdGFsL3NyY1xcYXBwXFxwYWdlc1xcbG9naW5cXGxvZ2luLnBhZ2Uuc2NzcyIsInNyYy9hcHAvcGFnZXMvbG9naW4vbG9naW4ucGFnZS5zY3NzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBO0VBQ0ksY0FBQTtBQ0NKOztBRENBO0VBQ0ksWUFBQTtFQUNBLGNBQUE7RUFDQSxvQkFBQTtBQ0VKOztBREFBO0VBQ0ksV0FBQTtBQ0dKOztBRERBO0VBQ0ksMkJBQUE7RUFDQSxhQUFBO0FDSUo7O0FERkE7RUFDSSxlQUFBO0FDS0o7O0FESEE7RUFDSSxlQUFBO0FDTUo7O0FESkE7RUFDSSxpQkFBQTtFQUNBLGdCQUFBO0FDT0oiLCJmaWxlIjoic3JjL2FwcC9wYWdlcy9sb2dpbi9sb2dpbi5wYWdlLnNjc3MiLCJzb3VyY2VzQ29udGVudCI6WyIud3JhcHBlcntcclxuICAgIG1hcmdpbjogMCBhdXRvO1xyXG59XHJcbi5kaXYtbG9nb3tcclxuICAgIHdpZHRoOiAyNzBweDtcclxuICAgIG1hcmdpbjogIDAgYXV0bztcclxuICAgIHBhZGRpbmctYm90dG9tOiAxNXB4O1xyXG59XHJcbi5kaXYtbG9nbyBpbWd7XHJcbiAgICB3aWR0aDogMTAwJTtcclxufVxyXG5mb3Jte1xyXG4gICAgLyogYm9yZGVyOiAxcHggc29saWQgcmVkOyAqL1xyXG4gICAgcGFkZGluZzogMTBweDtcclxufVxyXG4ud3JhcHBlciBpb24tbGFiZWx7XHJcbiAgICBmb250LXNpemU6IDIwcHg7IFxyXG59XHJcbi53cmFwcGVyIGlvbi1pbnB1dHtcclxuICAgIGZvbnQtc2l6ZTogMjJweDtcclxufVxyXG4ud3JhcHBlciBpb24tYnV0dG9ue1xyXG4gICAgZm9udC1zaXplOiBtZWRpdW07XHJcbiAgICBtYXJnaW4tdG9wOiAyNXB4O1xyXG59XHJcbiIsIi53cmFwcGVyIHtcbiAgbWFyZ2luOiAwIGF1dG87XG59XG5cbi5kaXYtbG9nbyB7XG4gIHdpZHRoOiAyNzBweDtcbiAgbWFyZ2luOiAwIGF1dG87XG4gIHBhZGRpbmctYm90dG9tOiAxNXB4O1xufVxuXG4uZGl2LWxvZ28gaW1nIHtcbiAgd2lkdGg6IDEwMCU7XG59XG5cbmZvcm0ge1xuICAvKiBib3JkZXI6IDFweCBzb2xpZCByZWQ7ICovXG4gIHBhZGRpbmc6IDEwcHg7XG59XG5cbi53cmFwcGVyIGlvbi1sYWJlbCB7XG4gIGZvbnQtc2l6ZTogMjBweDtcbn1cblxuLndyYXBwZXIgaW9uLWlucHV0IHtcbiAgZm9udC1zaXplOiAyMnB4O1xufVxuXG4ud3JhcHBlciBpb24tYnV0dG9uIHtcbiAgZm9udC1zaXplOiBtZWRpdW07XG4gIG1hcmdpbi10b3A6IDI1cHg7XG59Il19 */"); - -/***/ }), - -/***/ "./src/app/pages/login/login.page.ts": -/*!*******************************************!*\ - !*** ./src/app/pages/login/login.page.ts ***! - \*******************************************/ -/*! exports provided: LoginPage */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "LoginPage", function() { return LoginPage; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _angular_router__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @angular/router */ "./node_modules/@angular/router/__ivy_ngcc__/fesm2015/router.js"); -/* harmony import */ var src_app_services_auth_service__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! src/app/services/auth.service */ "./src/app/services/auth.service.ts"); -/* harmony import */ var src_app_services_toast_service__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! src/app/services/toast.service */ "./src/app/services/toast.service.ts"); -/* harmony import */ var src_environments_environment__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! src/environments/environment */ "./src/environments/environment.ts"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); -/* harmony import */ var src_app_services_storage_service__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! src/app/services/storage.service */ "./src/app/services/storage.service.ts"); -/* harmony import */ var src_app_config_auth_constants__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! src/app/config/auth-constants */ "./src/app/config/auth-constants.ts"); - - - - - - - - - -let LoginPage = class LoginPage { - constructor(router, authService, storageService, toastService, alertController) { - this.router = router; - this.authService = authService; - this.storageService = storageService; - this.toastService = toastService; - this.alertController = alertController; - this.username = src_environments_environment__WEBPACK_IMPORTED_MODULE_5__["environment"].defaultuser; - this.password = src_environments_environment__WEBPACK_IMPORTED_MODULE_5__["environment"].defaultuserpwd; - this.body = { "user": this.username, "password": this.password }; - this.postData = { "user": "admin", "password": this.password }; - } - ngOnInit() { - } - /* Function to validade the login inputs */ - validateInput() { - return (this.username.trim().length > 0 - && this.password.trim().length > 0); - } - presentAlert(message) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - const alert = yield this.alertController.create({ - cssClass: 'my-custom-class', - header: 'Mensagem do sistema', - message: message, - buttons: ['OK'] - }); - yield alert.present(); - }); - } - loginAction() { - if (this.validateInput()) { - this.authService.loginChat2(this.postData).subscribe((res) => { - if (res.data) { - this.storageService.store(src_app_config_auth_constants__WEBPACK_IMPORTED_MODULE_8__["AuthConnstants"].AUTH, res.data); - console.log('Log RockectChat OK'); - console.log(res.data); - } - else { - console.log("Invalid username or password!"); - } - }, (error) => { - console.log('Network error'); - }); - } - else { - this.presentAlert('Por favor, insira o seu nome de utilizador e palavra-passe.'); - } - } - Login() { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - try { - //Go to our home in home/feed. - if (this.validateInput()) { - this.userattempt = { - username: this.username, - password: this.password, - domainName: src_environments_environment__WEBPACK_IMPORTED_MODULE_5__["environment"].domain, - BasicAuthKey: "" - }; - if (yield this.authService.login(this.userattempt)) { - this.loginAction(); - console.log('Log Gabinete Digital OK'); - this.router.navigate(['/home/events']); - } - else { - /* this.toastService.presentToast('Não foi possível fazer login"'); */ - this.presentAlert('O nome de utilizador e palavra-passe estão incorretas ou verifique a sua conexão com a internet e volte a tentar.'); - } - } - else { - /* this.toastService.presentToast('Preencha todos campos'); */ - this.presentAlert('Por favor, insira o seu nome de utilizador e palavra-passe.'); - } - } - catch (error) { - this.presentAlert('Ocorreu um erro ao fazer login. Contacte o administrador de sistema.'); - } - }); - } -}; -LoginPage.ctorParameters = () => [ - { type: _angular_router__WEBPACK_IMPORTED_MODULE_2__["Router"] }, - { type: src_app_services_auth_service__WEBPACK_IMPORTED_MODULE_3__["AuthService"] }, - { type: src_app_services_storage_service__WEBPACK_IMPORTED_MODULE_7__["StorageService"] }, - { type: src_app_services_toast_service__WEBPACK_IMPORTED_MODULE_4__["ToastService"] }, - { type: _ionic_angular__WEBPACK_IMPORTED_MODULE_6__["AlertController"] } -]; -LoginPage = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Component"])({ - selector: 'app-login', - template: Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! raw-loader!./login.page.html */ "./node_modules/raw-loader/dist/cjs.js!./src/app/pages/login/login.page.html")).default, - styles: [Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__importDefault"])(__webpack_require__(/*! ./login.page.scss */ "./src/app/pages/login/login.page.scss")).default] - }) -], LoginPage); - - - -/***/ }), - -/***/ "./src/app/services/toast.service.ts": -/*!*******************************************!*\ - !*** ./src/app/services/toast.service.ts ***! - \*******************************************/ -/*! exports provided: ToastService */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "ToastService", function() { return ToastService; }); -/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "./node_modules/tslib/tslib.es6.js"); -/* harmony import */ var _angular_core__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! @angular/core */ "./node_modules/@angular/core/__ivy_ngcc__/fesm2015/core.js"); -/* harmony import */ var _ionic_angular__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! @ionic/angular */ "./node_modules/@ionic/angular/__ivy_ngcc__/fesm2015/ionic-angular.js"); - - - -let ToastService = class ToastService { - constructor(toastController) { - this.toastController = toastController; - } - presentToast(infoMessage) { - return Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__awaiter"])(this, void 0, void 0, function* () { - const toast = yield this.toastController.create({ - message: infoMessage, - duration: 2000 - }); - toast.present(); - }); - } -}; -ToastService.ctorParameters = () => [ - { type: _ionic_angular__WEBPACK_IMPORTED_MODULE_2__["ToastController"] } -]; -ToastService = Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__decorate"])([ - Object(_angular_core__WEBPACK_IMPORTED_MODULE_1__["Injectable"])({ - providedIn: 'root' - }) -], ToastService); - - - -/***/ }) - -}]); -//# sourceMappingURL=pages-login-login-module.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/polyfills.js.download b/src/assets/images/Gabinete Digital_files/polyfills.js.download deleted file mode 100644 index b9e14d5b9..000000000 --- a/src/assets/images/Gabinete Digital_files/polyfills.js.download +++ /dev/null @@ -1,6156 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["polyfills"],{ - -/***/ "./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js": -/*!**************************************************************************************************!*\ - !*** ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js ***! - \**************************************************************************************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var core_js_proposals_reflect_metadata__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! core-js/proposals/reflect-metadata */ "./node_modules/core-js/proposals/reflect-metadata.js"); -/* harmony import */ var core_js_proposals_reflect_metadata__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(core_js_proposals_reflect_metadata__WEBPACK_IMPORTED_MODULE_0__); -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - - - -/***/ }), - -/***/ "./node_modules/core-js/internals/a-function.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/a-function.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it) { - if (typeof it != 'function') { - throw TypeError(String(it) + ' is not a function'); - } return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/a-possible-prototype.js": -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/a-possible-prototype.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); - -module.exports = function (it) { - if (!isObject(it) && it !== null) { - throw TypeError("Can't set " + String(it) + ' as a prototype'); - } return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/an-instance.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/an-instance.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it, Constructor, name) { - if (!(it instanceof Constructor)) { - throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); - } return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/an-object.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/an-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); - -module.exports = function (it) { - if (!isObject(it)) { - throw TypeError(String(it) + ' is not an object'); - } return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/array-includes.js": -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/array-includes.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); -var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); -var toAbsoluteIndex = __webpack_require__(/*! ../internals/to-absolute-index */ "./node_modules/core-js/internals/to-absolute-index.js"); - -// `Array.prototype.{ indexOf, includes }` methods implementation -var createMethod = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIndexedObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) { - if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; -}; - -module.exports = { - // `Array.prototype.includes` method - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - includes: createMethod(true), - // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - indexOf: createMethod(false) -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/array-iteration.js": -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/array-iteration.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js/internals/function-bind-context.js"); -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js"); -var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js"); -var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); -var arraySpeciesCreate = __webpack_require__(/*! ../internals/array-species-create */ "./node_modules/core-js/internals/array-species-create.js"); - -var push = [].push; - -// `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation -var createMethod = function (TYPE) { - var IS_MAP = TYPE == 1; - var IS_FILTER = TYPE == 2; - var IS_SOME = TYPE == 3; - var IS_EVERY = TYPE == 4; - var IS_FIND_INDEX = TYPE == 6; - var NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - return function ($this, callbackfn, that, specificCreate) { - var O = toObject($this); - var self = IndexedObject(O); - var boundFunction = bind(callbackfn, that, 3); - var length = toLength(self.length); - var index = 0; - var create = specificCreate || arraySpeciesCreate; - var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined; - var value, result; - for (;length > index; index++) if (NO_HOLES || index in self) { - value = self[index]; - result = boundFunction(value, index, O); - if (TYPE) { - if (IS_MAP) target[index] = result; // map - else if (result) switch (TYPE) { - case 3: return true; // some - case 5: return value; // find - case 6: return index; // findIndex - case 2: push.call(target, value); // filter - } else if (IS_EVERY) return false; // every - } - } - return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target; - }; -}; - -module.exports = { - // `Array.prototype.forEach` method - // https://tc39.github.io/ecma262/#sec-array.prototype.foreach - forEach: createMethod(0), - // `Array.prototype.map` method - // https://tc39.github.io/ecma262/#sec-array.prototype.map - map: createMethod(1), - // `Array.prototype.filter` method - // https://tc39.github.io/ecma262/#sec-array.prototype.filter - filter: createMethod(2), - // `Array.prototype.some` method - // https://tc39.github.io/ecma262/#sec-array.prototype.some - some: createMethod(3), - // `Array.prototype.every` method - // https://tc39.github.io/ecma262/#sec-array.prototype.every - every: createMethod(4), - // `Array.prototype.find` method - // https://tc39.github.io/ecma262/#sec-array.prototype.find - find: createMethod(5), - // `Array.prototype.findIndex` method - // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - findIndex: createMethod(6) -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/array-species-create.js": -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/array-species-create.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); -var isArray = __webpack_require__(/*! ../internals/is-array */ "./node_modules/core-js/internals/is-array.js"); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); - -var SPECIES = wellKnownSymbol('species'); - -// `ArraySpeciesCreate` abstract operation -// https://tc39.github.io/ecma262/#sec-arrayspeciescreate -module.exports = function (originalArray, length) { - var C; - if (isArray(originalArray)) { - C = originalArray.constructor; - // cross-realm fallback - if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; - else if (isObject(C)) { - C = C[SPECIES]; - if (C === null) C = undefined; - } - } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/call-with-safe-iteration-closing.js": -/*!****************************************************************************!*\ - !*** ./node_modules/core-js/internals/call-with-safe-iteration-closing.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); - -// call something on iterator step with safe closing on error -module.exports = function (iterator, fn, value, ENTRIES) { - try { - return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (error) { - var returnMethod = iterator['return']; - if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); - throw error; - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/check-correctness-of-iteration.js": -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/check-correctness-of-iteration.js ***! - \**************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); - -var ITERATOR = wellKnownSymbol('iterator'); -var SAFE_CLOSING = false; - -try { - var called = 0; - var iteratorWithReturn = { - next: function () { - return { done: !!called++ }; - }, - 'return': function () { - SAFE_CLOSING = true; - } - }; - iteratorWithReturn[ITERATOR] = function () { - return this; - }; - // eslint-disable-next-line no-throw-literal - Array.from(iteratorWithReturn, function () { throw 2; }); -} catch (error) { /* empty */ } - -module.exports = function (exec, SKIP_CLOSING) { - if (!SKIP_CLOSING && !SAFE_CLOSING) return false; - var ITERATION_SUPPORT = false; - try { - var object = {}; - object[ITERATOR] = function () { - return { - next: function () { - return { done: ITERATION_SUPPORT = true }; - } - }; - }; - exec(object); - } catch (error) { /* empty */ } - return ITERATION_SUPPORT; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/classof-raw.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/classof-raw.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var toString = {}.toString; - -module.exports = function (it) { - return toString.call(it).slice(8, -1); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/classof.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/classof.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var TO_STRING_TAG_SUPPORT = __webpack_require__(/*! ../internals/to-string-tag-support */ "./node_modules/core-js/internals/to-string-tag-support.js"); -var classofRaw = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -// ES3 wrong here -var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments'; - -// fallback for IE11 Script Access Denied error -var tryGet = function (it, key) { - try { - return it[key]; - } catch (error) { /* empty */ } -}; - -// getting tag from ES6+ `Object.prototype.toString` -module.exports = TO_STRING_TAG_SUPPORT ? classofRaw : function (it) { - var O, tag, result; - return it === undefined ? 'Undefined' : it === null ? 'Null' - // @@toStringTag case - : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG)) == 'string' ? tag - // builtinTag case - : CORRECT_ARGUMENTS ? classofRaw(O) - // ES3 arguments fallback - : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/collection-strong.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/collection-strong.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js").f; -var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js/internals/object-create.js"); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "./node_modules/core-js/internals/redefine-all.js"); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js/internals/function-bind-context.js"); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js/internals/an-instance.js"); -var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js/internals/iterate.js"); -var defineIterator = __webpack_require__(/*! ../internals/define-iterator */ "./node_modules/core-js/internals/define-iterator.js"); -var setSpecies = __webpack_require__(/*! ../internals/set-species */ "./node_modules/core-js/internals/set-species.js"); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); -var fastKey = __webpack_require__(/*! ../internals/internal-metadata */ "./node_modules/core-js/internals/internal-metadata.js").fastKey; -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js"); - -var setInternalState = InternalStateModule.set; -var internalStateGetterFor = InternalStateModule.getterFor; - -module.exports = { - getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, CONSTRUCTOR_NAME); - setInternalState(that, { - type: CONSTRUCTOR_NAME, - index: create(null), - first: undefined, - last: undefined, - size: 0 - }); - if (!DESCRIPTORS) that.size = 0; - if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP); - }); - - var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); - - var define = function (that, key, value) { - var state = getInternalState(that); - var entry = getEntry(that, key); - var previous, index; - // change existing entry - if (entry) { - entry.value = value; - // create new entry - } else { - state.last = entry = { - index: index = fastKey(key, true), - key: key, - value: value, - previous: previous = state.last, - next: undefined, - removed: false - }; - if (!state.first) state.first = entry; - if (previous) previous.next = entry; - if (DESCRIPTORS) state.size++; - else that.size++; - // add to index - if (index !== 'F') state.index[index] = entry; - } return that; - }; - - var getEntry = function (that, key) { - var state = getInternalState(that); - // fast case - var index = fastKey(key); - var entry; - if (index !== 'F') return state.index[index]; - // frozen object case - for (entry = state.first; entry; entry = entry.next) { - if (entry.key == key) return entry; - } - }; - - redefineAll(C.prototype, { - // 23.1.3.1 Map.prototype.clear() - // 23.2.3.2 Set.prototype.clear() - clear: function clear() { - var that = this; - var state = getInternalState(that); - var data = state.index; - var entry = state.first; - while (entry) { - entry.removed = true; - if (entry.previous) entry.previous = entry.previous.next = undefined; - delete data[entry.index]; - entry = entry.next; - } - state.first = state.last = undefined; - if (DESCRIPTORS) state.size = 0; - else that.size = 0; - }, - // 23.1.3.3 Map.prototype.delete(key) - // 23.2.3.4 Set.prototype.delete(value) - 'delete': function (key) { - var that = this; - var state = getInternalState(that); - var entry = getEntry(that, key); - if (entry) { - var next = entry.next; - var prev = entry.previous; - delete state.index[entry.index]; - entry.removed = true; - if (prev) prev.next = next; - if (next) next.previous = prev; - if (state.first == entry) state.first = next; - if (state.last == entry) state.last = prev; - if (DESCRIPTORS) state.size--; - else that.size--; - } return !!entry; - }, - // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) - // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) - forEach: function forEach(callbackfn /* , that = undefined */) { - var state = getInternalState(this); - var boundFunction = bind(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); - var entry; - while (entry = entry ? entry.next : state.first) { - boundFunction(entry.value, entry.key, this); - // revert to the last existing entry - while (entry && entry.removed) entry = entry.previous; - } - }, - // 23.1.3.7 Map.prototype.has(key) - // 23.2.3.7 Set.prototype.has(value) - has: function has(key) { - return !!getEntry(this, key); - } - }); - - redefineAll(C.prototype, IS_MAP ? { - // 23.1.3.6 Map.prototype.get(key) - get: function get(key) { - var entry = getEntry(this, key); - return entry && entry.value; - }, - // 23.1.3.9 Map.prototype.set(key, value) - set: function set(key, value) { - return define(this, key === 0 ? 0 : key, value); - } - } : { - // 23.2.3.1 Set.prototype.add(value) - add: function add(value) { - return define(this, value = value === 0 ? 0 : value, value); - } - }); - if (DESCRIPTORS) defineProperty(C.prototype, 'size', { - get: function () { - return getInternalState(this).size; - } - }); - return C; - }, - setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) { - var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; - var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); - var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); - // add .keys, .values, .entries, [@@iterator] - // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 - defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) { - setInternalState(this, { - type: ITERATOR_NAME, - target: iterated, - state: getInternalCollectionState(iterated), - kind: kind, - last: undefined - }); - }, function () { - var state = getInternalIteratorState(this); - var kind = state.kind; - var entry = state.last; - // revert to the last existing entry - while (entry && entry.removed) entry = entry.previous; - // get next entry - if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { - // or finish the iteration - state.target = undefined; - return { value: undefined, done: true }; - } - // return step by kind - if (kind == 'keys') return { value: entry.key, done: false }; - if (kind == 'values') return { value: entry.value, done: false }; - return { value: [entry.key, entry.value], done: false }; - }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); - - // add [@@species], 23.1.2.2, 23.2.2.2 - setSpecies(CONSTRUCTOR_NAME); - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/collection-weak.js": -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/collection-weak.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "./node_modules/core-js/internals/redefine-all.js"); -var getWeakData = __webpack_require__(/*! ../internals/internal-metadata */ "./node_modules/core-js/internals/internal-metadata.js").getWeakData; -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js/internals/an-instance.js"); -var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js/internals/iterate.js"); -var ArrayIterationModule = __webpack_require__(/*! ../internals/array-iteration */ "./node_modules/core-js/internals/array-iteration.js"); -var $has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js"); - -var setInternalState = InternalStateModule.set; -var internalStateGetterFor = InternalStateModule.getterFor; -var find = ArrayIterationModule.find; -var findIndex = ArrayIterationModule.findIndex; -var id = 0; - -// fallback for uncaught frozen keys -var uncaughtFrozenStore = function (store) { - return store.frozen || (store.frozen = new UncaughtFrozenStore()); -}; - -var UncaughtFrozenStore = function () { - this.entries = []; -}; - -var findUncaughtFrozen = function (store, key) { - return find(store.entries, function (it) { - return it[0] === key; - }); -}; - -UncaughtFrozenStore.prototype = { - get: function (key) { - var entry = findUncaughtFrozen(this, key); - if (entry) return entry[1]; - }, - has: function (key) { - return !!findUncaughtFrozen(this, key); - }, - set: function (key, value) { - var entry = findUncaughtFrozen(this, key); - if (entry) entry[1] = value; - else this.entries.push([key, value]); - }, - 'delete': function (key) { - var index = findIndex(this.entries, function (it) { - return it[0] === key; - }); - if (~index) this.entries.splice(index, 1); - return !!~index; - } -}; - -module.exports = { - getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, CONSTRUCTOR_NAME); - setInternalState(that, { - type: CONSTRUCTOR_NAME, - id: id++, - frozen: undefined - }); - if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP); - }); - - var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); - - var define = function (that, key, value) { - var state = getInternalState(that); - var data = getWeakData(anObject(key), true); - if (data === true) uncaughtFrozenStore(state).set(key, value); - else data[state.id] = value; - return that; - }; - - redefineAll(C.prototype, { - // 23.3.3.2 WeakMap.prototype.delete(key) - // 23.4.3.3 WeakSet.prototype.delete(value) - 'delete': function (key) { - var state = getInternalState(this); - if (!isObject(key)) return false; - var data = getWeakData(key); - if (data === true) return uncaughtFrozenStore(state)['delete'](key); - return data && $has(data, state.id) && delete data[state.id]; - }, - // 23.3.3.4 WeakMap.prototype.has(key) - // 23.4.3.4 WeakSet.prototype.has(value) - has: function has(key) { - var state = getInternalState(this); - if (!isObject(key)) return false; - var data = getWeakData(key); - if (data === true) return uncaughtFrozenStore(state).has(key); - return data && $has(data, state.id); - } - }); - - redefineAll(C.prototype, IS_MAP ? { - // 23.3.3.3 WeakMap.prototype.get(key) - get: function get(key) { - var state = getInternalState(this); - if (isObject(key)) { - var data = getWeakData(key); - if (data === true) return uncaughtFrozenStore(state).get(key); - return data ? data[state.id] : undefined; - } - }, - // 23.3.3.5 WeakMap.prototype.set(key, value) - set: function set(key, value) { - return define(this, key, value); - } - } : { - // 23.4.3.1 WeakSet.prototype.add(value) - add: function add(value) { - return define(this, value, true); - } - }); - - return C; - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/collection.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/collection.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js/internals/is-forced.js"); -var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); -var InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ "./node_modules/core-js/internals/internal-metadata.js"); -var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js/internals/iterate.js"); -var anInstance = __webpack_require__(/*! ../internals/an-instance */ "./node_modules/core-js/internals/an-instance.js"); -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); -var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); -var checkCorrectnessOfIteration = __webpack_require__(/*! ../internals/check-correctness-of-iteration */ "./node_modules/core-js/internals/check-correctness-of-iteration.js"); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js/internals/set-to-string-tag.js"); -var inheritIfRequired = __webpack_require__(/*! ../internals/inherit-if-required */ "./node_modules/core-js/internals/inherit-if-required.js"); - -module.exports = function (CONSTRUCTOR_NAME, wrapper, common) { - var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; - var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; - var ADDER = IS_MAP ? 'set' : 'add'; - var NativeConstructor = global[CONSTRUCTOR_NAME]; - var NativePrototype = NativeConstructor && NativeConstructor.prototype; - var Constructor = NativeConstructor; - var exported = {}; - - var fixMethod = function (KEY) { - var nativeMethod = NativePrototype[KEY]; - redefine(NativePrototype, KEY, - KEY == 'add' ? function add(value) { - nativeMethod.call(this, value === 0 ? 0 : value); - return this; - } : KEY == 'delete' ? function (key) { - return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); - } : KEY == 'get' ? function get(key) { - return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key); - } : KEY == 'has' ? function has(key) { - return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); - } : function set(key, value) { - nativeMethod.call(this, key === 0 ? 0 : key, value); - return this; - } - ); - }; - - // eslint-disable-next-line max-len - if (isForced(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () { - new NativeConstructor().entries().next(); - })))) { - // create collection constructor - Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); - InternalMetadataModule.REQUIRED = true; - } else if (isForced(CONSTRUCTOR_NAME, true)) { - var instance = new Constructor(); - // early implementations not supports chaining - var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; - // V8 ~ Chromium 40- weak-collections throws on primitives, but should return false - var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); }); - // most early implementations doesn't supports iterables, most modern - not close it correctly - // eslint-disable-next-line no-new - var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); }); - // for early implementations -0 and +0 not the same - var BUGGY_ZERO = !IS_WEAK && fails(function () { - // V8 ~ Chromium 42- fails only with 5+ elements - var $instance = new NativeConstructor(); - var index = 5; - while (index--) $instance[ADDER](index, index); - return !$instance.has(-0); - }); - - if (!ACCEPT_ITERABLES) { - Constructor = wrapper(function (dummy, iterable) { - anInstance(dummy, Constructor, CONSTRUCTOR_NAME); - var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); - if (iterable != undefined) iterate(iterable, that[ADDER], that, IS_MAP); - return that; - }); - Constructor.prototype = NativePrototype; - NativePrototype.constructor = Constructor; - } - - if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - - if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); - - // weak collections should not contains .clear method - if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; - } - - exported[CONSTRUCTOR_NAME] = Constructor; - $({ global: true, forced: Constructor != NativeConstructor }, exported); - - setToStringTag(Constructor, CONSTRUCTOR_NAME); - - if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); - - return Constructor; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/copy-constructor-properties.js": -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/copy-constructor-properties.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var ownKeys = __webpack_require__(/*! ../internals/own-keys */ "./node_modules/core-js/internals/own-keys.js"); -var getOwnPropertyDescriptorModule = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js"); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); - -module.exports = function (target, source) { - var keys = ownKeys(source); - var defineProperty = definePropertyModule.f; - var getOwnPropertyDescriptor = getOwnPropertyDescriptorModule.f; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/correct-prototype-getter.js": -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/correct-prototype-getter.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); - -module.exports = !fails(function () { - function F() { /* empty */ } - F.prototype.constructor = null; - return Object.getPrototypeOf(new F()) !== F.prototype; -}); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/create-iterator-constructor.js": -/*!***********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-iterator-constructor.js ***! - \***********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var IteratorPrototype = __webpack_require__(/*! ../internals/iterators-core */ "./node_modules/core-js/internals/iterators-core.js").IteratorPrototype; -var create = __webpack_require__(/*! ../internals/object-create */ "./node_modules/core-js/internals/object-create.js"); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js"); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js/internals/set-to-string-tag.js"); -var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js"); - -var returnThis = function () { return this; }; - -module.exports = function (IteratorConstructor, NAME, next) { - var TO_STRING_TAG = NAME + ' Iterator'; - IteratorConstructor.prototype = create(IteratorPrototype, { next: createPropertyDescriptor(1, next) }); - setToStringTag(IteratorConstructor, TO_STRING_TAG, false, true); - Iterators[TO_STRING_TAG] = returnThis; - return IteratorConstructor; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/create-non-enumerable-property.js": -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/internals/create-non-enumerable-property.js ***! - \**************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js"); - -module.exports = DESCRIPTORS ? function (object, key, value) { - return definePropertyModule.f(object, key, createPropertyDescriptor(1, value)); -} : function (object, key, value) { - object[key] = value; - return object; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/create-property-descriptor.js": -/*!**********************************************************************!*\ - !*** ./node_modules/core-js/internals/create-property-descriptor.js ***! - \**********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/define-iterator.js": -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/define-iterator.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var createIteratorConstructor = __webpack_require__(/*! ../internals/create-iterator-constructor */ "./node_modules/core-js/internals/create-iterator-constructor.js"); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js/internals/object-get-prototype-of.js"); -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js/internals/object-set-prototype-of.js"); -var setToStringTag = __webpack_require__(/*! ../internals/set-to-string-tag */ "./node_modules/core-js/internals/set-to-string-tag.js"); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); -var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js"); -var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js"); -var IteratorsCore = __webpack_require__(/*! ../internals/iterators-core */ "./node_modules/core-js/internals/iterators-core.js"); - -var IteratorPrototype = IteratorsCore.IteratorPrototype; -var BUGGY_SAFARI_ITERATORS = IteratorsCore.BUGGY_SAFARI_ITERATORS; -var ITERATOR = wellKnownSymbol('iterator'); -var KEYS = 'keys'; -var VALUES = 'values'; -var ENTRIES = 'entries'; - -var returnThis = function () { return this; }; - -module.exports = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) { - createIteratorConstructor(IteratorConstructor, NAME, next); - - var getIterationMethod = function (KIND) { - if (KIND === DEFAULT && defaultIterator) return defaultIterator; - if (!BUGGY_SAFARI_ITERATORS && KIND in IterablePrototype) return IterablePrototype[KIND]; - switch (KIND) { - case KEYS: return function keys() { return new IteratorConstructor(this, KIND); }; - case VALUES: return function values() { return new IteratorConstructor(this, KIND); }; - case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); }; - } return function () { return new IteratorConstructor(this); }; - }; - - var TO_STRING_TAG = NAME + ' Iterator'; - var INCORRECT_VALUES_NAME = false; - var IterablePrototype = Iterable.prototype; - var nativeIterator = IterablePrototype[ITERATOR] - || IterablePrototype['@@iterator'] - || DEFAULT && IterablePrototype[DEFAULT]; - var defaultIterator = !BUGGY_SAFARI_ITERATORS && nativeIterator || getIterationMethod(DEFAULT); - var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator; - var CurrentIteratorPrototype, methods, KEY; - - // fix native - if (anyNativeIterator) { - CurrentIteratorPrototype = getPrototypeOf(anyNativeIterator.call(new Iterable())); - if (IteratorPrototype !== Object.prototype && CurrentIteratorPrototype.next) { - if (!IS_PURE && getPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype) { - if (setPrototypeOf) { - setPrototypeOf(CurrentIteratorPrototype, IteratorPrototype); - } else if (typeof CurrentIteratorPrototype[ITERATOR] != 'function') { - createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR, returnThis); - } - } - // Set @@toStringTag to native iterators - setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true, true); - if (IS_PURE) Iterators[TO_STRING_TAG] = returnThis; - } - } - - // fix Array#{values, @@iterator}.name in V8 / FF - if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) { - INCORRECT_VALUES_NAME = true; - defaultIterator = function values() { return nativeIterator.call(this); }; - } - - // define iterator - if ((!IS_PURE || FORCED) && IterablePrototype[ITERATOR] !== defaultIterator) { - createNonEnumerableProperty(IterablePrototype, ITERATOR, defaultIterator); - } - Iterators[NAME] = defaultIterator; - - // export additional methods - if (DEFAULT) { - methods = { - values: getIterationMethod(VALUES), - keys: IS_SET ? defaultIterator : getIterationMethod(KEYS), - entries: getIterationMethod(ENTRIES) - }; - if (FORCED) for (KEY in methods) { - if (BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) { - redefine(IterablePrototype, KEY, methods[KEY]); - } - } else $({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS || INCORRECT_VALUES_NAME }, methods); - } - - return methods; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/descriptors.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/descriptors.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); - -// Thank's IE8 for his funny defineProperty -module.exports = !fails(function () { - return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; -}); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/document-create-element.js": -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/document-create-element.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); - -var document = global.document; -// typeof document.createElement is 'object' in old IE -var EXISTS = isObject(document) && isObject(document.createElement); - -module.exports = function (it) { - return EXISTS ? document.createElement(it) : {}; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/enum-bug-keys.js": -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/enum-bug-keys.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// IE8- don't enum bug keys -module.exports = [ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' -]; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/export.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/export.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var getOwnPropertyDescriptor = __webpack_require__(/*! ../internals/object-get-own-property-descriptor */ "./node_modules/core-js/internals/object-get-own-property-descriptor.js").f; -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); -var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js"); -var copyConstructorProperties = __webpack_require__(/*! ../internals/copy-constructor-properties */ "./node_modules/core-js/internals/copy-constructor-properties.js"); -var isForced = __webpack_require__(/*! ../internals/is-forced */ "./node_modules/core-js/internals/is-forced.js"); - -/* - options.target - name of the target object - options.global - target is the global object - options.stat - export as static methods of target - options.proto - export as prototype methods of target - options.real - real prototype method for the `pure` version - options.forced - export even if the native feature is available - options.bind - bind methods to the target, required for the `pure` version - options.wrap - wrap constructors to preventing global pollution, required for the `pure` version - options.unsafe - use the simple assignment of property instead of delete + defineProperty - options.sham - add a flag to not completely full polyfills - options.enumerable - export as enumerable property - options.noTargetGet - prevent calling a getter on target -*/ -module.exports = function (options, source) { - var TARGET = options.target; - var GLOBAL = options.global; - var STATIC = options.stat; - var FORCED, target, key, targetProperty, sourceProperty, descriptor; - if (GLOBAL) { - target = global; - } else if (STATIC) { - target = global[TARGET] || setGlobal(TARGET, {}); - } else { - target = (global[TARGET] || {}).prototype; - } - if (target) for (key in source) { - sourceProperty = source[key]; - if (options.noTargetGet) { - descriptor = getOwnPropertyDescriptor(target, key); - targetProperty = descriptor && descriptor.value; - } else targetProperty = target[key]; - FORCED = isForced(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); - // contained in target - if (!FORCED && targetProperty !== undefined) { - if (typeof sourceProperty === typeof targetProperty) continue; - copyConstructorProperties(sourceProperty, targetProperty); - } - // add a flag to not completely full polyfills - if (options.sham || (targetProperty && targetProperty.sham)) { - createNonEnumerableProperty(sourceProperty, 'sham', true); - } - // extend global - redefine(target, key, sourceProperty, options); - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/fails.js": -/*!*************************************************!*\ - !*** ./node_modules/core-js/internals/fails.js ***! - \*************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/freezing.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/freezing.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); - -module.exports = !fails(function () { - return Object.isExtensible(Object.preventExtensions({})); -}); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/function-bind-context.js": -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/function-bind-context.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var aFunction = __webpack_require__(/*! ../internals/a-function */ "./node_modules/core-js/internals/a-function.js"); - -// optional / simple context binding -module.exports = function (fn, that, length) { - aFunction(fn); - if (that === undefined) return fn; - switch (length) { - case 0: return function () { - return fn.call(that); - }; - case 1: return function (a) { - return fn.call(that, a); - }; - case 2: return function (a, b) { - return fn.call(that, a, b); - }; - case 3: return function (a, b, c) { - return fn.call(that, a, b, c); - }; - } - return function (/* ...args */) { - return fn.apply(that, arguments); - }; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/get-built-in.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/get-built-in.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var path = __webpack_require__(/*! ../internals/path */ "./node_modules/core-js/internals/path.js"); -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); - -var aFunction = function (variable) { - return typeof variable == 'function' ? variable : undefined; -}; - -module.exports = function (namespace, method) { - return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global[namespace]) - : path[namespace] && path[namespace][method] || global[namespace] && global[namespace][method]; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/get-iterator-method.js": -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/get-iterator-method.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ../internals/classof */ "./node_modules/core-js/internals/classof.js"); -var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js"); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); - -var ITERATOR = wellKnownSymbol('iterator'); - -module.exports = function (it) { - if (it != undefined) return it[ITERATOR] - || it['@@iterator'] - || Iterators[classof(it)]; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/global.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/global.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var check = function (it) { - return it && it.Math == Math && it; -}; - -// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 -module.exports = - // eslint-disable-next-line no-undef - check(typeof globalThis == 'object' && globalThis) || - check(typeof window == 'object' && window) || - check(typeof self == 'object' && self) || - check(typeof global == 'object' && global) || - // eslint-disable-next-line no-new-func - Function('return this')(); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/has.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/has.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var hasOwnProperty = {}.hasOwnProperty; - -module.exports = function (it, key) { - return hasOwnProperty.call(it, key); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/hidden-keys.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/hidden-keys.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/html.js": -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/html.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); - -module.exports = getBuiltIn('document', 'documentElement'); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/ie8-dom-define.js": -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/ie8-dom-define.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); -var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); -var createElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js"); - -// Thank's IE8 for his funny defineProperty -module.exports = !DESCRIPTORS && !fails(function () { - return Object.defineProperty(createElement('div'), 'a', { - get: function () { return 7; } - }).a != 7; -}); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/indexed-object.js": -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/indexed-object.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); -var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); - -var split = ''.split; - -// fallback for non-array-like ES3 and non-enumerable old V8 strings -module.exports = fails(function () { - // throws an error in rhino, see https://github.com/mozilla/rhino/issues/346 - // eslint-disable-next-line no-prototype-builtins - return !Object('z').propertyIsEnumerable(0); -}) ? function (it) { - return classof(it) == 'String' ? split.call(it, '') : Object(it); -} : Object; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/inherit-if-required.js": -/*!***************************************************************!*\ - !*** ./node_modules/core-js/internals/inherit-if-required.js ***! - \***************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); -var setPrototypeOf = __webpack_require__(/*! ../internals/object-set-prototype-of */ "./node_modules/core-js/internals/object-set-prototype-of.js"); - -// makes subclassing work correct for wrapped built-ins -module.exports = function ($this, dummy, Wrapper) { - var NewTarget, NewTargetPrototype; - if ( - // it can work only with native `setPrototypeOf` - setPrototypeOf && - // we haven't completely correct pre-ES6 way for getting `new.target`, so use this - typeof (NewTarget = dummy.constructor) == 'function' && - NewTarget !== Wrapper && - isObject(NewTargetPrototype = NewTarget.prototype) && - NewTargetPrototype !== Wrapper.prototype - ) setPrototypeOf($this, NewTargetPrototype); - return $this; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/inspect-source.js": -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/inspect-source.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js/internals/shared-store.js"); - -var functionToString = Function.toString; - -// this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper -if (typeof store.inspectSource != 'function') { - store.inspectSource = function (it) { - return functionToString.call(it); - }; -} - -module.exports = store.inspectSource; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/internal-metadata.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/internal-metadata.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js"); -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js").f; -var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js"); -var FREEZING = __webpack_require__(/*! ../internals/freezing */ "./node_modules/core-js/internals/freezing.js"); - -var METADATA = uid('meta'); -var id = 0; - -var isExtensible = Object.isExtensible || function () { - return true; -}; - -var setMetadata = function (it) { - defineProperty(it, METADATA, { value: { - objectID: 'O' + ++id, // object ID - weakData: {} // weak collections IDs - } }); -}; - -var fastKey = function (it, create) { - // return a primitive with prefix - if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - if (!has(it, METADATA)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return 'F'; - // not necessary to add metadata - if (!create) return 'E'; - // add missing metadata - setMetadata(it); - // return object ID - } return it[METADATA].objectID; -}; - -var getWeakData = function (it, create) { - if (!has(it, METADATA)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return true; - // not necessary to add metadata - if (!create) return false; - // add missing metadata - setMetadata(it); - // return the store of weak collections IDs - } return it[METADATA].weakData; -}; - -// add metadata on freeze-family methods calling -var onFreeze = function (it) { - if (FREEZING && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it); - return it; -}; - -var meta = module.exports = { - REQUIRED: false, - fastKey: fastKey, - getWeakData: getWeakData, - onFreeze: onFreeze -}; - -hiddenKeys[METADATA] = true; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/internal-state.js": -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/internal-state.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ "./node_modules/core-js/internals/native-weak-map.js"); -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); -var objectHas = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js"); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js"); - -var WeakMap = global.WeakMap; -var set, get, has; - -var enforce = function (it) { - return has(it) ? get(it) : set(it, {}); -}; - -var getterFor = function (TYPE) { - return function (it) { - var state; - if (!isObject(it) || (state = get(it)).type !== TYPE) { - throw TypeError('Incompatible receiver, ' + TYPE + ' required'); - } return state; - }; -}; - -if (NATIVE_WEAK_MAP) { - var store = new WeakMap(); - var wmget = store.get; - var wmhas = store.has; - var wmset = store.set; - set = function (it, metadata) { - wmset.call(store, it, metadata); - return metadata; - }; - get = function (it) { - return wmget.call(store, it) || {}; - }; - has = function (it) { - return wmhas.call(store, it); - }; -} else { - var STATE = sharedKey('state'); - hiddenKeys[STATE] = true; - set = function (it, metadata) { - createNonEnumerableProperty(it, STATE, metadata); - return metadata; - }; - get = function (it) { - return objectHas(it, STATE) ? it[STATE] : {}; - }; - has = function (it) { - return objectHas(it, STATE); - }; -} - -module.exports = { - set: set, - get: get, - has: has, - enforce: enforce, - getterFor: getterFor -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/is-array-iterator-method.js": -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/is-array-iterator-method.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); -var Iterators = __webpack_require__(/*! ../internals/iterators */ "./node_modules/core-js/internals/iterators.js"); - -var ITERATOR = wellKnownSymbol('iterator'); -var ArrayPrototype = Array.prototype; - -// check on default Array iterator -module.exports = function (it) { - return it !== undefined && (Iterators.Array === it || ArrayPrototype[ITERATOR] === it); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/is-array.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/is-array.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var classof = __webpack_require__(/*! ../internals/classof-raw */ "./node_modules/core-js/internals/classof-raw.js"); - -// `IsArray` abstract operation -// https://tc39.github.io/ecma262/#sec-isarray -module.exports = Array.isArray || function isArray(arg) { - return classof(arg) == 'Array'; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/is-forced.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-forced.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); - -var replacement = /#|\.prototype\./; - -var isForced = function (feature, detection) { - var value = data[normalize(feature)]; - return value == POLYFILL ? true - : value == NATIVE ? false - : typeof detection == 'function' ? fails(detection) - : !!detection; -}; - -var normalize = isForced.normalize = function (string) { - return String(string).replace(replacement, '.').toLowerCase(); -}; - -var data = isForced.data = {}; -var NATIVE = isForced.NATIVE = 'N'; -var POLYFILL = isForced.POLYFILL = 'P'; - -module.exports = isForced; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/is-object.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/is-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/is-pure.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/is-pure.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = false; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/iterate.js": -/*!***************************************************!*\ - !*** ./node_modules/core-js/internals/iterate.js ***! - \***************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var isArrayIteratorMethod = __webpack_require__(/*! ../internals/is-array-iterator-method */ "./node_modules/core-js/internals/is-array-iterator-method.js"); -var toLength = __webpack_require__(/*! ../internals/to-length */ "./node_modules/core-js/internals/to-length.js"); -var bind = __webpack_require__(/*! ../internals/function-bind-context */ "./node_modules/core-js/internals/function-bind-context.js"); -var getIteratorMethod = __webpack_require__(/*! ../internals/get-iterator-method */ "./node_modules/core-js/internals/get-iterator-method.js"); -var callWithSafeIterationClosing = __webpack_require__(/*! ../internals/call-with-safe-iteration-closing */ "./node_modules/core-js/internals/call-with-safe-iteration-closing.js"); - -var Result = function (stopped, result) { - this.stopped = stopped; - this.result = result; -}; - -var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { - var boundFunction = bind(fn, that, AS_ENTRIES ? 2 : 1); - var iterator, iterFn, index, length, result, next, step; - - if (IS_ITERATOR) { - iterator = iterable; - } else { - iterFn = getIteratorMethod(iterable); - if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); - // optimisation for array iterators - if (isArrayIteratorMethod(iterFn)) { - for (index = 0, length = toLength(iterable.length); length > index; index++) { - result = AS_ENTRIES - ? boundFunction(anObject(step = iterable[index])[0], step[1]) - : boundFunction(iterable[index]); - if (result && result instanceof Result) return result; - } return new Result(false); - } - iterator = iterFn.call(iterable); - } - - next = iterator.next; - while (!(step = next.call(iterator)).done) { - result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); - if (typeof result == 'object' && result && result instanceof Result) return result; - } return new Result(false); -}; - -iterate.stop = function (result) { - return new Result(true, result); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/iterators-core.js": -/*!**********************************************************!*\ - !*** ./node_modules/core-js/internals/iterators-core.js ***! - \**********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js/internals/object-get-prototype-of.js"); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js"); - -var ITERATOR = wellKnownSymbol('iterator'); -var BUGGY_SAFARI_ITERATORS = false; - -var returnThis = function () { return this; }; - -// `%IteratorPrototype%` object -// https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object -var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator; - -if ([].keys) { - arrayIterator = [].keys(); - // Safari 8 has buggy iterators w/o `next` - if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true; - else { - PrototypeOfArrayIteratorPrototype = getPrototypeOf(getPrototypeOf(arrayIterator)); - if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype; - } -} - -if (IteratorPrototype == undefined) IteratorPrototype = {}; - -// 25.1.2.1.1 %IteratorPrototype%[@@iterator]() -if (!IS_PURE && !has(IteratorPrototype, ITERATOR)) { - createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis); -} - -module.exports = { - IteratorPrototype: IteratorPrototype, - BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/iterators.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/iterators.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -module.exports = {}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/native-symbol.js": -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/native-symbol.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var fails = __webpack_require__(/*! ../internals/fails */ "./node_modules/core-js/internals/fails.js"); - -module.exports = !!Object.getOwnPropertySymbols && !fails(function () { - // Chrome 38 Symbol has incorrect toString conversion - // eslint-disable-next-line no-undef - return !String(Symbol()); -}); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/native-weak-map.js": -/*!***********************************************************!*\ - !*** ./node_modules/core-js/internals/native-weak-map.js ***! - \***********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js/internals/inspect-source.js"); - -var WeakMap = global.WeakMap; - -module.exports = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-create.js": -/*!*********************************************************!*\ - !*** ./node_modules/core-js/internals/object-create.js ***! - \*********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var defineProperties = __webpack_require__(/*! ../internals/object-define-properties */ "./node_modules/core-js/internals/object-define-properties.js"); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js"); -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js"); -var html = __webpack_require__(/*! ../internals/html */ "./node_modules/core-js/internals/html.js"); -var documentCreateElement = __webpack_require__(/*! ../internals/document-create-element */ "./node_modules/core-js/internals/document-create-element.js"); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js"); - -var GT = '>'; -var LT = '<'; -var PROTOTYPE = 'prototype'; -var SCRIPT = 'script'; -var IE_PROTO = sharedKey('IE_PROTO'); - -var EmptyConstructor = function () { /* empty */ }; - -var scriptTag = function (content) { - return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; -}; - -// Create object with fake `null` prototype: use ActiveX Object with cleared prototype -var NullProtoObjectViaActiveX = function (activeXDocument) { - activeXDocument.write(scriptTag('')); - activeXDocument.close(); - var temp = activeXDocument.parentWindow.Object; - activeXDocument = null; // avoid memory leak - return temp; -}; - -// Create object with fake `null` prototype: use iframe Object with cleared prototype -var NullProtoObjectViaIFrame = function () { - // Thrash, waste and sodomy: IE GC bug - var iframe = documentCreateElement('iframe'); - var JS = 'java' + SCRIPT + ':'; - var iframeDocument; - iframe.style.display = 'none'; - html.appendChild(iframe); - // https://github.com/zloirock/core-js/issues/475 - iframe.src = String(JS); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(scriptTag('document.F=Object')); - iframeDocument.close(); - return iframeDocument.F; -}; - -// Check for document.domain and active x support -// No need to use active x approach when document.domain is not set -// see https://github.com/es-shims/es5-shim/issues/150 -// variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 -// avoid IE GC bug -var activeXDocument; -var NullProtoObject = function () { - try { - /* global ActiveXObject */ - activeXDocument = document.domain && new ActiveXObject('htmlfile'); - } catch (error) { /* ignore */ } - NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); - var length = enumBugKeys.length; - while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; - return NullProtoObject(); -}; - -hiddenKeys[IE_PROTO] = true; - -// `Object.create` method -// https://tc39.github.io/ecma262/#sec-object.create -module.exports = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - EmptyConstructor[PROTOTYPE] = anObject(O); - result = new EmptyConstructor(); - EmptyConstructor[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = NullProtoObject(); - return Properties === undefined ? result : defineProperties(result, Properties); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-define-properties.js": -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/object-define-properties.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var objectKeys = __webpack_require__(/*! ../internals/object-keys */ "./node_modules/core-js/internals/object-keys.js"); - -// `Object.defineProperties` method -// https://tc39.github.io/ecma262/#sec-object.defineproperties -module.exports = DESCRIPTORS ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = objectKeys(Properties); - var length = keys.length; - var index = 0; - var key; - while (length > index) definePropertyModule.f(O, key = keys[index++], Properties[key]); - return O; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-define-property.js": -/*!******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-define-property.js ***! - \******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js/internals/ie8-dom-define.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js"); - -var nativeDefineProperty = Object.defineProperty; - -// `Object.defineProperty` method -// https://tc39.github.io/ecma262/#sec-object.defineproperty -exports.f = DESCRIPTORS ? nativeDefineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (IE8_DOM_DEFINE) try { - return nativeDefineProperty(O, P, Attributes); - } catch (error) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-get-own-property-descriptor.js": -/*!******************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-descriptor.js ***! - \******************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); -var propertyIsEnumerableModule = __webpack_require__(/*! ../internals/object-property-is-enumerable */ "./node_modules/core-js/internals/object-property-is-enumerable.js"); -var createPropertyDescriptor = __webpack_require__(/*! ../internals/create-property-descriptor */ "./node_modules/core-js/internals/create-property-descriptor.js"); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); -var toPrimitive = __webpack_require__(/*! ../internals/to-primitive */ "./node_modules/core-js/internals/to-primitive.js"); -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var IE8_DOM_DEFINE = __webpack_require__(/*! ../internals/ie8-dom-define */ "./node_modules/core-js/internals/ie8-dom-define.js"); - -var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// `Object.getOwnPropertyDescriptor` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor -exports.f = DESCRIPTORS ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject(O); - P = toPrimitive(P, true); - if (IE8_DOM_DEFINE) try { - return nativeGetOwnPropertyDescriptor(O, P); - } catch (error) { /* empty */ } - if (has(O, P)) return createPropertyDescriptor(!propertyIsEnumerableModule.f.call(O, P), O[P]); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-get-own-property-names.js": -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-names.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js/internals/object-keys-internal.js"); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js"); - -var hiddenKeys = enumBugKeys.concat('length', 'prototype'); - -// `Object.getOwnPropertyNames` method -// https://tc39.github.io/ecma262/#sec-object.getownpropertynames -exports.f = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return internalObjectKeys(O, hiddenKeys); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-get-own-property-symbols.js": -/*!***************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-own-property-symbols.js ***! - \***************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -exports.f = Object.getOwnPropertySymbols; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-get-prototype-of.js": -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-get-prototype-of.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var toObject = __webpack_require__(/*! ../internals/to-object */ "./node_modules/core-js/internals/to-object.js"); -var sharedKey = __webpack_require__(/*! ../internals/shared-key */ "./node_modules/core-js/internals/shared-key.js"); -var CORRECT_PROTOTYPE_GETTER = __webpack_require__(/*! ../internals/correct-prototype-getter */ "./node_modules/core-js/internals/correct-prototype-getter.js"); - -var IE_PROTO = sharedKey('IE_PROTO'); -var ObjectPrototype = Object.prototype; - -// `Object.getPrototypeOf` method -// https://tc39.github.io/ecma262/#sec-object.getprototypeof -module.exports = CORRECT_PROTOTYPE_GETTER ? Object.getPrototypeOf : function (O) { - O = toObject(O); - if (has(O, IE_PROTO)) return O[IE_PROTO]; - if (typeof O.constructor == 'function' && O instanceof O.constructor) { - return O.constructor.prototype; - } return O instanceof Object ? ObjectPrototype : null; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-keys-internal.js": -/*!****************************************************************!*\ - !*** ./node_modules/core-js/internals/object-keys-internal.js ***! - \****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var toIndexedObject = __webpack_require__(/*! ../internals/to-indexed-object */ "./node_modules/core-js/internals/to-indexed-object.js"); -var indexOf = __webpack_require__(/*! ../internals/array-includes */ "./node_modules/core-js/internals/array-includes.js").indexOf; -var hiddenKeys = __webpack_require__(/*! ../internals/hidden-keys */ "./node_modules/core-js/internals/hidden-keys.js"); - -module.exports = function (object, names) { - var O = toIndexedObject(object); - var i = 0; - var result = []; - var key; - for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~indexOf(result, key) || result.push(key); - } - return result; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-keys.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/object-keys.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var internalObjectKeys = __webpack_require__(/*! ../internals/object-keys-internal */ "./node_modules/core-js/internals/object-keys-internal.js"); -var enumBugKeys = __webpack_require__(/*! ../internals/enum-bug-keys */ "./node_modules/core-js/internals/enum-bug-keys.js"); - -// `Object.keys` method -// https://tc39.github.io/ecma262/#sec-object.keys -module.exports = Object.keys || function keys(O) { - return internalObjectKeys(O, enumBugKeys); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-property-is-enumerable.js": -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/internals/object-property-is-enumerable.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var nativePropertyIsEnumerable = {}.propertyIsEnumerable; -var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - -// Nashorn ~ JDK8 bug -var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); - -// `Object.prototype.propertyIsEnumerable` method implementation -// https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable -exports.f = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor(this, V); - return !!descriptor && descriptor.enumerable; -} : nativePropertyIsEnumerable; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/object-set-prototype-of.js": -/*!*******************************************************************!*\ - !*** ./node_modules/core-js/internals/object-set-prototype-of.js ***! - \*******************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var aPossiblePrototype = __webpack_require__(/*! ../internals/a-possible-prototype */ "./node_modules/core-js/internals/a-possible-prototype.js"); - -// `Object.setPrototypeOf` method -// https://tc39.github.io/ecma262/#sec-object.setprototypeof -// Works with __proto__ only. Old v8 can't work with null proto objects. -/* eslint-disable no-proto */ -module.exports = Object.setPrototypeOf || ('__proto__' in {} ? function () { - var CORRECT_SETTER = false; - var test = {}; - var setter; - try { - setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set; - setter.call(test, []); - CORRECT_SETTER = test instanceof Array; - } catch (error) { /* empty */ } - return function setPrototypeOf(O, proto) { - anObject(O); - aPossiblePrototype(proto); - if (CORRECT_SETTER) setter.call(O, proto); - else O.__proto__ = proto; - return O; - }; -}() : undefined); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/own-keys.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/own-keys.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); -var getOwnPropertyNamesModule = __webpack_require__(/*! ../internals/object-get-own-property-names */ "./node_modules/core-js/internals/object-get-own-property-names.js"); -var getOwnPropertySymbolsModule = __webpack_require__(/*! ../internals/object-get-own-property-symbols */ "./node_modules/core-js/internals/object-get-own-property-symbols.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); - -// all object keys, includes non-enumerable and symbols -module.exports = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { - var keys = getOwnPropertyNamesModule.f(anObject(it)); - var getOwnPropertySymbols = getOwnPropertySymbolsModule.f; - return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/path.js": -/*!************************************************!*\ - !*** ./node_modules/core-js/internals/path.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); - -module.exports = global; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/redefine-all.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/redefine-all.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var redefine = __webpack_require__(/*! ../internals/redefine */ "./node_modules/core-js/internals/redefine.js"); - -module.exports = function (target, src, options) { - for (var key in src) redefine(target, key, src[key], options); - return target; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/redefine.js": -/*!****************************************************!*\ - !*** ./node_modules/core-js/internals/redefine.js ***! - \****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js"); -var inspectSource = __webpack_require__(/*! ../internals/inspect-source */ "./node_modules/core-js/internals/inspect-source.js"); -var InternalStateModule = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js"); - -var getInternalState = InternalStateModule.get; -var enforceInternalState = InternalStateModule.enforce; -var TEMPLATE = String(String).split('String'); - -(module.exports = function (O, key, value, options) { - var unsafe = options ? !!options.unsafe : false; - var simple = options ? !!options.enumerable : false; - var noTargetGet = options ? !!options.noTargetGet : false; - if (typeof value == 'function') { - if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); - enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); - } - if (O === global) { - if (simple) O[key] = value; - else setGlobal(key, value); - return; - } else if (!unsafe) { - delete O[key]; - } else if (!noTargetGet && O[key]) { - simple = true; - } - if (simple) O[key] = value; - else createNonEnumerableProperty(O, key, value); -// add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative -})(Function.prototype, 'toString', function toString() { - return typeof this == 'function' && getInternalState(this).source || inspectSource(this); -}); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/reflect-metadata.js": -/*!************************************************************!*\ - !*** ./node_modules/core-js/internals/reflect-metadata.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` -var Map = __webpack_require__(/*! ../modules/es.map */ "./node_modules/core-js/modules/es.map.js"); -var WeakMap = __webpack_require__(/*! ../modules/es.weak-map */ "./node_modules/core-js/modules/es.weak-map.js"); -var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js"); - -var metadata = shared('metadata'); -var store = metadata.store || (metadata.store = new WeakMap()); - -var getOrCreateMetadataMap = function (target, targetKey, create) { - var targetMetadata = store.get(target); - if (!targetMetadata) { - if (!create) return; - store.set(target, targetMetadata = new Map()); - } - var keyMetadata = targetMetadata.get(targetKey); - if (!keyMetadata) { - if (!create) return; - targetMetadata.set(targetKey, keyMetadata = new Map()); - } return keyMetadata; -}; - -var ordinaryHasOwnMetadata = function (MetadataKey, O, P) { - var metadataMap = getOrCreateMetadataMap(O, P, false); - return metadataMap === undefined ? false : metadataMap.has(MetadataKey); -}; - -var ordinaryGetOwnMetadata = function (MetadataKey, O, P) { - var metadataMap = getOrCreateMetadataMap(O, P, false); - return metadataMap === undefined ? undefined : metadataMap.get(MetadataKey); -}; - -var ordinaryDefineOwnMetadata = function (MetadataKey, MetadataValue, O, P) { - getOrCreateMetadataMap(O, P, true).set(MetadataKey, MetadataValue); -}; - -var ordinaryOwnMetadataKeys = function (target, targetKey) { - var metadataMap = getOrCreateMetadataMap(target, targetKey, false); - var keys = []; - if (metadataMap) metadataMap.forEach(function (_, key) { keys.push(key); }); - return keys; -}; - -var toMetadataKey = function (it) { - return it === undefined || typeof it == 'symbol' ? it : String(it); -}; - -module.exports = { - store: store, - getMap: getOrCreateMetadataMap, - has: ordinaryHasOwnMetadata, - get: ordinaryGetOwnMetadata, - set: ordinaryDefineOwnMetadata, - keys: ordinaryOwnMetadataKeys, - toKey: toMetadataKey -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/require-object-coercible.js": -/*!********************************************************************!*\ - !*** ./node_modules/core-js/internals/require-object-coercible.js ***! - \********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -// `RequireObjectCoercible` abstract operation -// https://tc39.github.io/ecma262/#sec-requireobjectcoercible -module.exports = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/set-global.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/set-global.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var createNonEnumerableProperty = __webpack_require__(/*! ../internals/create-non-enumerable-property */ "./node_modules/core-js/internals/create-non-enumerable-property.js"); - -module.exports = function (key, value) { - try { - createNonEnumerableProperty(global, key, value); - } catch (error) { - global[key] = value; - } return value; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/set-species.js": -/*!*******************************************************!*\ - !*** ./node_modules/core-js/internals/set-species.js ***! - \*******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var getBuiltIn = __webpack_require__(/*! ../internals/get-built-in */ "./node_modules/core-js/internals/get-built-in.js"); -var definePropertyModule = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js"); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); -var DESCRIPTORS = __webpack_require__(/*! ../internals/descriptors */ "./node_modules/core-js/internals/descriptors.js"); - -var SPECIES = wellKnownSymbol('species'); - -module.exports = function (CONSTRUCTOR_NAME) { - var Constructor = getBuiltIn(CONSTRUCTOR_NAME); - var defineProperty = definePropertyModule.f; - - if (DESCRIPTORS && Constructor && !Constructor[SPECIES]) { - defineProperty(Constructor, SPECIES, { - configurable: true, - get: function () { return this; } - }); - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/set-to-string-tag.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/set-to-string-tag.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var defineProperty = __webpack_require__(/*! ../internals/object-define-property */ "./node_modules/core-js/internals/object-define-property.js").f; -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); - -module.exports = function (it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { - defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); - } -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/shared-key.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/shared-key.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js"); -var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js"); - -var keys = shared('keys'); - -module.exports = function (key) { - return keys[key] || (keys[key] = uid(key)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/shared-store.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/shared-store.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var setGlobal = __webpack_require__(/*! ../internals/set-global */ "./node_modules/core-js/internals/set-global.js"); - -var SHARED = '__core-js_shared__'; -var store = global[SHARED] || setGlobal(SHARED, {}); - -module.exports = store; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/shared.js": -/*!**************************************************!*\ - !*** ./node_modules/core-js/internals/shared.js ***! - \**************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var IS_PURE = __webpack_require__(/*! ../internals/is-pure */ "./node_modules/core-js/internals/is-pure.js"); -var store = __webpack_require__(/*! ../internals/shared-store */ "./node_modules/core-js/internals/shared-store.js"); - -(module.exports = function (key, value) { - return store[key] || (store[key] = value !== undefined ? value : {}); -})('versions', []).push({ - version: '3.6.4', - mode: IS_PURE ? 'pure' : 'global', - copyright: '© 2020 Denis Pushkarev (zloirock.ru)' -}); - - -/***/ }), - -/***/ "./node_modules/core-js/internals/to-absolute-index.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-absolute-index.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js"); - -var max = Math.max; -var min = Math.min; - -// Helper for a popular repeating case of the spec: -// Let integer be ? ToInteger(index). -// If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). -module.exports = function (index, length) { - var integer = toInteger(index); - return integer < 0 ? max(integer + length, 0) : min(integer, length); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/to-indexed-object.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/to-indexed-object.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// toObject with fallback for non-array-like ES3 strings -var IndexedObject = __webpack_require__(/*! ../internals/indexed-object */ "./node_modules/core-js/internals/indexed-object.js"); -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js"); - -module.exports = function (it) { - return IndexedObject(requireObjectCoercible(it)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/to-integer.js": -/*!******************************************************!*\ - !*** ./node_modules/core-js/internals/to-integer.js ***! - \******************************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var ceil = Math.ceil; -var floor = Math.floor; - -// `ToInteger` abstract operation -// https://tc39.github.io/ecma262/#sec-tointeger -module.exports = function (argument) { - return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/to-length.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-length.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var toInteger = __webpack_require__(/*! ../internals/to-integer */ "./node_modules/core-js/internals/to-integer.js"); - -var min = Math.min; - -// `ToLength` abstract operation -// https://tc39.github.io/ecma262/#sec-tolength -module.exports = function (argument) { - return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/to-object.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/internals/to-object.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var requireObjectCoercible = __webpack_require__(/*! ../internals/require-object-coercible */ "./node_modules/core-js/internals/require-object-coercible.js"); - -// `ToObject` abstract operation -// https://tc39.github.io/ecma262/#sec-toobject -module.exports = function (argument) { - return Object(requireObjectCoercible(argument)); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/to-primitive.js": -/*!********************************************************!*\ - !*** ./node_modules/core-js/internals/to-primitive.js ***! - \********************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); - -// `ToPrimitive` abstract operation -// https://tc39.github.io/ecma262/#sec-toprimitive -// instead of the ES6 spec version, we didn't implement @@toPrimitive case -// and the second argument - flag - preferred type is a string -module.exports = function (input, PREFERRED_STRING) { - if (!isObject(input)) return input; - var fn, val; - if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; - if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - throw TypeError("Can't convert object to primitive value"); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/to-string-tag-support.js": -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/internals/to-string-tag-support.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var wellKnownSymbol = __webpack_require__(/*! ../internals/well-known-symbol */ "./node_modules/core-js/internals/well-known-symbol.js"); - -var TO_STRING_TAG = wellKnownSymbol('toStringTag'); -var test = {}; - -test[TO_STRING_TAG] = 'z'; - -module.exports = String(test) === '[object z]'; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/uid.js": -/*!***********************************************!*\ - !*** ./node_modules/core-js/internals/uid.js ***! - \***********************************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -var id = 0; -var postfix = Math.random(); - -module.exports = function (key) { - return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); -}; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/use-symbol-as-uid.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/use-symbol-as-uid.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "./node_modules/core-js/internals/native-symbol.js"); - -module.exports = NATIVE_SYMBOL - // eslint-disable-next-line no-undef - && !Symbol.sham - // eslint-disable-next-line no-undef - && typeof Symbol.iterator == 'symbol'; - - -/***/ }), - -/***/ "./node_modules/core-js/internals/well-known-symbol.js": -/*!*************************************************************!*\ - !*** ./node_modules/core-js/internals/well-known-symbol.js ***! - \*************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var shared = __webpack_require__(/*! ../internals/shared */ "./node_modules/core-js/internals/shared.js"); -var has = __webpack_require__(/*! ../internals/has */ "./node_modules/core-js/internals/has.js"); -var uid = __webpack_require__(/*! ../internals/uid */ "./node_modules/core-js/internals/uid.js"); -var NATIVE_SYMBOL = __webpack_require__(/*! ../internals/native-symbol */ "./node_modules/core-js/internals/native-symbol.js"); -var USE_SYMBOL_AS_UID = __webpack_require__(/*! ../internals/use-symbol-as-uid */ "./node_modules/core-js/internals/use-symbol-as-uid.js"); - -var WellKnownSymbolsStore = shared('wks'); -var Symbol = global.Symbol; -var createWellKnownSymbol = USE_SYMBOL_AS_UID ? Symbol : Symbol && Symbol.withoutSetter || uid; - -module.exports = function (name) { - if (!has(WellKnownSymbolsStore, name)) { - if (NATIVE_SYMBOL && has(Symbol, name)) WellKnownSymbolsStore[name] = Symbol[name]; - else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); - } return WellKnownSymbolsStore[name]; -}; - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es.map.js": -/*!************************************************!*\ - !*** ./node_modules/core-js/modules/es.map.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var collection = __webpack_require__(/*! ../internals/collection */ "./node_modules/core-js/internals/collection.js"); -var collectionStrong = __webpack_require__(/*! ../internals/collection-strong */ "./node_modules/core-js/internals/collection-strong.js"); - -// `Map` constructor -// https://tc39.github.io/ecma262/#sec-map-objects -module.exports = collection('Map', function (init) { - return function Map() { return init(this, arguments.length ? arguments[0] : undefined); }; -}, collectionStrong); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es.set.js": -/*!************************************************!*\ - !*** ./node_modules/core-js/modules/es.set.js ***! - \************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var collection = __webpack_require__(/*! ../internals/collection */ "./node_modules/core-js/internals/collection.js"); -var collectionStrong = __webpack_require__(/*! ../internals/collection-strong */ "./node_modules/core-js/internals/collection-strong.js"); - -// `Set` constructor -// https://tc39.github.io/ecma262/#sec-set-objects -module.exports = collection('Set', function (init) { - return function Set() { return init(this, arguments.length ? arguments[0] : undefined); }; -}, collectionStrong); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/es.weak-map.js": -/*!*****************************************************!*\ - !*** ./node_modules/core-js/modules/es.weak-map.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - -var global = __webpack_require__(/*! ../internals/global */ "./node_modules/core-js/internals/global.js"); -var redefineAll = __webpack_require__(/*! ../internals/redefine-all */ "./node_modules/core-js/internals/redefine-all.js"); -var InternalMetadataModule = __webpack_require__(/*! ../internals/internal-metadata */ "./node_modules/core-js/internals/internal-metadata.js"); -var collection = __webpack_require__(/*! ../internals/collection */ "./node_modules/core-js/internals/collection.js"); -var collectionWeak = __webpack_require__(/*! ../internals/collection-weak */ "./node_modules/core-js/internals/collection-weak.js"); -var isObject = __webpack_require__(/*! ../internals/is-object */ "./node_modules/core-js/internals/is-object.js"); -var enforceIternalState = __webpack_require__(/*! ../internals/internal-state */ "./node_modules/core-js/internals/internal-state.js").enforce; -var NATIVE_WEAK_MAP = __webpack_require__(/*! ../internals/native-weak-map */ "./node_modules/core-js/internals/native-weak-map.js"); - -var IS_IE11 = !global.ActiveXObject && 'ActiveXObject' in global; -var isExtensible = Object.isExtensible; -var InternalWeakMap; - -var wrapper = function (init) { - return function WeakMap() { - return init(this, arguments.length ? arguments[0] : undefined); - }; -}; - -// `WeakMap` constructor -// https://tc39.github.io/ecma262/#sec-weakmap-constructor -var $WeakMap = module.exports = collection('WeakMap', wrapper, collectionWeak); - -// IE11 WeakMap frozen keys fix -// We can't use feature detection because it crash some old IE builds -// https://github.com/zloirock/core-js/issues/485 -if (NATIVE_WEAK_MAP && IS_IE11) { - InternalWeakMap = collectionWeak.getConstructor(wrapper, 'WeakMap', true); - InternalMetadataModule.REQUIRED = true; - var WeakMapPrototype = $WeakMap.prototype; - var nativeDelete = WeakMapPrototype['delete']; - var nativeHas = WeakMapPrototype.has; - var nativeGet = WeakMapPrototype.get; - var nativeSet = WeakMapPrototype.set; - redefineAll(WeakMapPrototype, { - 'delete': function (key) { - if (isObject(key) && !isExtensible(key)) { - var state = enforceIternalState(this); - if (!state.frozen) state.frozen = new InternalWeakMap(); - return nativeDelete.call(this, key) || state.frozen['delete'](key); - } return nativeDelete.call(this, key); - }, - has: function has(key) { - if (isObject(key) && !isExtensible(key)) { - var state = enforceIternalState(this); - if (!state.frozen) state.frozen = new InternalWeakMap(); - return nativeHas.call(this, key) || state.frozen.has(key); - } return nativeHas.call(this, key); - }, - get: function get(key) { - if (isObject(key) && !isExtensible(key)) { - var state = enforceIternalState(this); - if (!state.frozen) state.frozen = new InternalWeakMap(); - return nativeHas.call(this, key) ? nativeGet.call(this, key) : state.frozen.get(key); - } return nativeGet.call(this, key); - }, - set: function set(key, value) { - if (isObject(key) && !isExtensible(key)) { - var state = enforceIternalState(this); - if (!state.frozen) state.frozen = new InternalWeakMap(); - nativeHas.call(this, key) ? nativeSet.call(this, key, value) : state.frozen.set(key, value); - } else nativeSet.call(this, key, value); - return this; - } - }); -} - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.define-metadata.js": -/*!************************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.define-metadata.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); - -var toMetadataKey = ReflectMetadataModule.toKey; -var ordinaryDefineOwnMetadata = ReflectMetadataModule.set; - -// `Reflect.defineMetadata` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - defineMetadata: function defineMetadata(metadataKey, metadataValue, target /* , targetKey */) { - var targetKey = arguments.length < 4 ? undefined : toMetadataKey(arguments[3]); - ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), targetKey); - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.delete-metadata.js": -/*!************************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.delete-metadata.js ***! - \************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); - -var toMetadataKey = ReflectMetadataModule.toKey; -var getOrCreateMetadataMap = ReflectMetadataModule.getMap; -var store = ReflectMetadataModule.store; - -// `Reflect.deleteMetadata` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - deleteMetadata: function deleteMetadata(metadataKey, target /* , targetKey */) { - var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]); - var metadataMap = getOrCreateMetadataMap(anObject(target), targetKey, false); - if (metadataMap === undefined || !metadataMap['delete'](metadataKey)) return false; - if (metadataMap.size) return true; - var targetMetadata = store.get(target); - targetMetadata['delete'](targetKey); - return !!targetMetadata.size || store['delete'](target); - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js": -/*!**************************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js ***! - \**************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -// TODO: in core-js@4, move /modules/ dependencies to public entries for better optimization by tools like `preset-env` -var Set = __webpack_require__(/*! ../modules/es.set */ "./node_modules/core-js/modules/es.set.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js/internals/object-get-prototype-of.js"); -var iterate = __webpack_require__(/*! ../internals/iterate */ "./node_modules/core-js/internals/iterate.js"); - -var ordinaryOwnMetadataKeys = ReflectMetadataModule.keys; -var toMetadataKey = ReflectMetadataModule.toKey; - -var from = function (iter) { - var result = []; - iterate(iter, result.push, result); - return result; -}; - -var ordinaryMetadataKeys = function (O, P) { - var oKeys = ordinaryOwnMetadataKeys(O, P); - var parent = getPrototypeOf(O); - if (parent === null) return oKeys; - var pKeys = ordinaryMetadataKeys(parent, P); - return pKeys.length ? oKeys.length ? from(new Set(oKeys.concat(pKeys))) : pKeys : oKeys; -}; - -// `Reflect.getMetadataKeys` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - getMetadataKeys: function getMetadataKeys(target /* , targetKey */) { - var targetKey = arguments.length < 2 ? undefined : toMetadataKey(arguments[1]); - return ordinaryMetadataKeys(anObject(target), targetKey); - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.get-metadata.js": -/*!*********************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.get-metadata.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js/internals/object-get-prototype-of.js"); - -var ordinaryHasOwnMetadata = ReflectMetadataModule.has; -var ordinaryGetOwnMetadata = ReflectMetadataModule.get; -var toMetadataKey = ReflectMetadataModule.toKey; - -var ordinaryGetMetadata = function (MetadataKey, O, P) { - var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); - if (hasOwn) return ordinaryGetOwnMetadata(MetadataKey, O, P); - var parent = getPrototypeOf(O); - return parent !== null ? ordinaryGetMetadata(MetadataKey, parent, P) : undefined; -}; - -// `Reflect.getMetadata` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - getMetadata: function getMetadata(metadataKey, target /* , targetKey */) { - var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]); - return ordinaryGetMetadata(metadataKey, anObject(target), targetKey); - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js": -/*!******************************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js ***! - \******************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); - -var ordinaryOwnMetadataKeys = ReflectMetadataModule.keys; -var toMetadataKey = ReflectMetadataModule.toKey; - -// `Reflect.getOwnMetadataKeys` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - getOwnMetadataKeys: function getOwnMetadataKeys(target /* , targetKey */) { - var targetKey = arguments.length < 2 ? undefined : toMetadataKey(arguments[1]); - return ordinaryOwnMetadataKeys(anObject(target), targetKey); - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.get-own-metadata.js": -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.get-own-metadata.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); - -var ordinaryGetOwnMetadata = ReflectMetadataModule.get; -var toMetadataKey = ReflectMetadataModule.toKey; - -// `Reflect.getOwnMetadata` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - getOwnMetadata: function getOwnMetadata(metadataKey, target /* , targetKey */) { - var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]); - return ordinaryGetOwnMetadata(metadataKey, anObject(target), targetKey); - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.has-metadata.js": -/*!*********************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.has-metadata.js ***! - \*********************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); -var getPrototypeOf = __webpack_require__(/*! ../internals/object-get-prototype-of */ "./node_modules/core-js/internals/object-get-prototype-of.js"); - -var ordinaryHasOwnMetadata = ReflectMetadataModule.has; -var toMetadataKey = ReflectMetadataModule.toKey; - -var ordinaryHasMetadata = function (MetadataKey, O, P) { - var hasOwn = ordinaryHasOwnMetadata(MetadataKey, O, P); - if (hasOwn) return true; - var parent = getPrototypeOf(O); - return parent !== null ? ordinaryHasMetadata(MetadataKey, parent, P) : false; -}; - -// `Reflect.hasMetadata` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - hasMetadata: function hasMetadata(metadataKey, target /* , targetKey */) { - var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]); - return ordinaryHasMetadata(metadataKey, anObject(target), targetKey); - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.has-own-metadata.js": -/*!*************************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.has-own-metadata.js ***! - \*************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); - -var ordinaryHasOwnMetadata = ReflectMetadataModule.has; -var toMetadataKey = ReflectMetadataModule.toKey; - -// `Reflect.hasOwnMetadata` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - hasOwnMetadata: function hasOwnMetadata(metadataKey, target /* , targetKey */) { - var targetKey = arguments.length < 3 ? undefined : toMetadataKey(arguments[2]); - return ordinaryHasOwnMetadata(metadataKey, anObject(target), targetKey); - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/modules/esnext.reflect.metadata.js": -/*!*****************************************************************!*\ - !*** ./node_modules/core-js/modules/esnext.reflect.metadata.js ***! - \*****************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var $ = __webpack_require__(/*! ../internals/export */ "./node_modules/core-js/internals/export.js"); -var ReflectMetadataModule = __webpack_require__(/*! ../internals/reflect-metadata */ "./node_modules/core-js/internals/reflect-metadata.js"); -var anObject = __webpack_require__(/*! ../internals/an-object */ "./node_modules/core-js/internals/an-object.js"); - -var toMetadataKey = ReflectMetadataModule.toKey; -var ordinaryDefineOwnMetadata = ReflectMetadataModule.set; - -// `Reflect.metadata` method -// https://github.com/rbuckton/reflect-metadata -$({ target: 'Reflect', stat: true }, { - metadata: function metadata(metadataKey, metadataValue) { - return function decorator(target, key) { - ordinaryDefineOwnMetadata(metadataKey, metadataValue, anObject(target), toMetadataKey(key)); - }; - } -}); - - -/***/ }), - -/***/ "./node_modules/core-js/proposals/reflect-metadata.js": -/*!************************************************************!*\ - !*** ./node_modules/core-js/proposals/reflect-metadata.js ***! - \************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! ../modules/esnext.reflect.define-metadata */ "./node_modules/core-js/modules/esnext.reflect.define-metadata.js"); -__webpack_require__(/*! ../modules/esnext.reflect.delete-metadata */ "./node_modules/core-js/modules/esnext.reflect.delete-metadata.js"); -__webpack_require__(/*! ../modules/esnext.reflect.get-metadata */ "./node_modules/core-js/modules/esnext.reflect.get-metadata.js"); -__webpack_require__(/*! ../modules/esnext.reflect.get-metadata-keys */ "./node_modules/core-js/modules/esnext.reflect.get-metadata-keys.js"); -__webpack_require__(/*! ../modules/esnext.reflect.get-own-metadata */ "./node_modules/core-js/modules/esnext.reflect.get-own-metadata.js"); -__webpack_require__(/*! ../modules/esnext.reflect.get-own-metadata-keys */ "./node_modules/core-js/modules/esnext.reflect.get-own-metadata-keys.js"); -__webpack_require__(/*! ../modules/esnext.reflect.has-metadata */ "./node_modules/core-js/modules/esnext.reflect.has-metadata.js"); -__webpack_require__(/*! ../modules/esnext.reflect.has-own-metadata */ "./node_modules/core-js/modules/esnext.reflect.has-own-metadata.js"); -__webpack_require__(/*! ../modules/esnext.reflect.metadata */ "./node_modules/core-js/modules/esnext.reflect.metadata.js"); - - -/***/ }), - -/***/ "./node_modules/zone.js/dist/zone-evergreen.js": -/*!*****************************************************!*\ - !*** ./node_modules/zone.js/dist/zone-evergreen.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -var __WEBPACK_AMD_DEFINE_FACTORY__, __WEBPACK_AMD_DEFINE_RESULT__;/** -* @license Angular v9.1.0-next.4+61.sha-e552591.with-local-changes -* (c) 2010-2020 Google LLC. https://angular.io/ -* License: MIT -*/ -(function (factory) { - true ? !(__WEBPACK_AMD_DEFINE_FACTORY__ = (factory), - __WEBPACK_AMD_DEFINE_RESULT__ = (typeof __WEBPACK_AMD_DEFINE_FACTORY__ === 'function' ? - (__WEBPACK_AMD_DEFINE_FACTORY__.call(exports, __webpack_require__, exports, module)) : - __WEBPACK_AMD_DEFINE_FACTORY__), - __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) : - undefined; -}((function () { 'use strict'; - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - const Zone$1 = (function (global) { - const performance = global['performance']; - function mark(name) { performance && performance['mark'] && performance['mark'](name); } - function performanceMeasure(name, label) { - performance && performance['measure'] && performance['measure'](name, label); - } - mark('Zone'); - // Initialize before it's accessed below. - // __Zone_symbol_prefix global can be used to override the default zone - // symbol prefix with a custom one if needed. - const symbolPrefix = global['__Zone_symbol_prefix'] || '__zone_symbol__'; - function __symbol__(name) { return symbolPrefix + name; } - const checkDuplicate = global[__symbol__('forceDuplicateZoneCheck')] === true; - if (global['Zone']) { - // if global['Zone'] already exists (maybe zone.js was already loaded or - // some other lib also registered a global object named Zone), we may need - // to throw an error, but sometimes user may not want this error. - // For example, - // we have two web pages, page1 includes zone.js, page2 doesn't. - // and the 1st time user load page1 and page2, everything work fine, - // but when user load page2 again, error occurs because global['Zone'] already exists. - // so we add a flag to let user choose whether to throw this error or not. - // By default, if existing Zone is from zone.js, we will not throw the error. - if (checkDuplicate || typeof global['Zone'].__symbol__ !== 'function') { - throw new Error('Zone already loaded.'); - } - else { - return global['Zone']; - } - } - class Zone { - constructor(parent, zoneSpec) { - this._parent = parent; - this._name = zoneSpec ? zoneSpec.name || 'unnamed' : ''; - this._properties = zoneSpec && zoneSpec.properties || {}; - this._zoneDelegate = - new ZoneDelegate(this, this._parent && this._parent._zoneDelegate, zoneSpec); - } - static assertZonePatched() { - if (global['Promise'] !== patches['ZoneAwarePromise']) { - throw new Error('Zone.js has detected that ZoneAwarePromise `(window|global).Promise` ' + - 'has been overwritten.\n' + - 'Most likely cause is that a Promise polyfill has been loaded ' + - 'after Zone.js (Polyfilling Promise api is not necessary when zone.js is loaded. ' + - 'If you must load one, do so before loading zone.js.)'); - } - } - static get root() { - let zone = Zone.current; - while (zone.parent) { - zone = zone.parent; - } - return zone; - } - static get current() { return _currentZoneFrame.zone; } - static get currentTask() { return _currentTask; } - // tslint:disable-next-line:require-internal-with-underscore - static __load_patch(name, fn) { - if (patches.hasOwnProperty(name)) { - if (checkDuplicate) { - throw Error('Already loaded patch: ' + name); - } - } - else if (!global['__Zone_disable_' + name]) { - const perfName = 'Zone:' + name; - mark(perfName); - patches[name] = fn(global, Zone, _api); - performanceMeasure(perfName, perfName); - } - } - get parent() { return this._parent; } - get name() { return this._name; } - get(key) { - const zone = this.getZoneWith(key); - if (zone) - return zone._properties[key]; - } - getZoneWith(key) { - let current = this; - while (current) { - if (current._properties.hasOwnProperty(key)) { - return current; - } - current = current._parent; - } - return null; - } - fork(zoneSpec) { - if (!zoneSpec) - throw new Error('ZoneSpec required!'); - return this._zoneDelegate.fork(this, zoneSpec); - } - wrap(callback, source) { - if (typeof callback !== 'function') { - throw new Error('Expecting function got: ' + callback); - } - const _callback = this._zoneDelegate.intercept(this, callback, source); - const zone = this; - return function () { - return zone.runGuarded(_callback, this, arguments, source); - }; - } - run(callback, applyThis, applyArgs, source) { - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); - } - finally { - _currentZoneFrame = _currentZoneFrame.parent; - } - } - runGuarded(callback, applyThis = null, applyArgs, source) { - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - try { - return this._zoneDelegate.invoke(this, callback, applyThis, applyArgs, source); - } - catch (error) { - if (this._zoneDelegate.handleError(this, error)) { - throw error; - } - } - } - finally { - _currentZoneFrame = _currentZoneFrame.parent; - } - } - runTask(task, applyThis, applyArgs) { - if (task.zone != this) { - throw new Error('A task can only be run in the zone of creation! (Creation: ' + - (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); - } - // https://github.com/angular/zone.js/issues/778, sometimes eventTask - // will run in notScheduled(canceled) state, we should not try to - // run such kind of task but just return - if (task.state === notScheduled && (task.type === eventTask || task.type === macroTask)) { - return; - } - const reEntryGuard = task.state != running; - reEntryGuard && task._transitionTo(running, scheduled); - task.runCount++; - const previousTask = _currentTask; - _currentTask = task; - _currentZoneFrame = { parent: _currentZoneFrame, zone: this }; - try { - if (task.type == macroTask && task.data && !task.data.isPeriodic) { - task.cancelFn = undefined; - } - try { - return this._zoneDelegate.invokeTask(this, task, applyThis, applyArgs); - } - catch (error) { - if (this._zoneDelegate.handleError(this, error)) { - throw error; - } - } - } - finally { - // if the task's state is notScheduled or unknown, then it has already been cancelled - // we should not reset the state to scheduled - if (task.state !== notScheduled && task.state !== unknown) { - if (task.type == eventTask || (task.data && task.data.isPeriodic)) { - reEntryGuard && task._transitionTo(scheduled, running); - } - else { - task.runCount = 0; - this._updateTaskCount(task, -1); - reEntryGuard && - task._transitionTo(notScheduled, running, notScheduled); - } - } - _currentZoneFrame = _currentZoneFrame.parent; - _currentTask = previousTask; - } - } - scheduleTask(task) { - if (task.zone && task.zone !== this) { - // check if the task was rescheduled, the newZone - // should not be the children of the original zone - let newZone = this; - while (newZone) { - if (newZone === task.zone) { - throw Error(`can not reschedule task to ${this.name} which is descendants of the original zone ${task.zone.name}`); - } - newZone = newZone.parent; - } - } - task._transitionTo(scheduling, notScheduled); - const zoneDelegates = []; - task._zoneDelegates = zoneDelegates; - task._zone = this; - try { - task = this._zoneDelegate.scheduleTask(this, task); - } - catch (err) { - // should set task's state to unknown when scheduleTask throw error - // because the err may from reschedule, so the fromState maybe notScheduled - task._transitionTo(unknown, scheduling, notScheduled); - // TODO: @JiaLiPassion, should we check the result from handleError? - this._zoneDelegate.handleError(this, err); - throw err; - } - if (task._zoneDelegates === zoneDelegates) { - // we have to check because internally the delegate can reschedule the task. - this._updateTaskCount(task, 1); - } - if (task.state == scheduling) { - task._transitionTo(scheduled, scheduling); - } - return task; - } - scheduleMicroTask(source, callback, data, customSchedule) { - return this.scheduleTask(new ZoneTask(microTask, source, callback, data, customSchedule, undefined)); - } - scheduleMacroTask(source, callback, data, customSchedule, customCancel) { - return this.scheduleTask(new ZoneTask(macroTask, source, callback, data, customSchedule, customCancel)); - } - scheduleEventTask(source, callback, data, customSchedule, customCancel) { - return this.scheduleTask(new ZoneTask(eventTask, source, callback, data, customSchedule, customCancel)); - } - cancelTask(task) { - if (task.zone != this) - throw new Error('A task can only be cancelled in the zone of creation! (Creation: ' + - (task.zone || NO_ZONE).name + '; Execution: ' + this.name + ')'); - task._transitionTo(canceling, scheduled, running); - try { - this._zoneDelegate.cancelTask(this, task); - } - catch (err) { - // if error occurs when cancelTask, transit the state to unknown - task._transitionTo(unknown, canceling); - this._zoneDelegate.handleError(this, err); - throw err; - } - this._updateTaskCount(task, -1); - task._transitionTo(notScheduled, canceling); - task.runCount = 0; - return task; - } - _updateTaskCount(task, count) { - const zoneDelegates = task._zoneDelegates; - if (count == -1) { - task._zoneDelegates = null; - } - for (let i = 0; i < zoneDelegates.length; i++) { - zoneDelegates[i]._updateTaskCount(task.type, count); - } - } - } - // tslint:disable-next-line:require-internal-with-underscore - Zone.__symbol__ = __symbol__; - const DELEGATE_ZS = { - name: '', - onHasTask: (delegate, _, target, hasTaskState) => delegate.hasTask(target, hasTaskState), - onScheduleTask: (delegate, _, target, task) => delegate.scheduleTask(target, task), - onInvokeTask: (delegate, _, target, task, applyThis, applyArgs) => delegate.invokeTask(target, task, applyThis, applyArgs), - onCancelTask: (delegate, _, target, task) => delegate.cancelTask(target, task) - }; - class ZoneDelegate { - constructor(zone, parentDelegate, zoneSpec) { - this._taskCounts = { 'microTask': 0, 'macroTask': 0, 'eventTask': 0 }; - this.zone = zone; - this._parentDelegate = parentDelegate; - this._forkZS = - zoneSpec && (zoneSpec && zoneSpec.onFork ? zoneSpec : parentDelegate._forkZS); - this._forkDlgt = zoneSpec && (zoneSpec.onFork ? parentDelegate : parentDelegate._forkDlgt); - this._forkCurrZone = - zoneSpec && (zoneSpec.onFork ? this.zone : parentDelegate._forkCurrZone); - this._interceptZS = - zoneSpec && (zoneSpec.onIntercept ? zoneSpec : parentDelegate._interceptZS); - this._interceptDlgt = - zoneSpec && (zoneSpec.onIntercept ? parentDelegate : parentDelegate._interceptDlgt); - this._interceptCurrZone = - zoneSpec && (zoneSpec.onIntercept ? this.zone : parentDelegate._interceptCurrZone); - this._invokeZS = zoneSpec && (zoneSpec.onInvoke ? zoneSpec : parentDelegate._invokeZS); - this._invokeDlgt = - zoneSpec && (zoneSpec.onInvoke ? parentDelegate : parentDelegate._invokeDlgt); - this._invokeCurrZone = - zoneSpec && (zoneSpec.onInvoke ? this.zone : parentDelegate._invokeCurrZone); - this._handleErrorZS = - zoneSpec && (zoneSpec.onHandleError ? zoneSpec : parentDelegate._handleErrorZS); - this._handleErrorDlgt = zoneSpec && - (zoneSpec.onHandleError ? parentDelegate : parentDelegate._handleErrorDlgt); - this._handleErrorCurrZone = - zoneSpec && (zoneSpec.onHandleError ? this.zone : parentDelegate._handleErrorCurrZone); - this._scheduleTaskZS = - zoneSpec && (zoneSpec.onScheduleTask ? zoneSpec : parentDelegate._scheduleTaskZS); - this._scheduleTaskDlgt = zoneSpec && - (zoneSpec.onScheduleTask ? parentDelegate : parentDelegate._scheduleTaskDlgt); - this._scheduleTaskCurrZone = zoneSpec && - (zoneSpec.onScheduleTask ? this.zone : parentDelegate._scheduleTaskCurrZone); - this._invokeTaskZS = - zoneSpec && (zoneSpec.onInvokeTask ? zoneSpec : parentDelegate._invokeTaskZS); - this._invokeTaskDlgt = - zoneSpec && (zoneSpec.onInvokeTask ? parentDelegate : parentDelegate._invokeTaskDlgt); - this._invokeTaskCurrZone = - zoneSpec && (zoneSpec.onInvokeTask ? this.zone : parentDelegate._invokeTaskCurrZone); - this._cancelTaskZS = - zoneSpec && (zoneSpec.onCancelTask ? zoneSpec : parentDelegate._cancelTaskZS); - this._cancelTaskDlgt = - zoneSpec && (zoneSpec.onCancelTask ? parentDelegate : parentDelegate._cancelTaskDlgt); - this._cancelTaskCurrZone = - zoneSpec && (zoneSpec.onCancelTask ? this.zone : parentDelegate._cancelTaskCurrZone); - this._hasTaskZS = null; - this._hasTaskDlgt = null; - this._hasTaskDlgtOwner = null; - this._hasTaskCurrZone = null; - const zoneSpecHasTask = zoneSpec && zoneSpec.onHasTask; - const parentHasTask = parentDelegate && parentDelegate._hasTaskZS; - if (zoneSpecHasTask || parentHasTask) { - // If we need to report hasTask, than this ZS needs to do ref counting on tasks. In such - // a case all task related interceptors must go through this ZD. We can't short circuit it. - this._hasTaskZS = zoneSpecHasTask ? zoneSpec : DELEGATE_ZS; - this._hasTaskDlgt = parentDelegate; - this._hasTaskDlgtOwner = this; - this._hasTaskCurrZone = zone; - if (!zoneSpec.onScheduleTask) { - this._scheduleTaskZS = DELEGATE_ZS; - this._scheduleTaskDlgt = parentDelegate; - this._scheduleTaskCurrZone = this.zone; - } - if (!zoneSpec.onInvokeTask) { - this._invokeTaskZS = DELEGATE_ZS; - this._invokeTaskDlgt = parentDelegate; - this._invokeTaskCurrZone = this.zone; - } - if (!zoneSpec.onCancelTask) { - this._cancelTaskZS = DELEGATE_ZS; - this._cancelTaskDlgt = parentDelegate; - this._cancelTaskCurrZone = this.zone; - } - } - } - fork(targetZone, zoneSpec) { - return this._forkZS ? - this._forkZS.onFork(this._forkDlgt, this.zone, targetZone, zoneSpec) : - new Zone(targetZone, zoneSpec); - } - intercept(targetZone, callback, source) { - return this._interceptZS ? - this._interceptZS.onIntercept(this._interceptDlgt, this._interceptCurrZone, targetZone, callback, source) : - callback; - } - invoke(targetZone, callback, applyThis, applyArgs, source) { - return this._invokeZS ? - this._invokeZS.onInvoke(this._invokeDlgt, this._invokeCurrZone, targetZone, callback, applyThis, applyArgs, source) : - callback.apply(applyThis, applyArgs); - } - handleError(targetZone, error) { - return this._handleErrorZS ? - this._handleErrorZS.onHandleError(this._handleErrorDlgt, this._handleErrorCurrZone, targetZone, error) : - true; - } - scheduleTask(targetZone, task) { - let returnTask = task; - if (this._scheduleTaskZS) { - if (this._hasTaskZS) { - returnTask._zoneDelegates.push(this._hasTaskDlgtOwner); - } - // clang-format off - returnTask = this._scheduleTaskZS.onScheduleTask(this._scheduleTaskDlgt, this._scheduleTaskCurrZone, targetZone, task); - // clang-format on - if (!returnTask) - returnTask = task; - } - else { - if (task.scheduleFn) { - task.scheduleFn(task); - } - else if (task.type == microTask) { - scheduleMicroTask(task); - } - else { - throw new Error('Task is missing scheduleFn.'); - } - } - return returnTask; - } - invokeTask(targetZone, task, applyThis, applyArgs) { - return this._invokeTaskZS ? - this._invokeTaskZS.onInvokeTask(this._invokeTaskDlgt, this._invokeTaskCurrZone, targetZone, task, applyThis, applyArgs) : - task.callback.apply(applyThis, applyArgs); - } - cancelTask(targetZone, task) { - let value; - if (this._cancelTaskZS) { - value = this._cancelTaskZS.onCancelTask(this._cancelTaskDlgt, this._cancelTaskCurrZone, targetZone, task); - } - else { - if (!task.cancelFn) { - throw Error('Task is not cancelable'); - } - value = task.cancelFn(task); - } - return value; - } - hasTask(targetZone, isEmpty) { - // hasTask should not throw error so other ZoneDelegate - // can still trigger hasTask callback - try { - this._hasTaskZS && - this._hasTaskZS.onHasTask(this._hasTaskDlgt, this._hasTaskCurrZone, targetZone, isEmpty); - } - catch (err) { - this.handleError(targetZone, err); - } - } - // tslint:disable-next-line:require-internal-with-underscore - _updateTaskCount(type, count) { - const counts = this._taskCounts; - const prev = counts[type]; - const next = counts[type] = prev + count; - if (next < 0) { - throw new Error('More tasks executed then were scheduled.'); - } - if (prev == 0 || next == 0) { - const isEmpty = { - microTask: counts['microTask'] > 0, - macroTask: counts['macroTask'] > 0, - eventTask: counts['eventTask'] > 0, - change: type - }; - this.hasTask(this.zone, isEmpty); - } - } - } - class ZoneTask { - constructor(type, source, callback, options, scheduleFn, cancelFn) { - // tslint:disable-next-line:require-internal-with-underscore - this._zone = null; - this.runCount = 0; - // tslint:disable-next-line:require-internal-with-underscore - this._zoneDelegates = null; - // tslint:disable-next-line:require-internal-with-underscore - this._state = 'notScheduled'; - this.type = type; - this.source = source; - this.data = options; - this.scheduleFn = scheduleFn; - this.cancelFn = cancelFn; - if (!callback) { - throw new Error('callback is not defined'); - } - this.callback = callback; - const self = this; - // TODO: @JiaLiPassion options should have interface - if (type === eventTask && options && options.useG) { - this.invoke = ZoneTask.invokeTask; - } - else { - this.invoke = function () { - return ZoneTask.invokeTask.call(global, self, this, arguments); - }; - } - } - static invokeTask(task, target, args) { - if (!task) { - task = this; - } - _numberOfNestedTaskFrames++; - try { - task.runCount++; - return task.zone.runTask(task, target, args); - } - finally { - if (_numberOfNestedTaskFrames == 1) { - drainMicroTaskQueue(); - } - _numberOfNestedTaskFrames--; - } - } - get zone() { return this._zone; } - get state() { return this._state; } - cancelScheduleRequest() { this._transitionTo(notScheduled, scheduling); } - // tslint:disable-next-line:require-internal-with-underscore - _transitionTo(toState, fromState1, fromState2) { - if (this._state === fromState1 || this._state === fromState2) { - this._state = toState; - if (toState == notScheduled) { - this._zoneDelegates = null; - } - } - else { - throw new Error(`${this.type} '${this.source}': can not transition to '${toState}', expecting state '${fromState1}'${fromState2 ? ' or \'' + fromState2 + '\'' : ''}, was '${this._state}'.`); - } - } - toString() { - if (this.data && typeof this.data.handleId !== 'undefined') { - return this.data.handleId.toString(); - } - else { - return Object.prototype.toString.call(this); - } - } - // add toJSON method to prevent cyclic error when - // call JSON.stringify(zoneTask) - toJSON() { - return { - type: this.type, - state: this.state, - source: this.source, - zone: this.zone.name, - runCount: this.runCount - }; - } - } - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - /// MICROTASK QUEUE - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - const symbolSetTimeout = __symbol__('setTimeout'); - const symbolPromise = __symbol__('Promise'); - const symbolThen = __symbol__('then'); - let _microTaskQueue = []; - let _isDrainingMicrotaskQueue = false; - let nativeMicroTaskQueuePromise; - function scheduleMicroTask(task) { - // if we are not running in any task, and there has not been anything scheduled - // we must bootstrap the initial task creation by manually scheduling the drain - if (_numberOfNestedTaskFrames === 0 && _microTaskQueue.length === 0) { - // We are not running in Task, so we need to kickstart the microtask queue. - if (!nativeMicroTaskQueuePromise) { - if (global[symbolPromise]) { - nativeMicroTaskQueuePromise = global[symbolPromise].resolve(0); - } - } - if (nativeMicroTaskQueuePromise) { - let nativeThen = nativeMicroTaskQueuePromise[symbolThen]; - if (!nativeThen) { - // native Promise is not patchable, we need to use `then` directly - // issue 1078 - nativeThen = nativeMicroTaskQueuePromise['then']; - } - nativeThen.call(nativeMicroTaskQueuePromise, drainMicroTaskQueue); - } - else { - global[symbolSetTimeout](drainMicroTaskQueue, 0); - } - } - task && _microTaskQueue.push(task); - } - function drainMicroTaskQueue() { - if (!_isDrainingMicrotaskQueue) { - _isDrainingMicrotaskQueue = true; - while (_microTaskQueue.length) { - const queue = _microTaskQueue; - _microTaskQueue = []; - for (let i = 0; i < queue.length; i++) { - const task = queue[i]; - try { - task.zone.runTask(task, null, null); - } - catch (error) { - _api.onUnhandledError(error); - } - } - } - _api.microtaskDrainDone(); - _isDrainingMicrotaskQueue = false; - } - } - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - /// BOOTSTRAP - ////////////////////////////////////////////////////// - ////////////////////////////////////////////////////// - const NO_ZONE = { name: 'NO ZONE' }; - const notScheduled = 'notScheduled', scheduling = 'scheduling', scheduled = 'scheduled', running = 'running', canceling = 'canceling', unknown = 'unknown'; - const microTask = 'microTask', macroTask = 'macroTask', eventTask = 'eventTask'; - const patches = {}; - const _api = { - symbol: __symbol__, - currentZoneFrame: () => _currentZoneFrame, - onUnhandledError: noop, - microtaskDrainDone: noop, - scheduleMicroTask: scheduleMicroTask, - showUncaughtError: () => !Zone[__symbol__('ignoreConsoleErrorUncaughtError')], - patchEventTarget: () => [], - patchOnProperties: noop, - patchMethod: () => noop, - bindArguments: () => [], - patchThen: () => noop, - patchMacroTask: () => noop, - setNativePromise: (NativePromise) => { - // sometimes NativePromise.resolve static function - // is not ready yet, (such as core-js/es6.promise) - // so we need to check here. - if (NativePromise && typeof NativePromise.resolve === 'function') { - nativeMicroTaskQueuePromise = NativePromise.resolve(0); - } - }, - patchEventPrototype: () => noop, - isIEOrEdge: () => false, - getGlobalObjects: () => undefined, - ObjectDefineProperty: () => noop, - ObjectGetOwnPropertyDescriptor: () => undefined, - ObjectCreate: () => undefined, - ArraySlice: () => [], - patchClass: () => noop, - wrapWithCurrentZone: () => noop, - filterProperties: () => [], - attachOriginToPatched: () => noop, - _redefineProperty: () => noop, - patchCallbacks: () => noop - }; - let _currentZoneFrame = { parent: null, zone: new Zone(null, null) }; - let _currentTask = null; - let _numberOfNestedTaskFrames = 0; - function noop() { } - performanceMeasure('Zone', 'Zone'); - return global['Zone'] = Zone; - })(typeof window !== 'undefined' && window || typeof self !== 'undefined' && self || global); - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - Zone.__load_patch('ZoneAwarePromise', (global, Zone, api) => { - const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - const ObjectDefineProperty = Object.defineProperty; - function readableObjectToString(obj) { - if (obj && obj.toString === Object.prototype.toString) { - const className = obj.constructor && obj.constructor.name; - return (className ? className : '') + ': ' + JSON.stringify(obj); - } - return obj ? obj.toString() : Object.prototype.toString.call(obj); - } - const __symbol__ = api.symbol; - const _uncaughtPromiseErrors = []; - const isDisableWrappingUncaughtPromiseRejection = global[__symbol__('DISABLE_WRAPPING_UNCAUGHT_PROMISE_REJECTION')] === true; - const symbolPromise = __symbol__('Promise'); - const symbolThen = __symbol__('then'); - const creationTrace = '__creationTrace__'; - api.onUnhandledError = (e) => { - if (api.showUncaughtError()) { - const rejection = e && e.rejection; - if (rejection) { - console.error('Unhandled Promise rejection:', rejection instanceof Error ? rejection.message : rejection, '; Zone:', e.zone.name, '; Task:', e.task && e.task.source, '; Value:', rejection, rejection instanceof Error ? rejection.stack : undefined); - } - else { - console.error(e); - } - } - }; - api.microtaskDrainDone = () => { - while (_uncaughtPromiseErrors.length) { - const uncaughtPromiseError = _uncaughtPromiseErrors.shift(); - try { - uncaughtPromiseError.zone.runGuarded(() => { throw uncaughtPromiseError; }); - } - catch (error) { - handleUnhandledRejection(error); - } - } - }; - const UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL = __symbol__('unhandledPromiseRejectionHandler'); - function handleUnhandledRejection(e) { - api.onUnhandledError(e); - try { - const handler = Zone[UNHANDLED_PROMISE_REJECTION_HANDLER_SYMBOL]; - if (typeof handler === 'function') { - handler.call(this, e); - } - } - catch (err) { - } - } - function isThenable(value) { return value && value.then; } - function forwardResolution(value) { return value; } - function forwardRejection(rejection) { return ZoneAwarePromise.reject(rejection); } - const symbolState = __symbol__('state'); - const symbolValue = __symbol__('value'); - const symbolFinally = __symbol__('finally'); - const symbolParentPromiseValue = __symbol__('parentPromiseValue'); - const symbolParentPromiseState = __symbol__('parentPromiseState'); - const source = 'Promise.then'; - const UNRESOLVED = null; - const RESOLVED = true; - const REJECTED = false; - const REJECTED_NO_CATCH = 0; - function makeResolver(promise, state) { - return (v) => { - try { - resolvePromise(promise, state, v); - } - catch (err) { - resolvePromise(promise, false, err); - } - // Do not return value or you will break the Promise spec. - }; - } - const once = function () { - let wasCalled = false; - return function wrapper(wrappedFunction) { - return function () { - if (wasCalled) { - return; - } - wasCalled = true; - wrappedFunction.apply(null, arguments); - }; - }; - }; - const TYPE_ERROR = 'Promise resolved with itself'; - const CURRENT_TASK_TRACE_SYMBOL = __symbol__('currentTaskTrace'); - // Promise Resolution - function resolvePromise(promise, state, value) { - const onceWrapper = once(); - if (promise === value) { - throw new TypeError(TYPE_ERROR); - } - if (promise[symbolState] === UNRESOLVED) { - // should only get value.then once based on promise spec. - let then = null; - try { - if (typeof value === 'object' || typeof value === 'function') { - then = value && value.then; - } - } - catch (err) { - onceWrapper(() => { resolvePromise(promise, false, err); })(); - return promise; - } - // if (value instanceof ZoneAwarePromise) { - if (state !== REJECTED && value instanceof ZoneAwarePromise && - value.hasOwnProperty(symbolState) && value.hasOwnProperty(symbolValue) && - value[symbolState] !== UNRESOLVED) { - clearRejectedNoCatch(value); - resolvePromise(promise, value[symbolState], value[symbolValue]); - } - else if (state !== REJECTED && typeof then === 'function') { - try { - then.call(value, onceWrapper(makeResolver(promise, state)), onceWrapper(makeResolver(promise, false))); - } - catch (err) { - onceWrapper(() => { resolvePromise(promise, false, err); })(); - } - } - else { - promise[symbolState] = state; - const queue = promise[symbolValue]; - promise[symbolValue] = value; - if (promise[symbolFinally] === symbolFinally) { - // the promise is generated by Promise.prototype.finally - if (state === RESOLVED) { - // the state is resolved, should ignore the value - // and use parent promise value - promise[symbolState] = promise[symbolParentPromiseState]; - promise[symbolValue] = promise[symbolParentPromiseValue]; - } - } - // record task information in value when error occurs, so we can - // do some additional work such as render longStackTrace - if (state === REJECTED && value instanceof Error) { - // check if longStackTraceZone is here - const trace = Zone.currentTask && Zone.currentTask.data && - Zone.currentTask.data[creationTrace]; - if (trace) { - // only keep the long stack trace into error when in longStackTraceZone - ObjectDefineProperty(value, CURRENT_TASK_TRACE_SYMBOL, { configurable: true, enumerable: false, writable: true, value: trace }); - } - } - for (let i = 0; i < queue.length;) { - scheduleResolveOrReject(promise, queue[i++], queue[i++], queue[i++], queue[i++]); - } - if (queue.length == 0 && state == REJECTED) { - promise[symbolState] = REJECTED_NO_CATCH; - let uncaughtPromiseError = value; - if (!isDisableWrappingUncaughtPromiseRejection) { - // If disable wrapping uncaught promise reject - // and the rejected value is an Error object, - // use the value instead of wrapping it. - try { - // Here we throws a new Error to print more readable error log - // and if the value is not an error, zone.js builds an `Error` - // Object here to attach the stack information. - throw new Error('Uncaught (in promise): ' + readableObjectToString(value) + - (value && value.stack ? '\n' + value.stack : '')); - } - catch (err) { - uncaughtPromiseError = err; - } - } - uncaughtPromiseError.rejection = value; - uncaughtPromiseError.promise = promise; - uncaughtPromiseError.zone = Zone.current; - uncaughtPromiseError.task = Zone.currentTask; - _uncaughtPromiseErrors.push(uncaughtPromiseError); - api.scheduleMicroTask(); // to make sure that it is running - } - } - } - // Resolving an already resolved promise is a noop. - return promise; - } - const REJECTION_HANDLED_HANDLER = __symbol__('rejectionHandledHandler'); - function clearRejectedNoCatch(promise) { - if (promise[symbolState] === REJECTED_NO_CATCH) { - // if the promise is rejected no catch status - // and queue.length > 0, means there is a error handler - // here to handle the rejected promise, we should trigger - // windows.rejectionhandled eventHandler or nodejs rejectionHandled - // eventHandler - try { - const handler = Zone[REJECTION_HANDLED_HANDLER]; - if (handler && typeof handler === 'function') { - handler.call(this, { rejection: promise[symbolValue], promise: promise }); - } - } - catch (err) { - } - promise[symbolState] = REJECTED; - for (let i = 0; i < _uncaughtPromiseErrors.length; i++) { - if (promise === _uncaughtPromiseErrors[i].promise) { - _uncaughtPromiseErrors.splice(i, 1); - } - } - } - } - function scheduleResolveOrReject(promise, zone, chainPromise, onFulfilled, onRejected) { - clearRejectedNoCatch(promise); - const promiseState = promise[symbolState]; - const delegate = promiseState ? - (typeof onFulfilled === 'function') ? onFulfilled : forwardResolution : - (typeof onRejected === 'function') ? onRejected : forwardRejection; - zone.scheduleMicroTask(source, () => { - try { - const parentPromiseValue = promise[symbolValue]; - const isFinallyPromise = !!chainPromise && symbolFinally === chainPromise[symbolFinally]; - if (isFinallyPromise) { - // if the promise is generated from finally call, keep parent promise's state and value - chainPromise[symbolParentPromiseValue] = parentPromiseValue; - chainPromise[symbolParentPromiseState] = promiseState; - } - // should not pass value to finally callback - const value = zone.run(delegate, undefined, isFinallyPromise && delegate !== forwardRejection && delegate !== forwardResolution ? - [] : - [parentPromiseValue]); - resolvePromise(chainPromise, true, value); - } - catch (error) { - // if error occurs, should always return this error - resolvePromise(chainPromise, false, error); - } - }, chainPromise); - } - const ZONE_AWARE_PROMISE_TO_STRING = 'function ZoneAwarePromise() { [native code] }'; - const noop = function () { }; - class ZoneAwarePromise { - static toString() { return ZONE_AWARE_PROMISE_TO_STRING; } - static resolve(value) { - return resolvePromise(new this(null), RESOLVED, value); - } - static reject(error) { - return resolvePromise(new this(null), REJECTED, error); - } - static race(values) { - let resolve; - let reject; - let promise = new this((res, rej) => { - resolve = res; - reject = rej; - }); - function onResolve(value) { resolve(value); } - function onReject(error) { reject(error); } - for (let value of values) { - if (!isThenable(value)) { - value = this.resolve(value); - } - value.then(onResolve, onReject); - } - return promise; - } - static all(values) { return ZoneAwarePromise.allWithCallback(values); } - static allSettled(values) { - const P = this && this.prototype instanceof ZoneAwarePromise ? this : ZoneAwarePromise; - return P.allWithCallback(values, { - thenCallback: (value) => ({ status: 'fulfilled', value }), - errorCallback: (err) => ({ status: 'rejected', reason: err }) - }); - } - static allWithCallback(values, callback) { - let resolve; - let reject; - let promise = new this((res, rej) => { - resolve = res; - reject = rej; - }); - // Start at 2 to prevent prematurely resolving if .then is called immediately. - let unresolvedCount = 2; - let valueIndex = 0; - const resolvedValues = []; - for (let value of values) { - if (!isThenable(value)) { - value = this.resolve(value); - } - const curValueIndex = valueIndex; - try { - value.then((value) => { - resolvedValues[curValueIndex] = callback ? callback.thenCallback(value) : value; - unresolvedCount--; - if (unresolvedCount === 0) { - resolve(resolvedValues); - } - }, (err) => { - if (!callback) { - reject(err); - } - else { - resolvedValues[curValueIndex] = callback.errorCallback(err); - unresolvedCount--; - if (unresolvedCount === 0) { - resolve(resolvedValues); - } - } - }); - } - catch (thenErr) { - reject(thenErr); - } - unresolvedCount++; - valueIndex++; - } - // Make the unresolvedCount zero-based again. - unresolvedCount -= 2; - if (unresolvedCount === 0) { - resolve(resolvedValues); - } - return promise; - } - constructor(executor) { - const promise = this; - if (!(promise instanceof ZoneAwarePromise)) { - throw new Error('Must be an instanceof Promise.'); - } - promise[symbolState] = UNRESOLVED; - promise[symbolValue] = []; // queue; - try { - executor && executor(makeResolver(promise, RESOLVED), makeResolver(promise, REJECTED)); - } - catch (error) { - resolvePromise(promise, false, error); - } - } - get [Symbol.toStringTag]() { return 'Promise'; } - get [Symbol.species]() { return ZoneAwarePromise; } - then(onFulfilled, onRejected) { - let C = this.constructor[Symbol.species]; - if (!C || typeof C !== 'function') { - C = this.constructor || ZoneAwarePromise; - } - const chainPromise = new C(noop); - const zone = Zone.current; - if (this[symbolState] == UNRESOLVED) { - this[symbolValue].push(zone, chainPromise, onFulfilled, onRejected); - } - else { - scheduleResolveOrReject(this, zone, chainPromise, onFulfilled, onRejected); - } - return chainPromise; - } - catch(onRejected) { - return this.then(null, onRejected); - } - finally(onFinally) { - let C = this.constructor[Symbol.species]; - if (!C || typeof C !== 'function') { - C = ZoneAwarePromise; - } - const chainPromise = new C(noop); - chainPromise[symbolFinally] = symbolFinally; - const zone = Zone.current; - if (this[symbolState] == UNRESOLVED) { - this[symbolValue].push(zone, chainPromise, onFinally, onFinally); - } - else { - scheduleResolveOrReject(this, zone, chainPromise, onFinally, onFinally); - } - return chainPromise; - } - } - // Protect against aggressive optimizers dropping seemingly unused properties. - // E.g. Closure Compiler in advanced mode. - ZoneAwarePromise['resolve'] = ZoneAwarePromise.resolve; - ZoneAwarePromise['reject'] = ZoneAwarePromise.reject; - ZoneAwarePromise['race'] = ZoneAwarePromise.race; - ZoneAwarePromise['all'] = ZoneAwarePromise.all; - const NativePromise = global[symbolPromise] = global['Promise']; - const ZONE_AWARE_PROMISE = Zone.__symbol__('ZoneAwarePromise'); - let desc = ObjectGetOwnPropertyDescriptor(global, 'Promise'); - if (!desc || desc.configurable) { - desc && delete desc.writable; - desc && delete desc.value; - if (!desc) { - desc = { configurable: true, enumerable: true }; - } - desc.get = function () { - // if we already set ZoneAwarePromise, use patched one - // otherwise return native one. - return global[ZONE_AWARE_PROMISE] ? global[ZONE_AWARE_PROMISE] : global[symbolPromise]; - }; - desc.set = function (NewNativePromise) { - if (NewNativePromise === ZoneAwarePromise) { - // if the NewNativePromise is ZoneAwarePromise - // save to global - global[ZONE_AWARE_PROMISE] = NewNativePromise; - } - else { - // if the NewNativePromise is not ZoneAwarePromise - // for example: after load zone.js, some library just - // set es6-promise to global, if we set it to global - // directly, assertZonePatched will fail and angular - // will not loaded, so we just set the NewNativePromise - // to global[symbolPromise], so the result is just like - // we load ES6 Promise before zone.js - global[symbolPromise] = NewNativePromise; - if (!NewNativePromise.prototype[symbolThen]) { - patchThen(NewNativePromise); - } - api.setNativePromise(NewNativePromise); - } - }; - ObjectDefineProperty(global, 'Promise', desc); - } - global['Promise'] = ZoneAwarePromise; - const symbolThenPatched = __symbol__('thenPatched'); - function patchThen(Ctor) { - const proto = Ctor.prototype; - const prop = ObjectGetOwnPropertyDescriptor(proto, 'then'); - if (prop && (prop.writable === false || !prop.configurable)) { - // check Ctor.prototype.then propertyDescriptor is writable or not - // in meteor env, writable is false, we should ignore such case - return; - } - const originalThen = proto.then; - // Keep a reference to the original method. - proto[symbolThen] = originalThen; - Ctor.prototype.then = function (onResolve, onReject) { - const wrapped = new ZoneAwarePromise((resolve, reject) => { originalThen.call(this, resolve, reject); }); - return wrapped.then(onResolve, onReject); - }; - Ctor[symbolThenPatched] = true; - } - api.patchThen = patchThen; - function zoneify(fn) { - return function () { - let resultPromise = fn.apply(this, arguments); - if (resultPromise instanceof ZoneAwarePromise) { - return resultPromise; - } - let ctor = resultPromise.constructor; - if (!ctor[symbolThenPatched]) { - patchThen(ctor); - } - return resultPromise; - }; - } - if (NativePromise) { - patchThen(NativePromise); - const fetch = global['fetch']; - if (typeof fetch == 'function') { - global[api.symbol('fetch')] = fetch; - global['fetch'] = zoneify(fetch); - } - } - // This is not part of public API, but it is useful for tests, so we expose it. - Promise[Zone.__symbol__('uncaughtPromiseErrors')] = _uncaughtPromiseErrors; - return ZoneAwarePromise; - }); - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - /** - * Suppress closure compiler errors about unknown 'Zone' variable - * @fileoverview - * @suppress {undefinedVars,globalThis,missingRequire} - */ - /// - // issue #989, to reduce bundle size, use short name - /** Object.getOwnPropertyDescriptor */ - const ObjectGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - /** Object.defineProperty */ - const ObjectDefineProperty = Object.defineProperty; - /** Object.getPrototypeOf */ - const ObjectGetPrototypeOf = Object.getPrototypeOf; - /** Object.create */ - const ObjectCreate = Object.create; - /** Array.prototype.slice */ - const ArraySlice = Array.prototype.slice; - /** addEventListener string const */ - const ADD_EVENT_LISTENER_STR = 'addEventListener'; - /** removeEventListener string const */ - const REMOVE_EVENT_LISTENER_STR = 'removeEventListener'; - /** zoneSymbol addEventListener */ - const ZONE_SYMBOL_ADD_EVENT_LISTENER = Zone.__symbol__(ADD_EVENT_LISTENER_STR); - /** zoneSymbol removeEventListener */ - const ZONE_SYMBOL_REMOVE_EVENT_LISTENER = Zone.__symbol__(REMOVE_EVENT_LISTENER_STR); - /** true string const */ - const TRUE_STR = 'true'; - /** false string const */ - const FALSE_STR = 'false'; - /** Zone symbol prefix string const. */ - const ZONE_SYMBOL_PREFIX = Zone.__symbol__(''); - function wrapWithCurrentZone(callback, source) { - return Zone.current.wrap(callback, source); - } - function scheduleMacroTaskWithCurrentZone(source, callback, data, customSchedule, customCancel) { - return Zone.current.scheduleMacroTask(source, callback, data, customSchedule, customCancel); - } - const zoneSymbol = Zone.__symbol__; - const isWindowExists = typeof window !== 'undefined'; - const internalWindow = isWindowExists ? window : undefined; - const _global = isWindowExists && internalWindow || typeof self === 'object' && self || global; - const REMOVE_ATTRIBUTE = 'removeAttribute'; - const NULL_ON_PROP_VALUE = [null]; - function bindArguments(args, source) { - for (let i = args.length - 1; i >= 0; i--) { - if (typeof args[i] === 'function') { - args[i] = wrapWithCurrentZone(args[i], source + '_' + i); - } - } - return args; - } - function patchPrototype(prototype, fnNames) { - const source = prototype.constructor['name']; - for (let i = 0; i < fnNames.length; i++) { - const name = fnNames[i]; - const delegate = prototype[name]; - if (delegate) { - const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, name); - if (!isPropertyWritable(prototypeDesc)) { - continue; - } - prototype[name] = ((delegate) => { - const patched = function () { - return delegate.apply(this, bindArguments(arguments, source + '.' + name)); - }; - attachOriginToPatched(patched, delegate); - return patched; - })(delegate); - } - } - } - function isPropertyWritable(propertyDesc) { - if (!propertyDesc) { - return true; - } - if (propertyDesc.writable === false) { - return false; - } - return !(typeof propertyDesc.get === 'function' && typeof propertyDesc.set === 'undefined'); - } - const isWebWorker = (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope); - // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify - // this code. - const isNode = (!('nw' in _global) && typeof _global.process !== 'undefined' && - {}.toString.call(_global.process) === '[object process]'); - const isBrowser = !isNode && !isWebWorker && !!(isWindowExists && internalWindow['HTMLElement']); - // we are in electron of nw, so we are both browser and nodejs - // Make sure to access `process` through `_global` so that WebPack does not accidentally browserify - // this code. - const isMix = typeof _global.process !== 'undefined' && - {}.toString.call(_global.process) === '[object process]' && !isWebWorker && - !!(isWindowExists && internalWindow['HTMLElement']); - const zoneSymbolEventNames = {}; - const wrapFn = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - let eventNameSymbol = zoneSymbolEventNames[event.type]; - if (!eventNameSymbol) { - eventNameSymbol = zoneSymbolEventNames[event.type] = zoneSymbol('ON_PROPERTY' + event.type); - } - const target = this || event.target || _global; - const listener = target[eventNameSymbol]; - let result; - if (isBrowser && target === internalWindow && event.type === 'error') { - // window.onerror have different signiture - // https://developer.mozilla.org/en-US/docs/Web/API/GlobalEventHandlers/onerror#window.onerror - // and onerror callback will prevent default when callback return true - const errorEvent = event; - result = listener && - listener.call(this, errorEvent.message, errorEvent.filename, errorEvent.lineno, errorEvent.colno, errorEvent.error); - if (result === true) { - event.preventDefault(); - } - } - else { - result = listener && listener.apply(this, arguments); - if (result != undefined && !result) { - event.preventDefault(); - } - } - return result; - }; - function patchProperty(obj, prop, prototype) { - let desc = ObjectGetOwnPropertyDescriptor(obj, prop); - if (!desc && prototype) { - // when patch window object, use prototype to check prop exist or not - const prototypeDesc = ObjectGetOwnPropertyDescriptor(prototype, prop); - if (prototypeDesc) { - desc = { enumerable: true, configurable: true }; - } - } - // if the descriptor not exists or is not configurable - // just return - if (!desc || !desc.configurable) { - return; - } - const onPropPatchedSymbol = zoneSymbol('on' + prop + 'patched'); - if (obj.hasOwnProperty(onPropPatchedSymbol) && obj[onPropPatchedSymbol]) { - return; - } - // A property descriptor cannot have getter/setter and be writable - // deleting the writable and value properties avoids this error: - // - // TypeError: property descriptors must not specify a value or be writable when a - // getter or setter has been specified - delete desc.writable; - delete desc.value; - const originalDescGet = desc.get; - const originalDescSet = desc.set; - // substr(2) cuz 'onclick' -> 'click', etc - const eventName = prop.substr(2); - let eventNameSymbol = zoneSymbolEventNames[eventName]; - if (!eventNameSymbol) { - eventNameSymbol = zoneSymbolEventNames[eventName] = zoneSymbol('ON_PROPERTY' + eventName); - } - desc.set = function (newValue) { - // in some of windows's onproperty callback, this is undefined - // so we need to check it - let target = this; - if (!target && obj === _global) { - target = _global; - } - if (!target) { - return; - } - let previousValue = target[eventNameSymbol]; - if (previousValue) { - target.removeEventListener(eventName, wrapFn); - } - // issue #978, when onload handler was added before loading zone.js - // we should remove it with originalDescSet - if (originalDescSet) { - originalDescSet.apply(target, NULL_ON_PROP_VALUE); - } - if (typeof newValue === 'function') { - target[eventNameSymbol] = newValue; - target.addEventListener(eventName, wrapFn, false); - } - else { - target[eventNameSymbol] = null; - } - }; - // The getter would return undefined for unassigned properties but the default value of an - // unassigned property is null - desc.get = function () { - // in some of windows's onproperty callback, this is undefined - // so we need to check it - let target = this; - if (!target && obj === _global) { - target = _global; - } - if (!target) { - return null; - } - const listener = target[eventNameSymbol]; - if (listener) { - return listener; - } - else if (originalDescGet) { - // result will be null when use inline event attribute, - // such as - // because the onclick function is internal raw uncompiled handler - // the onclick will be evaluated when first time event was triggered or - // the property is accessed, https://github.com/angular/zone.js/issues/525 - // so we should use original native get to retrieve the handler - let value = originalDescGet && originalDescGet.call(this); - if (value) { - desc.set.call(this, value); - if (typeof target[REMOVE_ATTRIBUTE] === 'function') { - target.removeAttribute(prop); - } - return value; - } - } - return null; - }; - ObjectDefineProperty(obj, prop, desc); - obj[onPropPatchedSymbol] = true; - } - function patchOnProperties(obj, properties, prototype) { - if (properties) { - for (let i = 0; i < properties.length; i++) { - patchProperty(obj, 'on' + properties[i], prototype); - } - } - else { - const onProperties = []; - for (const prop in obj) { - if (prop.substr(0, 2) == 'on') { - onProperties.push(prop); - } - } - for (let j = 0; j < onProperties.length; j++) { - patchProperty(obj, onProperties[j], prototype); - } - } - } - const originalInstanceKey = zoneSymbol('originalInstance'); - // wrap some native API on `window` - function patchClass(className) { - const OriginalClass = _global[className]; - if (!OriginalClass) - return; - // keep original class in global - _global[zoneSymbol(className)] = OriginalClass; - _global[className] = function () { - const a = bindArguments(arguments, className); - switch (a.length) { - case 0: - this[originalInstanceKey] = new OriginalClass(); - break; - case 1: - this[originalInstanceKey] = new OriginalClass(a[0]); - break; - case 2: - this[originalInstanceKey] = new OriginalClass(a[0], a[1]); - break; - case 3: - this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2]); - break; - case 4: - this[originalInstanceKey] = new OriginalClass(a[0], a[1], a[2], a[3]); - break; - default: - throw new Error('Arg list too long.'); - } - }; - // attach original delegate to patched function - attachOriginToPatched(_global[className], OriginalClass); - const instance = new OriginalClass(function () { }); - let prop; - for (prop in instance) { - // https://bugs.webkit.org/show_bug.cgi?id=44721 - if (className === 'XMLHttpRequest' && prop === 'responseBlob') - continue; - (function (prop) { - if (typeof instance[prop] === 'function') { - _global[className].prototype[prop] = function () { - return this[originalInstanceKey][prop].apply(this[originalInstanceKey], arguments); - }; - } - else { - ObjectDefineProperty(_global[className].prototype, prop, { - set: function (fn) { - if (typeof fn === 'function') { - this[originalInstanceKey][prop] = wrapWithCurrentZone(fn, className + '.' + prop); - // keep callback in wrapped function so we can - // use it in Function.prototype.toString to return - // the native one. - attachOriginToPatched(this[originalInstanceKey][prop], fn); - } - else { - this[originalInstanceKey][prop] = fn; - } - }, - get: function () { return this[originalInstanceKey][prop]; } - }); - } - }(prop)); - } - for (prop in OriginalClass) { - if (prop !== 'prototype' && OriginalClass.hasOwnProperty(prop)) { - _global[className][prop] = OriginalClass[prop]; - } - } - } - function copySymbolProperties(src, dest) { - if (typeof Object.getOwnPropertySymbols !== 'function') { - return; - } - const symbols = Object.getOwnPropertySymbols(src); - symbols.forEach((symbol) => { - const desc = Object.getOwnPropertyDescriptor(src, symbol); - Object.defineProperty(dest, symbol, { - get: function () { return src[symbol]; }, - set: function (value) { - if (desc && (!desc.writable || typeof desc.set !== 'function')) { - // if src[symbol] is not writable or not have a setter, just return - return; - } - src[symbol] = value; - }, - enumerable: desc ? desc.enumerable : true, - configurable: desc ? desc.configurable : true - }); - }); - } - let shouldCopySymbolProperties = false; - function patchMethod(target, name, patchFn) { - let proto = target; - while (proto && !proto.hasOwnProperty(name)) { - proto = ObjectGetPrototypeOf(proto); - } - if (!proto && target[name]) { - // somehow we did not find it, but we can see it. This happens on IE for Window properties. - proto = target; - } - const delegateName = zoneSymbol(name); - let delegate = null; - if (proto && !(delegate = proto[delegateName])) { - delegate = proto[delegateName] = proto[name]; - // check whether proto[name] is writable - // some property is readonly in safari, such as HtmlCanvasElement.prototype.toBlob - const desc = proto && ObjectGetOwnPropertyDescriptor(proto, name); - if (isPropertyWritable(desc)) { - const patchDelegate = patchFn(delegate, delegateName, name); - proto[name] = function () { return patchDelegate(this, arguments); }; - attachOriginToPatched(proto[name], delegate); - if (shouldCopySymbolProperties) { - copySymbolProperties(delegate, proto[name]); - } - } - } - return delegate; - } - // TODO: @JiaLiPassion, support cancel task later if necessary - function patchMacroTask(obj, funcName, metaCreator) { - let setNative = null; - function scheduleTask(task) { - const data = task.data; - data.args[data.cbIdx] = function () { task.invoke.apply(this, arguments); }; - setNative.apply(data.target, data.args); - return task; - } - setNative = patchMethod(obj, funcName, (delegate) => function (self, args) { - const meta = metaCreator(self, args); - if (meta.cbIdx >= 0 && typeof args[meta.cbIdx] === 'function') { - return scheduleMacroTaskWithCurrentZone(meta.name, args[meta.cbIdx], meta, scheduleTask); - } - else { - // cause an error by calling it directly. - return delegate.apply(self, args); - } - }); - } - function attachOriginToPatched(patched, original) { - patched[zoneSymbol('OriginalDelegate')] = original; - } - let isDetectedIEOrEdge = false; - let ieOrEdge = false; - function isIE() { - try { - const ua = internalWindow.navigator.userAgent; - if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1) { - return true; - } - } - catch (error) { - } - return false; - } - function isIEOrEdge() { - if (isDetectedIEOrEdge) { - return ieOrEdge; - } - isDetectedIEOrEdge = true; - try { - const ua = internalWindow.navigator.userAgent; - if (ua.indexOf('MSIE ') !== -1 || ua.indexOf('Trident/') !== -1 || ua.indexOf('Edge/') !== -1) { - ieOrEdge = true; - } - } - catch (error) { - } - return ieOrEdge; - } - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - // override Function.prototype.toString to make zone.js patched function - // look like native function - Zone.__load_patch('toString', (global) => { - // patch Func.prototype.toString to let them look like native - const originalFunctionToString = Function.prototype.toString; - const ORIGINAL_DELEGATE_SYMBOL = zoneSymbol('OriginalDelegate'); - const PROMISE_SYMBOL = zoneSymbol('Promise'); - const ERROR_SYMBOL = zoneSymbol('Error'); - const newFunctionToString = function toString() { - if (typeof this === 'function') { - const originalDelegate = this[ORIGINAL_DELEGATE_SYMBOL]; - if (originalDelegate) { - if (typeof originalDelegate === 'function') { - return originalFunctionToString.call(originalDelegate); - } - else { - return Object.prototype.toString.call(originalDelegate); - } - } - if (this === Promise) { - const nativePromise = global[PROMISE_SYMBOL]; - if (nativePromise) { - return originalFunctionToString.call(nativePromise); - } - } - if (this === Error) { - const nativeError = global[ERROR_SYMBOL]; - if (nativeError) { - return originalFunctionToString.call(nativeError); - } - } - } - return originalFunctionToString.call(this); - }; - newFunctionToString[ORIGINAL_DELEGATE_SYMBOL] = originalFunctionToString; - Function.prototype.toString = newFunctionToString; - // patch Object.prototype.toString to let them look like native - const originalObjectToString = Object.prototype.toString; - const PROMISE_OBJECT_TO_STRING = '[object Promise]'; - Object.prototype.toString = function () { - if (this instanceof Promise) { - return PROMISE_OBJECT_TO_STRING; - } - return originalObjectToString.call(this); - }; - }); - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - let passiveSupported = false; - if (typeof window !== 'undefined') { - try { - const options = Object.defineProperty({}, 'passive', { get: function () { passiveSupported = true; } }); - window.addEventListener('test', options, options); - window.removeEventListener('test', options, options); - } - catch (err) { - passiveSupported = false; - } - } - // an identifier to tell ZoneTask do not create a new invoke closure - const OPTIMIZED_ZONE_EVENT_TASK_DATA = { - useG: true - }; - const zoneSymbolEventNames$1 = {}; - const globalSources = {}; - const EVENT_NAME_SYMBOL_REGX = new RegExp('^' + ZONE_SYMBOL_PREFIX + '(\\w+)(true|false)$'); - const IMMEDIATE_PROPAGATION_SYMBOL = zoneSymbol('propagationStopped'); - function prepareEventNames(eventName, eventNameToString) { - const falseEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + FALSE_STR; - const trueEventName = (eventNameToString ? eventNameToString(eventName) : eventName) + TRUE_STR; - const symbol = ZONE_SYMBOL_PREFIX + falseEventName; - const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; - zoneSymbolEventNames$1[eventName] = {}; - zoneSymbolEventNames$1[eventName][FALSE_STR] = symbol; - zoneSymbolEventNames$1[eventName][TRUE_STR] = symbolCapture; - } - function patchEventTarget(_global, apis, patchOptions) { - const ADD_EVENT_LISTENER = (patchOptions && patchOptions.add) || ADD_EVENT_LISTENER_STR; - const REMOVE_EVENT_LISTENER = (patchOptions && patchOptions.rm) || REMOVE_EVENT_LISTENER_STR; - const LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.listeners) || 'eventListeners'; - const REMOVE_ALL_LISTENERS_EVENT_LISTENER = (patchOptions && patchOptions.rmAll) || 'removeAllListeners'; - const zoneSymbolAddEventListener = zoneSymbol(ADD_EVENT_LISTENER); - const ADD_EVENT_LISTENER_SOURCE = '.' + ADD_EVENT_LISTENER + ':'; - const PREPEND_EVENT_LISTENER = 'prependListener'; - const PREPEND_EVENT_LISTENER_SOURCE = '.' + PREPEND_EVENT_LISTENER + ':'; - const invokeTask = function (task, target, event) { - // for better performance, check isRemoved which is set - // by removeEventListener - if (task.isRemoved) { - return; - } - const delegate = task.callback; - if (typeof delegate === 'object' && delegate.handleEvent) { - // create the bind version of handleEvent when invoke - task.callback = (event) => delegate.handleEvent(event); - task.originalDelegate = delegate; - } - // invoke static task.invoke - task.invoke(task, target, [event]); - const options = task.options; - if (options && typeof options === 'object' && options.once) { - // if options.once is true, after invoke once remove listener here - // only browser need to do this, nodejs eventEmitter will cal removeListener - // inside EventEmitter.once - const delegate = task.originalDelegate ? task.originalDelegate : task.callback; - target[REMOVE_EVENT_LISTENER].call(target, event.type, delegate, options); - } - }; - // global shared zoneAwareCallback to handle all event callback with capture = false - const globalZoneAwareCallback = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - // event.target is needed for Samsung TV and SourceBuffer - // || global is needed https://github.com/angular/zone.js/issues/190 - const target = this || event.target || _global; - const tasks = target[zoneSymbolEventNames$1[event.type][FALSE_STR]]; - if (tasks) { - // invoke all tasks which attached to current target with given event.type and capture = false - // for performance concern, if task.length === 1, just invoke - if (tasks.length === 1) { - invokeTask(tasks[0], target, event); - } - else { - // https://github.com/angular/zone.js/issues/836 - // copy the tasks array before invoke, to avoid - // the callback will remove itself or other listener - const copyTasks = tasks.slice(); - for (let i = 0; i < copyTasks.length; i++) { - if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) { - break; - } - invokeTask(copyTasks[i], target, event); - } - } - } - }; - // global shared zoneAwareCallback to handle all event callback with capture = true - const globalZoneAwareCaptureCallback = function (event) { - // https://github.com/angular/zone.js/issues/911, in IE, sometimes - // event will be undefined, so we need to use window.event - event = event || _global.event; - if (!event) { - return; - } - // event.target is needed for Samsung TV and SourceBuffer - // || global is needed https://github.com/angular/zone.js/issues/190 - const target = this || event.target || _global; - const tasks = target[zoneSymbolEventNames$1[event.type][TRUE_STR]]; - if (tasks) { - // invoke all tasks which attached to current target with given event.type and capture = false - // for performance concern, if task.length === 1, just invoke - if (tasks.length === 1) { - invokeTask(tasks[0], target, event); - } - else { - // https://github.com/angular/zone.js/issues/836 - // copy the tasks array before invoke, to avoid - // the callback will remove itself or other listener - const copyTasks = tasks.slice(); - for (let i = 0; i < copyTasks.length; i++) { - if (event && event[IMMEDIATE_PROPAGATION_SYMBOL] === true) { - break; - } - invokeTask(copyTasks[i], target, event); - } - } - } - }; - function patchEventTargetMethods(obj, patchOptions) { - if (!obj) { - return false; - } - let useGlobalCallback = true; - if (patchOptions && patchOptions.useG !== undefined) { - useGlobalCallback = patchOptions.useG; - } - const validateHandler = patchOptions && patchOptions.vh; - let checkDuplicate = true; - if (patchOptions && patchOptions.chkDup !== undefined) { - checkDuplicate = patchOptions.chkDup; - } - let returnTarget = false; - if (patchOptions && patchOptions.rt !== undefined) { - returnTarget = patchOptions.rt; - } - let proto = obj; - while (proto && !proto.hasOwnProperty(ADD_EVENT_LISTENER)) { - proto = ObjectGetPrototypeOf(proto); - } - if (!proto && obj[ADD_EVENT_LISTENER]) { - // somehow we did not find it, but we can see it. This happens on IE for Window properties. - proto = obj; - } - if (!proto) { - return false; - } - if (proto[zoneSymbolAddEventListener]) { - return false; - } - const eventNameToString = patchOptions && patchOptions.eventNameToString; - // a shared global taskData to pass data for scheduleEventTask - // so we do not need to create a new object just for pass some data - const taskData = {}; - const nativeAddEventListener = proto[zoneSymbolAddEventListener] = proto[ADD_EVENT_LISTENER]; - const nativeRemoveEventListener = proto[zoneSymbol(REMOVE_EVENT_LISTENER)] = - proto[REMOVE_EVENT_LISTENER]; - const nativeListeners = proto[zoneSymbol(LISTENERS_EVENT_LISTENER)] = - proto[LISTENERS_EVENT_LISTENER]; - const nativeRemoveAllListeners = proto[zoneSymbol(REMOVE_ALL_LISTENERS_EVENT_LISTENER)] = - proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER]; - let nativePrependEventListener; - if (patchOptions && patchOptions.prepend) { - nativePrependEventListener = proto[zoneSymbol(patchOptions.prepend)] = - proto[patchOptions.prepend]; - } - /** - * This util function will build an option object with passive option - * to handle all possible input from the user. - */ - function buildEventListenerOptions(options, passive) { - if (!passiveSupported && typeof options === 'object' && options) { - // doesn't support passive but user want to pass an object as options. - // this will not work on some old browser, so we just pass a boolean - // as useCapture parameter - return !!options.capture; - } - if (!passiveSupported || !passive) { - return options; - } - if (typeof options === 'boolean') { - return { capture: options, passive: true }; - } - if (!options) { - return { passive: true }; - } - if (typeof options === 'object' && options.passive !== false) { - return Object.assign(Object.assign({}, options), { passive: true }); - } - return options; - } - const customScheduleGlobal = function (task) { - // if there is already a task for the eventName + capture, - // just return, because we use the shared globalZoneAwareCallback here. - if (taskData.isExisting) { - return; - } - return nativeAddEventListener.call(taskData.target, taskData.eventName, taskData.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, taskData.options); - }; - const customCancelGlobal = function (task) { - // if task is not marked as isRemoved, this call is directly - // from Zone.prototype.cancelTask, we should remove the task - // from tasksList of target first - if (!task.isRemoved) { - const symbolEventNames = zoneSymbolEventNames$1[task.eventName]; - let symbolEventName; - if (symbolEventNames) { - symbolEventName = symbolEventNames[task.capture ? TRUE_STR : FALSE_STR]; - } - const existingTasks = symbolEventName && task.target[symbolEventName]; - if (existingTasks) { - for (let i = 0; i < existingTasks.length; i++) { - const existingTask = existingTasks[i]; - if (existingTask === task) { - existingTasks.splice(i, 1); - // set isRemoved to data for faster invokeTask check - task.isRemoved = true; - if (existingTasks.length === 0) { - // all tasks for the eventName + capture have gone, - // remove globalZoneAwareCallback and remove the task cache from target - task.allRemoved = true; - task.target[symbolEventName] = null; - } - break; - } - } - } - } - // if all tasks for the eventName + capture have gone, - // we will really remove the global event callback, - // if not, return - if (!task.allRemoved) { - return; - } - return nativeRemoveEventListener.call(task.target, task.eventName, task.capture ? globalZoneAwareCaptureCallback : globalZoneAwareCallback, task.options); - }; - const customScheduleNonGlobal = function (task) { - return nativeAddEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); - }; - const customSchedulePrepend = function (task) { - return nativePrependEventListener.call(taskData.target, taskData.eventName, task.invoke, taskData.options); - }; - const customCancelNonGlobal = function (task) { - return nativeRemoveEventListener.call(task.target, task.eventName, task.invoke, task.options); - }; - const customSchedule = useGlobalCallback ? customScheduleGlobal : customScheduleNonGlobal; - const customCancel = useGlobalCallback ? customCancelGlobal : customCancelNonGlobal; - const compareTaskCallbackVsDelegate = function (task, delegate) { - const typeOfDelegate = typeof delegate; - return (typeOfDelegate === 'function' && task.callback === delegate) || - (typeOfDelegate === 'object' && task.originalDelegate === delegate); - }; - const compare = (patchOptions && patchOptions.diff) ? patchOptions.diff : compareTaskCallbackVsDelegate; - const blackListedEvents = Zone[zoneSymbol('BLACK_LISTED_EVENTS')]; - const passiveEvents = _global[zoneSymbol('PASSIVE_EVENTS')]; - const makeAddListener = function (nativeListener, addSource, customScheduleFn, customCancelFn, returnTarget = false, prepend = false) { - return function () { - const target = this || _global; - let eventName = arguments[0]; - if (patchOptions && patchOptions.transferEventName) { - eventName = patchOptions.transferEventName(eventName); - } - let delegate = arguments[1]; - if (!delegate) { - return nativeListener.apply(this, arguments); - } - if (isNode && eventName === 'uncaughtException') { - // don't patch uncaughtException of nodejs to prevent endless loop - return nativeListener.apply(this, arguments); - } - // don't create the bind delegate function for handleEvent - // case here to improve addEventListener performance - // we will create the bind delegate when invoke - let isHandleEvent = false; - if (typeof delegate !== 'function') { - if (!delegate.handleEvent) { - return nativeListener.apply(this, arguments); - } - isHandleEvent = true; - } - if (validateHandler && !validateHandler(nativeListener, delegate, target, arguments)) { - return; - } - const passive = passiveSupported && !!passiveEvents && passiveEvents.indexOf(eventName) !== -1; - const options = buildEventListenerOptions(arguments[2], passive); - if (blackListedEvents) { - // check black list - for (let i = 0; i < blackListedEvents.length; i++) { - if (eventName === blackListedEvents[i]) { - if (passive) { - return nativeListener.call(target, eventName, delegate, options); - } - else { - return nativeListener.apply(this, arguments); - } - } - } - } - const capture = !options ? false : typeof options === 'boolean' ? true : options.capture; - const once = options && typeof options === 'object' ? options.once : false; - const zone = Zone.current; - let symbolEventNames = zoneSymbolEventNames$1[eventName]; - if (!symbolEventNames) { - prepareEventNames(eventName, eventNameToString); - symbolEventNames = zoneSymbolEventNames$1[eventName]; - } - const symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; - let existingTasks = target[symbolEventName]; - let isExisting = false; - if (existingTasks) { - // already have task registered - isExisting = true; - if (checkDuplicate) { - for (let i = 0; i < existingTasks.length; i++) { - if (compare(existingTasks[i], delegate)) { - // same callback, same capture, same event name, just return - return; - } - } - } - } - else { - existingTasks = target[symbolEventName] = []; - } - let source; - const constructorName = target.constructor['name']; - const targetSource = globalSources[constructorName]; - if (targetSource) { - source = targetSource[eventName]; - } - if (!source) { - source = constructorName + addSource + - (eventNameToString ? eventNameToString(eventName) : eventName); - } - // do not create a new object as task.data to pass those things - // just use the global shared one - taskData.options = options; - if (once) { - // if addEventListener with once options, we don't pass it to - // native addEventListener, instead we keep the once setting - // and handle ourselves. - taskData.options.once = false; - } - taskData.target = target; - taskData.capture = capture; - taskData.eventName = eventName; - taskData.isExisting = isExisting; - const data = useGlobalCallback ? OPTIMIZED_ZONE_EVENT_TASK_DATA : undefined; - // keep taskData into data to allow onScheduleEventTask to access the task information - if (data) { - data.taskData = taskData; - } - const task = zone.scheduleEventTask(source, delegate, data, customScheduleFn, customCancelFn); - // should clear taskData.target to avoid memory leak - // issue, https://github.com/angular/angular/issues/20442 - taskData.target = null; - // need to clear up taskData because it is a global object - if (data) { - data.taskData = null; - } - // have to save those information to task in case - // application may call task.zone.cancelTask() directly - if (once) { - options.once = true; - } - if (!(!passiveSupported && typeof task.options === 'boolean')) { - // if not support passive, and we pass an option object - // to addEventListener, we should save the options to task - task.options = options; - } - task.target = target; - task.capture = capture; - task.eventName = eventName; - if (isHandleEvent) { - // save original delegate for compare to check duplicate - task.originalDelegate = delegate; - } - if (!prepend) { - existingTasks.push(task); - } - else { - existingTasks.unshift(task); - } - if (returnTarget) { - return target; - } - }; - }; - proto[ADD_EVENT_LISTENER] = makeAddListener(nativeAddEventListener, ADD_EVENT_LISTENER_SOURCE, customSchedule, customCancel, returnTarget); - if (nativePrependEventListener) { - proto[PREPEND_EVENT_LISTENER] = makeAddListener(nativePrependEventListener, PREPEND_EVENT_LISTENER_SOURCE, customSchedulePrepend, customCancel, returnTarget, true); - } - proto[REMOVE_EVENT_LISTENER] = function () { - const target = this || _global; - let eventName = arguments[0]; - if (patchOptions && patchOptions.transferEventName) { - eventName = patchOptions.transferEventName(eventName); - } - const options = arguments[2]; - const capture = !options ? false : typeof options === 'boolean' ? true : options.capture; - const delegate = arguments[1]; - if (!delegate) { - return nativeRemoveEventListener.apply(this, arguments); - } - if (validateHandler && - !validateHandler(nativeRemoveEventListener, delegate, target, arguments)) { - return; - } - const symbolEventNames = zoneSymbolEventNames$1[eventName]; - let symbolEventName; - if (symbolEventNames) { - symbolEventName = symbolEventNames[capture ? TRUE_STR : FALSE_STR]; - } - const existingTasks = symbolEventName && target[symbolEventName]; - if (existingTasks) { - for (let i = 0; i < existingTasks.length; i++) { - const existingTask = existingTasks[i]; - if (compare(existingTask, delegate)) { - existingTasks.splice(i, 1); - // set isRemoved to data for faster invokeTask check - existingTask.isRemoved = true; - if (existingTasks.length === 0) { - // all tasks for the eventName + capture have gone, - // remove globalZoneAwareCallback and remove the task cache from target - existingTask.allRemoved = true; - target[symbolEventName] = null; - // in the target, we have an event listener which is added by on_property - // such as target.onclick = function() {}, so we need to clear this internal - // property too if all delegates all removed - if (typeof eventName === 'string') { - const onPropertySymbol = ZONE_SYMBOL_PREFIX + 'ON_PROPERTY' + eventName; - target[onPropertySymbol] = null; - } - } - existingTask.zone.cancelTask(existingTask); - if (returnTarget) { - return target; - } - return; - } - } - } - // issue 930, didn't find the event name or callback - // from zone kept existingTasks, the callback maybe - // added outside of zone, we need to call native removeEventListener - // to try to remove it. - return nativeRemoveEventListener.apply(this, arguments); - }; - proto[LISTENERS_EVENT_LISTENER] = function () { - const target = this || _global; - let eventName = arguments[0]; - if (patchOptions && patchOptions.transferEventName) { - eventName = patchOptions.transferEventName(eventName); - } - const listeners = []; - const tasks = findEventTasks(target, eventNameToString ? eventNameToString(eventName) : eventName); - for (let i = 0; i < tasks.length; i++) { - const task = tasks[i]; - let delegate = task.originalDelegate ? task.originalDelegate : task.callback; - listeners.push(delegate); - } - return listeners; - }; - proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER] = function () { - const target = this || _global; - let eventName = arguments[0]; - if (!eventName) { - const keys = Object.keys(target); - for (let i = 0; i < keys.length; i++) { - const prop = keys[i]; - const match = EVENT_NAME_SYMBOL_REGX.exec(prop); - let evtName = match && match[1]; - // in nodejs EventEmitter, removeListener event is - // used for monitoring the removeListener call, - // so just keep removeListener eventListener until - // all other eventListeners are removed - if (evtName && evtName !== 'removeListener') { - this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, evtName); - } - } - // remove removeListener listener finally - this[REMOVE_ALL_LISTENERS_EVENT_LISTENER].call(this, 'removeListener'); - } - else { - if (patchOptions && patchOptions.transferEventName) { - eventName = patchOptions.transferEventName(eventName); - } - const symbolEventNames = zoneSymbolEventNames$1[eventName]; - if (symbolEventNames) { - const symbolEventName = symbolEventNames[FALSE_STR]; - const symbolCaptureEventName = symbolEventNames[TRUE_STR]; - const tasks = target[symbolEventName]; - const captureTasks = target[symbolCaptureEventName]; - if (tasks) { - const removeTasks = tasks.slice(); - for (let i = 0; i < removeTasks.length; i++) { - const task = removeTasks[i]; - let delegate = task.originalDelegate ? task.originalDelegate : task.callback; - this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); - } - } - if (captureTasks) { - const removeTasks = captureTasks.slice(); - for (let i = 0; i < removeTasks.length; i++) { - const task = removeTasks[i]; - let delegate = task.originalDelegate ? task.originalDelegate : task.callback; - this[REMOVE_EVENT_LISTENER].call(this, eventName, delegate, task.options); - } - } - } - } - if (returnTarget) { - return this; - } - }; - // for native toString patch - attachOriginToPatched(proto[ADD_EVENT_LISTENER], nativeAddEventListener); - attachOriginToPatched(proto[REMOVE_EVENT_LISTENER], nativeRemoveEventListener); - if (nativeRemoveAllListeners) { - attachOriginToPatched(proto[REMOVE_ALL_LISTENERS_EVENT_LISTENER], nativeRemoveAllListeners); - } - if (nativeListeners) { - attachOriginToPatched(proto[LISTENERS_EVENT_LISTENER], nativeListeners); - } - return true; - } - let results = []; - for (let i = 0; i < apis.length; i++) { - results[i] = patchEventTargetMethods(apis[i], patchOptions); - } - return results; - } - function findEventTasks(target, eventName) { - if (!eventName) { - const foundTasks = []; - for (let prop in target) { - const match = EVENT_NAME_SYMBOL_REGX.exec(prop); - let evtName = match && match[1]; - if (evtName && (!eventName || evtName === eventName)) { - const tasks = target[prop]; - if (tasks) { - for (let i = 0; i < tasks.length; i++) { - foundTasks.push(tasks[i]); - } - } - } - } - return foundTasks; - } - let symbolEventName = zoneSymbolEventNames$1[eventName]; - if (!symbolEventName) { - prepareEventNames(eventName); - symbolEventName = zoneSymbolEventNames$1[eventName]; - } - const captureFalseTasks = target[symbolEventName[FALSE_STR]]; - const captureTrueTasks = target[symbolEventName[TRUE_STR]]; - if (!captureFalseTasks) { - return captureTrueTasks ? captureTrueTasks.slice() : []; - } - else { - return captureTrueTasks ? captureFalseTasks.concat(captureTrueTasks) : - captureFalseTasks.slice(); - } - } - function patchEventPrototype(global, api) { - const Event = global['Event']; - if (Event && Event.prototype) { - api.patchMethod(Event.prototype, 'stopImmediatePropagation', (delegate) => function (self, args) { - self[IMMEDIATE_PROPAGATION_SYMBOL] = true; - // we need to call the native stopImmediatePropagation - // in case in some hybrid application, some part of - // application will be controlled by zone, some are not - delegate && delegate.apply(self, args); - }); - } - } - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - function patchCallbacks(api, target, targetName, method, callbacks) { - const symbol = Zone.__symbol__(method); - if (target[symbol]) { - return; - } - const nativeDelegate = target[symbol] = target[method]; - target[method] = function (name, opts, options) { - if (opts && opts.prototype) { - callbacks.forEach(function (callback) { - const source = `${targetName}.${method}::` + callback; - const prototype = opts.prototype; - if (prototype.hasOwnProperty(callback)) { - const descriptor = api.ObjectGetOwnPropertyDescriptor(prototype, callback); - if (descriptor && descriptor.value) { - descriptor.value = api.wrapWithCurrentZone(descriptor.value, source); - api._redefineProperty(opts.prototype, callback, descriptor); - } - else if (prototype[callback]) { - prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source); - } - } - else if (prototype[callback]) { - prototype[callback] = api.wrapWithCurrentZone(prototype[callback], source); - } - }); - } - return nativeDelegate.call(target, name, opts, options); - }; - api.attachOriginToPatched(target[method], nativeDelegate); - } - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - const globalEventHandlersEventNames = [ - 'abort', - 'animationcancel', - 'animationend', - 'animationiteration', - 'auxclick', - 'beforeinput', - 'blur', - 'cancel', - 'canplay', - 'canplaythrough', - 'change', - 'compositionstart', - 'compositionupdate', - 'compositionend', - 'cuechange', - 'click', - 'close', - 'contextmenu', - 'curechange', - 'dblclick', - 'drag', - 'dragend', - 'dragenter', - 'dragexit', - 'dragleave', - 'dragover', - 'drop', - 'durationchange', - 'emptied', - 'ended', - 'error', - 'focus', - 'focusin', - 'focusout', - 'gotpointercapture', - 'input', - 'invalid', - 'keydown', - 'keypress', - 'keyup', - 'load', - 'loadstart', - 'loadeddata', - 'loadedmetadata', - 'lostpointercapture', - 'mousedown', - 'mouseenter', - 'mouseleave', - 'mousemove', - 'mouseout', - 'mouseover', - 'mouseup', - 'mousewheel', - 'orientationchange', - 'pause', - 'play', - 'playing', - 'pointercancel', - 'pointerdown', - 'pointerenter', - 'pointerleave', - 'pointerlockchange', - 'mozpointerlockchange', - 'webkitpointerlockerchange', - 'pointerlockerror', - 'mozpointerlockerror', - 'webkitpointerlockerror', - 'pointermove', - 'pointout', - 'pointerover', - 'pointerup', - 'progress', - 'ratechange', - 'reset', - 'resize', - 'scroll', - 'seeked', - 'seeking', - 'select', - 'selectionchange', - 'selectstart', - 'show', - 'sort', - 'stalled', - 'submit', - 'suspend', - 'timeupdate', - 'volumechange', - 'touchcancel', - 'touchmove', - 'touchstart', - 'touchend', - 'transitioncancel', - 'transitionend', - 'waiting', - 'wheel' - ]; - const documentEventNames = [ - 'afterscriptexecute', 'beforescriptexecute', 'DOMContentLoaded', 'freeze', 'fullscreenchange', - 'mozfullscreenchange', 'webkitfullscreenchange', 'msfullscreenchange', 'fullscreenerror', - 'mozfullscreenerror', 'webkitfullscreenerror', 'msfullscreenerror', 'readystatechange', - 'visibilitychange', 'resume' - ]; - const windowEventNames = [ - 'absolutedeviceorientation', - 'afterinput', - 'afterprint', - 'appinstalled', - 'beforeinstallprompt', - 'beforeprint', - 'beforeunload', - 'devicelight', - 'devicemotion', - 'deviceorientation', - 'deviceorientationabsolute', - 'deviceproximity', - 'hashchange', - 'languagechange', - 'message', - 'mozbeforepaint', - 'offline', - 'online', - 'paint', - 'pageshow', - 'pagehide', - 'popstate', - 'rejectionhandled', - 'storage', - 'unhandledrejection', - 'unload', - 'userproximity', - 'vrdisplayconnected', - 'vrdisplaydisconnected', - 'vrdisplaypresentchange' - ]; - const htmlElementEventNames = [ - 'beforecopy', 'beforecut', 'beforepaste', 'copy', 'cut', 'paste', 'dragstart', 'loadend', - 'animationstart', 'search', 'transitionrun', 'transitionstart', 'webkitanimationend', - 'webkitanimationiteration', 'webkitanimationstart', 'webkittransitionend' - ]; - const mediaElementEventNames = ['encrypted', 'waitingforkey', 'msneedkey', 'mozinterruptbegin', 'mozinterruptend']; - const ieElementEventNames = [ - 'activate', - 'afterupdate', - 'ariarequest', - 'beforeactivate', - 'beforedeactivate', - 'beforeeditfocus', - 'beforeupdate', - 'cellchange', - 'controlselect', - 'dataavailable', - 'datasetchanged', - 'datasetcomplete', - 'errorupdate', - 'filterchange', - 'layoutcomplete', - 'losecapture', - 'move', - 'moveend', - 'movestart', - 'propertychange', - 'resizeend', - 'resizestart', - 'rowenter', - 'rowexit', - 'rowsdelete', - 'rowsinserted', - 'command', - 'compassneedscalibration', - 'deactivate', - 'help', - 'mscontentzoom', - 'msmanipulationstatechanged', - 'msgesturechange', - 'msgesturedoubletap', - 'msgestureend', - 'msgesturehold', - 'msgesturestart', - 'msgesturetap', - 'msgotpointercapture', - 'msinertiastart', - 'mslostpointercapture', - 'mspointercancel', - 'mspointerdown', - 'mspointerenter', - 'mspointerhover', - 'mspointerleave', - 'mspointermove', - 'mspointerout', - 'mspointerover', - 'mspointerup', - 'pointerout', - 'mssitemodejumplistitemremoved', - 'msthumbnailclick', - 'stop', - 'storagecommit' - ]; - const webglEventNames = ['webglcontextrestored', 'webglcontextlost', 'webglcontextcreationerror']; - const formEventNames = ['autocomplete', 'autocompleteerror']; - const detailEventNames = ['toggle']; - const frameEventNames = ['load']; - const frameSetEventNames = ['blur', 'error', 'focus', 'load', 'resize', 'scroll', 'messageerror']; - const marqueeEventNames = ['bounce', 'finish', 'start']; - const XMLHttpRequestEventNames = [ - 'loadstart', 'progress', 'abort', 'error', 'load', 'progress', 'timeout', 'loadend', - 'readystatechange' - ]; - const IDBIndexEventNames = ['upgradeneeded', 'complete', 'abort', 'success', 'error', 'blocked', 'versionchange', 'close']; - const websocketEventNames = ['close', 'error', 'open', 'message']; - const workerEventNames = ['error', 'message']; - const eventNames = globalEventHandlersEventNames.concat(webglEventNames, formEventNames, detailEventNames, documentEventNames, windowEventNames, htmlElementEventNames, ieElementEventNames); - function filterProperties(target, onProperties, ignoreProperties) { - if (!ignoreProperties || ignoreProperties.length === 0) { - return onProperties; - } - const tip = ignoreProperties.filter(ip => ip.target === target); - if (!tip || tip.length === 0) { - return onProperties; - } - const targetIgnoreProperties = tip[0].ignoreProperties; - return onProperties.filter(op => targetIgnoreProperties.indexOf(op) === -1); - } - function patchFilteredProperties(target, onProperties, ignoreProperties, prototype) { - // check whether target is available, sometimes target will be undefined - // because different browser or some 3rd party plugin. - if (!target) { - return; - } - const filteredProperties = filterProperties(target, onProperties, ignoreProperties); - patchOnProperties(target, filteredProperties, prototype); - } - function propertyDescriptorPatch(api, _global) { - if (isNode && !isMix) { - return; - } - if (Zone[api.symbol('patchEvents')]) { - // events are already been patched by legacy patch. - return; - } - const supportsWebSocket = typeof WebSocket !== 'undefined'; - const ignoreProperties = _global['__Zone_ignore_on_properties']; - // for browsers that we can patch the descriptor: Chrome & Firefox - if (isBrowser) { - const internalWindow = window; - const ignoreErrorProperties = isIE ? [{ target: internalWindow, ignoreProperties: ['error'] }] : []; - // in IE/Edge, onProp not exist in window object, but in WindowPrototype - // so we need to pass WindowPrototype to check onProp exist or not - patchFilteredProperties(internalWindow, eventNames.concat(['messageerror']), ignoreProperties ? ignoreProperties.concat(ignoreErrorProperties) : ignoreProperties, ObjectGetPrototypeOf(internalWindow)); - patchFilteredProperties(Document.prototype, eventNames, ignoreProperties); - if (typeof internalWindow['SVGElement'] !== 'undefined') { - patchFilteredProperties(internalWindow['SVGElement'].prototype, eventNames, ignoreProperties); - } - patchFilteredProperties(Element.prototype, eventNames, ignoreProperties); - patchFilteredProperties(HTMLElement.prototype, eventNames, ignoreProperties); - patchFilteredProperties(HTMLMediaElement.prototype, mediaElementEventNames, ignoreProperties); - patchFilteredProperties(HTMLFrameSetElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties); - patchFilteredProperties(HTMLBodyElement.prototype, windowEventNames.concat(frameSetEventNames), ignoreProperties); - patchFilteredProperties(HTMLFrameElement.prototype, frameEventNames, ignoreProperties); - patchFilteredProperties(HTMLIFrameElement.prototype, frameEventNames, ignoreProperties); - const HTMLMarqueeElement = internalWindow['HTMLMarqueeElement']; - if (HTMLMarqueeElement) { - patchFilteredProperties(HTMLMarqueeElement.prototype, marqueeEventNames, ignoreProperties); - } - const Worker = internalWindow['Worker']; - if (Worker) { - patchFilteredProperties(Worker.prototype, workerEventNames, ignoreProperties); - } - } - const XMLHttpRequest = _global['XMLHttpRequest']; - if (XMLHttpRequest) { - // XMLHttpRequest is not available in ServiceWorker, so we need to check here - patchFilteredProperties(XMLHttpRequest.prototype, XMLHttpRequestEventNames, ignoreProperties); - } - const XMLHttpRequestEventTarget = _global['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget) { - patchFilteredProperties(XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype, XMLHttpRequestEventNames, ignoreProperties); - } - if (typeof IDBIndex !== 'undefined') { - patchFilteredProperties(IDBIndex.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBRequest.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBOpenDBRequest.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBDatabase.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBTransaction.prototype, IDBIndexEventNames, ignoreProperties); - patchFilteredProperties(IDBCursor.prototype, IDBIndexEventNames, ignoreProperties); - } - if (supportsWebSocket) { - patchFilteredProperties(WebSocket.prototype, websocketEventNames, ignoreProperties); - } - } - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - Zone.__load_patch('util', (global, Zone, api) => { - api.patchOnProperties = patchOnProperties; - api.patchMethod = patchMethod; - api.bindArguments = bindArguments; - api.patchMacroTask = patchMacroTask; - // In earlier version of zone.js (<0.9.0), we use env name `__zone_symbol__BLACK_LISTED_EVENTS` to - // define which events will not be patched by `Zone.js`. - // In newer version (>=0.9.0), we change the env name to `__zone_symbol__UNPATCHED_EVENTS` to keep - // the name consistent with angular repo. - // The `__zone_symbol__BLACK_LISTED_EVENTS` is deprecated, but it is still be supported for - // backwards compatibility. - const SYMBOL_BLACK_LISTED_EVENTS = Zone.__symbol__('BLACK_LISTED_EVENTS'); - const SYMBOL_UNPATCHED_EVENTS = Zone.__symbol__('UNPATCHED_EVENTS'); - if (global[SYMBOL_UNPATCHED_EVENTS]) { - global[SYMBOL_BLACK_LISTED_EVENTS] = global[SYMBOL_UNPATCHED_EVENTS]; - } - if (global[SYMBOL_BLACK_LISTED_EVENTS]) { - Zone[SYMBOL_BLACK_LISTED_EVENTS] = Zone[SYMBOL_UNPATCHED_EVENTS] = - global[SYMBOL_BLACK_LISTED_EVENTS]; - } - api.patchEventPrototype = patchEventPrototype; - api.patchEventTarget = patchEventTarget; - api.isIEOrEdge = isIEOrEdge; - api.ObjectDefineProperty = ObjectDefineProperty; - api.ObjectGetOwnPropertyDescriptor = ObjectGetOwnPropertyDescriptor; - api.ObjectCreate = ObjectCreate; - api.ArraySlice = ArraySlice; - api.patchClass = patchClass; - api.wrapWithCurrentZone = wrapWithCurrentZone; - api.filterProperties = filterProperties; - api.attachOriginToPatched = attachOriginToPatched; - api._redefineProperty = Object.defineProperty; - api.patchCallbacks = patchCallbacks; - api.getGlobalObjects = () => ({ globalSources, zoneSymbolEventNames: zoneSymbolEventNames$1, eventNames, isBrowser, isMix, isNode, TRUE_STR, - FALSE_STR, ZONE_SYMBOL_PREFIX, ADD_EVENT_LISTENER_STR, REMOVE_EVENT_LISTENER_STR }); - }); - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - const taskSymbol = zoneSymbol('zoneTask'); - function patchTimer(window, setName, cancelName, nameSuffix) { - let setNative = null; - let clearNative = null; - setName += nameSuffix; - cancelName += nameSuffix; - const tasksByHandleId = {}; - function scheduleTask(task) { - const data = task.data; - function timer() { - try { - task.invoke.apply(this, arguments); - } - finally { - // issue-934, task will be cancelled - // even it is a periodic task such as - // setInterval - if (!(task.data && task.data.isPeriodic)) { - if (typeof data.handleId === 'number') { - // in non-nodejs env, we remove timerId - // from local cache - delete tasksByHandleId[data.handleId]; - } - else if (data.handleId) { - // Node returns complex objects as handleIds - // we remove task reference from timer object - data.handleId[taskSymbol] = null; - } - } - } - } - data.args[0] = timer; - data.handleId = setNative.apply(window, data.args); - return task; - } - function clearTask(task) { return clearNative(task.data.handleId); } - setNative = - patchMethod(window, setName, (delegate) => function (self, args) { - if (typeof args[0] === 'function') { - const options = { - isPeriodic: nameSuffix === 'Interval', - delay: (nameSuffix === 'Timeout' || nameSuffix === 'Interval') ? args[1] || 0 : - undefined, - args: args - }; - const task = scheduleMacroTaskWithCurrentZone(setName, args[0], options, scheduleTask, clearTask); - if (!task) { - return task; - } - // Node.js must additionally support the ref and unref functions. - const handle = task.data.handleId; - if (typeof handle === 'number') { - // for non nodejs env, we save handleId: task - // mapping in local cache for clearTimeout - tasksByHandleId[handle] = task; - } - else if (handle) { - // for nodejs env, we save task - // reference in timerId Object for clearTimeout - handle[taskSymbol] = task; - } - // check whether handle is null, because some polyfill or browser - // may return undefined from setTimeout/setInterval/setImmediate/requestAnimationFrame - if (handle && handle.ref && handle.unref && typeof handle.ref === 'function' && - typeof handle.unref === 'function') { - task.ref = handle.ref.bind(handle); - task.unref = handle.unref.bind(handle); - } - if (typeof handle === 'number' || handle) { - return handle; - } - return task; - } - else { - // cause an error by calling it directly. - return delegate.apply(window, args); - } - }); - clearNative = - patchMethod(window, cancelName, (delegate) => function (self, args) { - const id = args[0]; - let task; - if (typeof id === 'number') { - // non nodejs env. - task = tasksByHandleId[id]; - } - else { - // nodejs env. - task = id && id[taskSymbol]; - // other environments. - if (!task) { - task = id; - } - } - if (task && typeof task.type === 'string') { - if (task.state !== 'notScheduled' && - (task.cancelFn && task.data.isPeriodic || task.runCount === 0)) { - if (typeof id === 'number') { - delete tasksByHandleId[id]; - } - else if (id) { - id[taskSymbol] = null; - } - // Do not cancel already canceled functions - task.zone.cancelTask(task); - } - } - else { - // cause an error by calling it directly. - delegate.apply(window, args); - } - }); - } - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - function patchCustomElements(_global, api) { - const { isBrowser, isMix } = api.getGlobalObjects(); - if ((!isBrowser && !isMix) || !_global['customElements'] || !('customElements' in _global)) { - return; - } - const callbacks = ['connectedCallback', 'disconnectedCallback', 'adoptedCallback', 'attributeChangedCallback']; - api.patchCallbacks(api, _global.customElements, 'customElements', 'define', callbacks); - } - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - function eventTargetPatch(_global, api) { - if (Zone[api.symbol('patchEventTarget')]) { - // EventTarget is already patched. - return; - } - const { eventNames, zoneSymbolEventNames, TRUE_STR, FALSE_STR, ZONE_SYMBOL_PREFIX } = api.getGlobalObjects(); - // predefine all __zone_symbol__ + eventName + true/false string - for (let i = 0; i < eventNames.length; i++) { - const eventName = eventNames[i]; - const falseEventName = eventName + FALSE_STR; - const trueEventName = eventName + TRUE_STR; - const symbol = ZONE_SYMBOL_PREFIX + falseEventName; - const symbolCapture = ZONE_SYMBOL_PREFIX + trueEventName; - zoneSymbolEventNames[eventName] = {}; - zoneSymbolEventNames[eventName][FALSE_STR] = symbol; - zoneSymbolEventNames[eventName][TRUE_STR] = symbolCapture; - } - const EVENT_TARGET = _global['EventTarget']; - if (!EVENT_TARGET || !EVENT_TARGET.prototype) { - return; - } - api.patchEventTarget(_global, [EVENT_TARGET && EVENT_TARGET.prototype]); - return true; - } - function patchEvent(global, api) { - api.patchEventPrototype(global, api); - } - - /** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ - Zone.__load_patch('legacy', (global) => { - const legacyPatch = global[Zone.__symbol__('legacyPatch')]; - if (legacyPatch) { - legacyPatch(); - } - }); - Zone.__load_patch('timers', (global) => { - const set = 'set'; - const clear = 'clear'; - patchTimer(global, set, clear, 'Timeout'); - patchTimer(global, set, clear, 'Interval'); - patchTimer(global, set, clear, 'Immediate'); - }); - Zone.__load_patch('requestAnimationFrame', (global) => { - patchTimer(global, 'request', 'cancel', 'AnimationFrame'); - patchTimer(global, 'mozRequest', 'mozCancel', 'AnimationFrame'); - patchTimer(global, 'webkitRequest', 'webkitCancel', 'AnimationFrame'); - }); - Zone.__load_patch('blocking', (global, Zone) => { - const blockingMethods = ['alert', 'prompt', 'confirm']; - for (let i = 0; i < blockingMethods.length; i++) { - const name = blockingMethods[i]; - patchMethod(global, name, (delegate, symbol, name) => { - return function (s, args) { - return Zone.current.run(delegate, global, args, name); - }; - }); - } - }); - Zone.__load_patch('EventTarget', (global, Zone, api) => { - patchEvent(global, api); - eventTargetPatch(global, api); - // patch XMLHttpRequestEventTarget's addEventListener/removeEventListener - const XMLHttpRequestEventTarget = global['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget && XMLHttpRequestEventTarget.prototype) { - api.patchEventTarget(global, [XMLHttpRequestEventTarget.prototype]); - } - patchClass('MutationObserver'); - patchClass('WebKitMutationObserver'); - patchClass('IntersectionObserver'); - patchClass('FileReader'); - }); - Zone.__load_patch('on_property', (global, Zone, api) => { - propertyDescriptorPatch(api, global); - }); - Zone.__load_patch('customElements', (global, Zone, api) => { - patchCustomElements(global, api); - }); - Zone.__load_patch('XHR', (global, Zone) => { - // Treat XMLHttpRequest as a macrotask. - patchXHR(global); - const XHR_TASK = zoneSymbol('xhrTask'); - const XHR_SYNC = zoneSymbol('xhrSync'); - const XHR_LISTENER = zoneSymbol('xhrListener'); - const XHR_SCHEDULED = zoneSymbol('xhrScheduled'); - const XHR_URL = zoneSymbol('xhrURL'); - const XHR_ERROR_BEFORE_SCHEDULED = zoneSymbol('xhrErrorBeforeScheduled'); - function patchXHR(window) { - const XMLHttpRequest = window['XMLHttpRequest']; - if (!XMLHttpRequest) { - // XMLHttpRequest is not available in service worker - return; - } - const XMLHttpRequestPrototype = XMLHttpRequest.prototype; - function findPendingTask(target) { return target[XHR_TASK]; } - let oriAddListener = XMLHttpRequestPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - let oriRemoveListener = XMLHttpRequestPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - if (!oriAddListener) { - const XMLHttpRequestEventTarget = window['XMLHttpRequestEventTarget']; - if (XMLHttpRequestEventTarget) { - const XMLHttpRequestEventTargetPrototype = XMLHttpRequestEventTarget.prototype; - oriAddListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - oriRemoveListener = XMLHttpRequestEventTargetPrototype[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - } - } - const READY_STATE_CHANGE = 'readystatechange'; - const SCHEDULED = 'scheduled'; - function scheduleTask(task) { - const data = task.data; - const target = data.target; - target[XHR_SCHEDULED] = false; - target[XHR_ERROR_BEFORE_SCHEDULED] = false; - // remove existing event listener - const listener = target[XHR_LISTENER]; - if (!oriAddListener) { - oriAddListener = target[ZONE_SYMBOL_ADD_EVENT_LISTENER]; - oriRemoveListener = target[ZONE_SYMBOL_REMOVE_EVENT_LISTENER]; - } - if (listener) { - oriRemoveListener.call(target, READY_STATE_CHANGE, listener); - } - const newListener = target[XHR_LISTENER] = () => { - if (target.readyState === target.DONE) { - // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with - // readyState=4 multiple times, so we need to check task state here - if (!data.aborted && target[XHR_SCHEDULED] && task.state === SCHEDULED) { - // check whether the xhr has registered onload listener - // if that is the case, the task should invoke after all - // onload listeners finish. - const loadTasks = target[Zone.__symbol__('loadfalse')]; - if (loadTasks && loadTasks.length > 0) { - const oriInvoke = task.invoke; - task.invoke = function () { - // need to load the tasks again, because in other - // load listener, they may remove themselves - const loadTasks = target[Zone.__symbol__('loadfalse')]; - for (let i = 0; i < loadTasks.length; i++) { - if (loadTasks[i] === task) { - loadTasks.splice(i, 1); - } - } - if (!data.aborted && task.state === SCHEDULED) { - oriInvoke.call(task); - } - }; - loadTasks.push(task); - } - else { - task.invoke(); - } - } - else if (!data.aborted && target[XHR_SCHEDULED] === false) { - // error occurs when xhr.send() - target[XHR_ERROR_BEFORE_SCHEDULED] = true; - } - } - }; - oriAddListener.call(target, READY_STATE_CHANGE, newListener); - const storedTask = target[XHR_TASK]; - if (!storedTask) { - target[XHR_TASK] = task; - } - sendNative.apply(target, data.args); - target[XHR_SCHEDULED] = true; - return task; - } - function placeholderCallback() { } - function clearTask(task) { - const data = task.data; - // Note - ideally, we would call data.target.removeEventListener here, but it's too late - // to prevent it from firing. So instead, we store info for the event listener. - data.aborted = true; - return abortNative.apply(data.target, data.args); - } - const openNative = patchMethod(XMLHttpRequestPrototype, 'open', () => function (self, args) { - self[XHR_SYNC] = args[2] == false; - self[XHR_URL] = args[1]; - return openNative.apply(self, args); - }); - const XMLHTTPREQUEST_SOURCE = 'XMLHttpRequest.send'; - const fetchTaskAborting = zoneSymbol('fetchTaskAborting'); - const fetchTaskScheduling = zoneSymbol('fetchTaskScheduling'); - const sendNative = patchMethod(XMLHttpRequestPrototype, 'send', () => function (self, args) { - if (Zone.current[fetchTaskScheduling] === true) { - // a fetch is scheduling, so we are using xhr to polyfill fetch - // and because we already schedule macroTask for fetch, we should - // not schedule a macroTask for xhr again - return sendNative.apply(self, args); - } - if (self[XHR_SYNC]) { - // if the XHR is sync there is no task to schedule, just execute the code. - return sendNative.apply(self, args); - } - else { - const options = { target: self, url: self[XHR_URL], isPeriodic: false, args: args, aborted: false }; - const task = scheduleMacroTaskWithCurrentZone(XMLHTTPREQUEST_SOURCE, placeholderCallback, options, scheduleTask, clearTask); - if (self && self[XHR_ERROR_BEFORE_SCHEDULED] === true && !options.aborted && - task.state === SCHEDULED) { - // xhr request throw error when send - // we should invoke task instead of leaving a scheduled - // pending macroTask - task.invoke(); - } - } - }); - const abortNative = patchMethod(XMLHttpRequestPrototype, 'abort', () => function (self, args) { - const task = findPendingTask(self); - if (task && typeof task.type == 'string') { - // If the XHR has already completed, do nothing. - // If the XHR has already been aborted, do nothing. - // Fix #569, call abort multiple times before done will cause - // macroTask task count be negative number - if (task.cancelFn == null || (task.data && task.data.aborted)) { - return; - } - task.zone.cancelTask(task); - } - else if (Zone.current[fetchTaskAborting] === true) { - // the abort is called from fetch polyfill, we need to call native abort of XHR. - return abortNative.apply(self, args); - } - // Otherwise, we are trying to abort an XHR which has not yet been sent, so there is no - // task - // to cancel. Do nothing. - }); - } - }); - Zone.__load_patch('geolocation', (global) => { - /// GEO_LOCATION - if (global['navigator'] && global['navigator'].geolocation) { - patchPrototype(global['navigator'].geolocation, ['getCurrentPosition', 'watchPosition']); - } - }); - Zone.__load_patch('PromiseRejectionEvent', (global, Zone) => { - // handle unhandled promise rejection - function findPromiseRejectionHandler(evtName) { - return function (e) { - const eventTasks = findEventTasks(global, evtName); - eventTasks.forEach(eventTask => { - // windows has added unhandledrejection event listener - // trigger the event listener - const PromiseRejectionEvent = global['PromiseRejectionEvent']; - if (PromiseRejectionEvent) { - const evt = new PromiseRejectionEvent(evtName, { promise: e.promise, reason: e.rejection }); - eventTask.invoke(evt); - } - }); - }; - } - if (global['PromiseRejectionEvent']) { - Zone[zoneSymbol('unhandledPromiseRejectionHandler')] = - findPromiseRejectionHandler('unhandledrejection'); - Zone[zoneSymbol('rejectionHandledHandler')] = - findPromiseRejectionHandler('rejectionhandled'); - } - }); - -}))); - - -/***/ }), - -/***/ "./src/polyfills.ts": -/*!**************************!*\ - !*** ./src/polyfills.ts ***! - \**************************/ -/*! no exports provided */ -/***/ (function(module, __webpack_exports__, __webpack_require__) { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var _zone_flags__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./zone-flags */ "./src/zone-flags.ts"); -/* harmony import */ var _zone_flags__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_zone_flags__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! zone.js/dist/zone */ "./node_modules/zone.js/dist/zone-evergreen.js"); -/* harmony import */ var zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(zone_js_dist_zone__WEBPACK_IMPORTED_MODULE_1__); -/** - * This file includes polyfills needed by Angular and is loaded before the app. - * You can add your own extra polyfills to this file. - * - * This file is divided into 2 sections: - * 1. Browser polyfills. These are applied before loading ZoneJS and are sorted by browsers. - * 2. Application imports. Files imported after ZoneJS that should be loaded before your main - * file. - * - * The current setup is for so-called "evergreen" browsers; the last versions of browsers that - * automatically update themselves. This includes Safari >= 10, Chrome >= 55 (including Opera), - * Edge >= 13 on the desktop, and iOS 10 and Chrome on mobile. - * - * Learn more in https://angular.io/guide/browser-support - */ -/*************************************************************************************************** - * BROWSER POLYFILLS - */ -/** IE10 and IE11 requires the following for NgClass support on SVG elements */ -// import 'classlist.js'; // Run `npm install --save classlist.js`. -/** - * Web Animations `@angular/platform-browser/animations` - * Only required if AnimationBuilder is used within the application and using IE/Edge or Safari. - * Standard animation support in Angular DOES NOT require any polyfills (as of Angular 6.0). - */ -// import 'web-animations-js'; // Run `npm install --save web-animations-js`. -/** - * By default, zone.js will patch all possible macroTask and DomEvents - * user can disable parts of macroTask/DomEvents patch by setting following flags - * because those flags need to be set before `zone.js` being loaded, and webpack - * will put import in the top of bundle, so user need to create a separate file - * in this directory (for example: zone-flags.ts), and put the following flags - * into that file, and then add the following code before importing zone.js. - * import './zone-flags.ts'; - * - * The flags allowed in zone-flags.ts are listed here. - * - * The following flags will work for all browsers. - * - * (window as any).__Zone_disable_requestAnimationFrame = true; // disable patch requestAnimationFrame - * (window as any).__Zone_disable_on_property = true; // disable patch onProperty such as onclick - * (window as any).__zone_symbol__BLACK_LISTED_EVENTS = ['scroll', 'mousemove']; // disable patch specified eventNames - * - * in IE/Edge developer tools, the addEventListener will also be wrapped by zone.js - * with the following flag, it will bypass `zone.js` patch for IE/Edge - * - * (window as any).__Zone_enable_cross_context_check = true; - * - */ - -/*************************************************************************************************** - * Zone JS is required by default for Angular itself. - */ - // Included with Angular CLI. -/*************************************************************************************************** - * APPLICATION IMPORTS - */ -window.global = window; - - -/***/ }), - -/***/ "./src/zone-flags.ts": -/*!***************************!*\ - !*** ./src/zone-flags.ts ***! - \***************************/ -/*! no static exports found */ -/***/ (function(module, exports) { - -/** - * Prevents Angular change detection from - * running with certain Web Component callbacks - */ -window.__Zone_disable_customElements = true; - - -/***/ }), - -/***/ 2: -/*!***************************************************************************************************************************!*\ - !*** multi ./src/polyfills.ts ./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js ***! - \***************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -__webpack_require__(/*! C:\Users\tiago.kayaya\development\gabinete-digital\src\polyfills.ts */"./src/polyfills.ts"); -module.exports = __webpack_require__(/*! C:\Users\tiago.kayaya\development\gabinete-digital\node_modules\@angular-devkit\build-angular\src\angular-cli-files\models\jit-polyfills.js */"./node_modules/@angular-devkit/build-angular/src/angular-cli-files/models/jit-polyfills.js"); - - -/***/ }) - -},[[2,"runtime"]]]); -//# sourceMappingURL=polyfills.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/runtime.js.download b/src/assets/images/Gabinete Digital_files/runtime.js.download deleted file mode 100644 index 9cedd1f70..000000000 --- a/src/assets/images/Gabinete Digital_files/runtime.js.download +++ /dev/null @@ -1,224 +0,0 @@ -/******/ (function(modules) { // webpackBootstrap -/******/ // install a JSONP callback for chunk loading -/******/ function webpackJsonpCallback(data) { -/******/ var chunkIds = data[0]; -/******/ var moreModules = data[1]; -/******/ var executeModules = data[2]; -/******/ -/******/ // add "moreModules" to the modules object, -/******/ // then flag all "chunkIds" as loaded and fire callback -/******/ var moduleId, chunkId, i = 0, resolves = []; -/******/ for(;i < chunkIds.length; i++) { -/******/ chunkId = chunkIds[i]; -/******/ if(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) { -/******/ resolves.push(installedChunks[chunkId][0]); -/******/ } -/******/ installedChunks[chunkId] = 0; -/******/ } -/******/ for(moduleId in moreModules) { -/******/ if(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) { -/******/ modules[moduleId] = moreModules[moduleId]; -/******/ } -/******/ } -/******/ if(parentJsonpFunction) parentJsonpFunction(data); -/******/ -/******/ while(resolves.length) { -/******/ resolves.shift()(); -/******/ } -/******/ -/******/ // add entry modules from loaded chunk to deferred list -/******/ deferredModules.push.apply(deferredModules, executeModules || []); -/******/ -/******/ // run deferred modules when all chunks ready -/******/ return checkDeferredModules(); -/******/ }; -/******/ function checkDeferredModules() { -/******/ var result; -/******/ for(var i = 0; i < deferredModules.length; i++) { -/******/ var deferredModule = deferredModules[i]; -/******/ var fulfilled = true; -/******/ for(var j = 1; j < deferredModule.length; j++) { -/******/ var depId = deferredModule[j]; -/******/ if(installedChunks[depId] !== 0) fulfilled = false; -/******/ } -/******/ if(fulfilled) { -/******/ deferredModules.splice(i--, 1); -/******/ result = __webpack_require__(__webpack_require__.s = deferredModule[0]); -/******/ } -/******/ } -/******/ -/******/ return result; -/******/ } -/******/ -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // object to store loaded and loading chunks -/******/ // undefined = chunk not loaded, null = chunk preloaded/prefetched -/******/ // Promise = chunk loading, 0 = chunk loaded -/******/ var installedChunks = { -/******/ "runtime": 0 -/******/ }; -/******/ -/******/ var deferredModules = []; -/******/ -/******/ // script path function -/******/ function jsonpScriptSrc(chunkId) { -/******/ return __webpack_require__.p + "" + ({"common":"common","default~home-home-module~pages-chat-chat-module~pages-login-login-module":"default~home-home-module~pages-chat-chat-module~pages-login-login-module","home-home-module":"home-home-module","pages-chat-chat-module":"pages-chat-chat-module","index-index-module":"index-index-module","polyfills-core-js":"polyfills-core-js","polyfills-css-shim":"polyfills-css-shim","polyfills-dom":"polyfills-dom","shadow-css-fc98efba-js":"shadow-css-fc98efba-js","swiper-bundle-95afeea2-js":"swiper-bundle-95afeea2-js","focus-visible-15ada7f7-js":"focus-visible-15ada7f7-js","input-shims-b956f530-js":"input-shims-b956f530-js","keyboard-dd970efc-js":"keyboard-dd970efc-js","status-tap-a9bf301d-js":"status-tap-a9bf301d-js","swipe-back-0a6a44c8-js":"swipe-back-0a6a44c8-js","tap-click-252af35a-js":"tap-click-252af35a-js","event-list-event-list-module":"event-list-event-list-module","expediente-detail-expediente-detail-module":"expediente-detail-expediente-detail-module","pages-events-events-module":"pages-events-events-module","pages-gabinete-digital-gabinete-digital-module":"pages-gabinete-digital-gabinete-digital-module","default~attachments-attachments-module~event-detail-event-detail-module~pages-events-event-detail-ev~f3bcdd0b":"default~attachments-attachments-module~event-detail-event-detail-module~pages-events-event-detail-ev~f3bcdd0b","attachments-attachments-module":"attachments-attachments-module","default~attendees-attendees-module~event-detail-event-detail-module~pages-agenda-agenda-module~pages~2e9e46f5":"default~attendees-attendees-module~event-detail-event-detail-module~pages-agenda-agenda-module~pages~2e9e46f5","attendees-attendees-module":"attendees-attendees-module","default~event-detail-event-detail-module~pages-events-event-detail-event-detail-module":"default~event-detail-event-detail-module~pages-events-event-detail-event-detail-module","default~expediente-expediente-module~pages-agenda-agenda-module":"default~expediente-expediente-module~pages-agenda-agenda-module","pages-agenda-agenda-module":"pages-agenda-agenda-module","expediente-expediente-module":"expediente-expediente-module","pages-login-login-module":"pages-login-login-module","pages-search-search-module":"pages-search-search-module","conversation-conversation-module":"conversation-conversation-module","newchat-newchat-module":"newchat-newchat-module","attendee-modal-attendee-modal-module":"attendee-modal-attendee-modal-module","event-list-pr-event-list-pr-module":"event-list-pr-event-list-pr-module","approve-event-modal-approve-event-modal-module":"approve-event-modal-approve-event-modal-module"}[chunkId]||chunkId) + ".js" -/******/ } -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ // This file contains only the entry chunk. -/******/ // The chunk loading function for additional chunks -/******/ __webpack_require__.e = function requireEnsure(chunkId) { -/******/ var promises = []; -/******/ -/******/ -/******/ // JSONP chunk loading for javascript -/******/ -/******/ var installedChunkData = installedChunks[chunkId]; -/******/ if(installedChunkData !== 0) { // 0 means "already installed". -/******/ -/******/ // a Promise means "currently loading". -/******/ if(installedChunkData) { -/******/ promises.push(installedChunkData[2]); -/******/ } else { -/******/ // setup Promise in chunk cache -/******/ var promise = new Promise(function(resolve, reject) { -/******/ installedChunkData = installedChunks[chunkId] = [resolve, reject]; -/******/ }); -/******/ promises.push(installedChunkData[2] = promise); -/******/ -/******/ // start chunk loading -/******/ var script = document.createElement('script'); -/******/ var onScriptComplete; -/******/ -/******/ script.charset = 'utf-8'; -/******/ script.timeout = 120; -/******/ if (__webpack_require__.nc) { -/******/ script.setAttribute("nonce", __webpack_require__.nc); -/******/ } -/******/ script.src = jsonpScriptSrc(chunkId); -/******/ -/******/ // create error before stack unwound to get useful stacktrace later -/******/ var error = new Error(); -/******/ onScriptComplete = function (event) { -/******/ // avoid mem leaks in IE. -/******/ script.onerror = script.onload = null; -/******/ clearTimeout(timeout); -/******/ var chunk = installedChunks[chunkId]; -/******/ if(chunk !== 0) { -/******/ if(chunk) { -/******/ var errorType = event && (event.type === 'load' ? 'missing' : event.type); -/******/ var realSrc = event && event.target && event.target.src; -/******/ error.message = 'Loading chunk ' + chunkId + ' failed.\n(' + errorType + ': ' + realSrc + ')'; -/******/ error.name = 'ChunkLoadError'; -/******/ error.type = errorType; -/******/ error.request = realSrc; -/******/ chunk[1](error); -/******/ } -/******/ installedChunks[chunkId] = undefined; -/******/ } -/******/ }; -/******/ var timeout = setTimeout(function(){ -/******/ onScriptComplete({ type: 'timeout', target: script }); -/******/ }, 120000); -/******/ script.onerror = script.onload = onScriptComplete; -/******/ document.head.appendChild(script); -/******/ } -/******/ } -/******/ return Promise.all(promises); -/******/ }; -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); -/******/ } -/******/ }; -/******/ -/******/ // define __esModule on exports -/******/ __webpack_require__.r = function(exports) { -/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { -/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); -/******/ } -/******/ Object.defineProperty(exports, '__esModule', { value: true }); -/******/ }; -/******/ -/******/ // create a fake namespace object -/******/ // mode & 1: value is a module id, require it -/******/ // mode & 2: merge all properties of value into the ns -/******/ // mode & 4: return value when already ns object -/******/ // mode & 8|1: behave like require -/******/ __webpack_require__.t = function(value, mode) { -/******/ if(mode & 1) value = __webpack_require__(value); -/******/ if(mode & 8) return value; -/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; -/******/ var ns = Object.create(null); -/******/ __webpack_require__.r(ns); -/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); -/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key)); -/******/ return ns; -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // on error function for async loading -/******/ __webpack_require__.oe = function(err) { console.error(err); throw err; }; -/******/ -/******/ var jsonpArray = window["webpackJsonp"] = window["webpackJsonp"] || []; -/******/ var oldJsonpFunction = jsonpArray.push.bind(jsonpArray); -/******/ jsonpArray.push = webpackJsonpCallback; -/******/ jsonpArray = jsonpArray.slice(); -/******/ for(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]); -/******/ var parentJsonpFunction = oldJsonpFunction; -/******/ -/******/ -/******/ // run deferred modules from other chunks -/******/ checkDeferredModules(); -/******/ }) -/************************************************************************/ -/******/ ([]); -//# sourceMappingURL=runtime.js.map \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/saved_resource.html b/src/assets/images/Gabinete Digital_files/saved_resource.html deleted file mode 100644 index be1eee7a3..000000000 --- a/src/assets/images/Gabinete Digital_files/saved_resource.html +++ /dev/null @@ -1,1313 +0,0 @@ - - - - - Gabinete Digital - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/assets/images/Gabinete Digital_files/styles.js.download b/src/assets/images/Gabinete Digital_files/styles.js.download deleted file mode 100644 index a9d4953e6..000000000 --- a/src/assets/images/Gabinete Digital_files/styles.js.download +++ /dev/null @@ -1,500 +0,0 @@ -(window["webpackJsonp"] = window["webpackJsonp"] || []).push([["styles"],{ - -/***/ "./node_modules/css-loader/dist/cjs.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./src/global.scss": -/*!************************************************************************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js??ref--13-1!./node_modules/postcss-loader/src??embedded!./node_modules/sass-loader/dist/cjs.js??ref--13-3!./src/global.scss ***! - \************************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -exports = ___CSS_LOADER_API_IMPORT___(true); -// Module -exports.push([module.i, "/*\n * App Global CSS\n * ----------------------------------------------------------------------------\n * Put style rules here that you want to apply globally. These styles are for\n * the entire app and not just one component. Additionally, this file can be\n * used as an entry point to import other CSS/Sass files to be included in the\n * output CSS.\n * For more information on global stylesheets, visit the documentation:\n * https://ionicframework.com/docs/layout/global-stylesheets\n */\n/* Core CSS required for Ionic components to work properly */\nhtml.ios {\n --ion-default-font: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", \"Roboto\", sans-serif;\n}\nhtml.md {\n --ion-default-font: \"Roboto\", \"Helvetica Neue\", sans-serif;\n}\nhtml {\n --ion-font-family: var(--ion-default-font);\n}\nbody {\n background: var(--ion-background-color);\n}\nbody.backdrop-no-scroll {\n overflow: hidden;\n}\nhtml.ios ion-modal.modal-card .ion-page > ion-header > ion-toolbar:first-of-type {\n padding-top: 0px;\n}\nhtml.ios ion-modal .ion-page {\n border-radius: inherit;\n}\n.ion-color-primary {\n --ion-color-base: var(--ion-color-primary, #3880ff) !important;\n --ion-color-base-rgb: var(--ion-color-primary-rgb, 56, 128, 255) !important;\n --ion-color-contrast: var(--ion-color-primary-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-primary-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-primary-shade, #3171e0) !important;\n --ion-color-tint: var(--ion-color-primary-tint, #4c8dff) !important;\n}\n.ion-color-secondary {\n --ion-color-base: var(--ion-color-secondary, #3dc2ff) !important;\n --ion-color-base-rgb: var(--ion-color-secondary-rgb, 61, 194, 255) !important;\n --ion-color-contrast: var(--ion-color-secondary-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-secondary-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-secondary-shade, #36abe0) !important;\n --ion-color-tint: var(--ion-color-secondary-tint, #50c8ff) !important;\n}\n.ion-color-tertiary {\n --ion-color-base: var(--ion-color-tertiary, #5260ff) !important;\n --ion-color-base-rgb: var(--ion-color-tertiary-rgb, 82, 96, 255) !important;\n --ion-color-contrast: var(--ion-color-tertiary-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-tertiary-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-tertiary-shade, #4854e0) !important;\n --ion-color-tint: var(--ion-color-tertiary-tint, #6370ff) !important;\n}\n.ion-color-success {\n --ion-color-base: var(--ion-color-success, #2dd36f) !important;\n --ion-color-base-rgb: var(--ion-color-success-rgb, 45, 211, 111) !important;\n --ion-color-contrast: var(--ion-color-success-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-success-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-success-shade, #28ba62) !important;\n --ion-color-tint: var(--ion-color-success-tint, #42d77d) !important;\n}\n.ion-color-warning {\n --ion-color-base: var(--ion-color-warning, #ffc409) !important;\n --ion-color-base-rgb: var(--ion-color-warning-rgb, 255, 196, 9) !important;\n --ion-color-contrast: var(--ion-color-warning-contrast, #000) !important;\n --ion-color-contrast-rgb: var(--ion-color-warning-contrast-rgb, 0, 0, 0) !important;\n --ion-color-shade: var(--ion-color-warning-shade, #e0ac08) !important;\n --ion-color-tint: var(--ion-color-warning-tint, #ffca22) !important;\n}\n.ion-color-danger {\n --ion-color-base: var(--ion-color-danger, #eb445a) !important;\n --ion-color-base-rgb: var(--ion-color-danger-rgb, 235, 68, 90) !important;\n --ion-color-contrast: var(--ion-color-danger-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-danger-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-danger-shade, #cf3c4f) !important;\n --ion-color-tint: var(--ion-color-danger-tint, #ed576b) !important;\n}\n.ion-color-light {\n --ion-color-base: var(--ion-color-light, #f4f5f8) !important;\n --ion-color-base-rgb: var(--ion-color-light-rgb, 244, 245, 248) !important;\n --ion-color-contrast: var(--ion-color-light-contrast, #000) !important;\n --ion-color-contrast-rgb: var(--ion-color-light-contrast-rgb, 0, 0, 0) !important;\n --ion-color-shade: var(--ion-color-light-shade, #d7d8da) !important;\n --ion-color-tint: var(--ion-color-light-tint, #f5f6f9) !important;\n}\n.ion-color-medium {\n --ion-color-base: var(--ion-color-medium, #92949c) !important;\n --ion-color-base-rgb: var(--ion-color-medium-rgb, 146, 148, 156) !important;\n --ion-color-contrast: var(--ion-color-medium-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-medium-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-medium-shade, #808289) !important;\n --ion-color-tint: var(--ion-color-medium-tint, #9d9fa6) !important;\n}\n.ion-color-dark {\n --ion-color-base: var(--ion-color-dark, #222428) !important;\n --ion-color-base-rgb: var(--ion-color-dark-rgb, 34, 36, 40) !important;\n --ion-color-contrast: var(--ion-color-dark-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-dark-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-dark-shade, #1e2023) !important;\n --ion-color-tint: var(--ion-color-dark-tint, #383a3e) !important;\n}\n.ion-page {\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: flex;\n position: absolute;\n flex-direction: column;\n justify-content: space-between;\n contain: layout size style;\n overflow: hidden;\n z-index: 0;\n}\n.split-pane-visible > .ion-page.split-pane-main {\n position: relative;\n}\nion-route,\nion-route-redirect,\nion-router,\nion-select-option,\nion-nav-controller,\nion-menu-controller,\nion-action-sheet-controller,\nion-alert-controller,\nion-loading-controller,\nion-modal-controller,\nion-picker-controller,\nion-popover-controller,\nion-toast-controller,\n.ion-page-hidden,\n[hidden] {\n /* stylelint-disable-next-line declaration-no-important */\n display: none !important;\n}\n.ion-page-invisible {\n opacity: 0;\n}\n.can-go-back > ion-header ion-back-button {\n display: block;\n}\nhtml.plt-ios.plt-hybrid, html.plt-ios.plt-pwa {\n --ion-statusbar-padding: 20px;\n}\n@supports (padding-top: 20px) {\n html {\n --ion-safe-area-top: var(--ion-statusbar-padding);\n }\n}\n@supports (padding-top: constant(safe-area-inset-top)) {\n html {\n --ion-safe-area-top: constant(safe-area-inset-top);\n --ion-safe-area-bottom: constant(safe-area-inset-bottom);\n --ion-safe-area-left: constant(safe-area-inset-left);\n --ion-safe-area-right: constant(safe-area-inset-right);\n }\n}\n@supports (padding-top: env(safe-area-inset-top)) {\n html {\n --ion-safe-area-top: env(safe-area-inset-top);\n --ion-safe-area-bottom: env(safe-area-inset-bottom);\n --ion-safe-area-left: env(safe-area-inset-left);\n --ion-safe-area-right: env(safe-area-inset-right);\n }\n}\nion-card.ion-color .ion-inherit-color,\nion-card-header.ion-color .ion-inherit-color {\n color: inherit;\n}\n.menu-content {\n transform: translate3d(0, 0, 0);\n}\n.menu-content-open {\n cursor: pointer;\n touch-action: manipulation;\n pointer-events: none;\n}\n.ios .menu-content-reveal {\n box-shadow: -8px 0 42px rgba(0, 0, 0, 0.08);\n}\n[dir=rtl].ios .menu-content-reveal {\n box-shadow: 8px 0 42px rgba(0, 0, 0, 0.08);\n}\n.md .menu-content-reveal {\n box-shadow: 4px 0px 16px rgba(0, 0, 0, 0.18);\n}\n.md .menu-content-push {\n box-shadow: 4px 0px 16px rgba(0, 0, 0, 0.18);\n}\n/* Basic CSS for apps built with Ionic */\naudio,\ncanvas,\nprogress,\nvideo {\n vertical-align: baseline;\n}\naudio:not([controls]) {\n display: none;\n height: 0;\n}\nb,\nstrong {\n font-weight: bold;\n}\nimg {\n max-width: 100%;\n border: 0;\n}\nsvg:not(:root) {\n overflow: hidden;\n}\nfigure {\n margin: 1em 40px;\n}\nhr {\n height: 1px;\n border-width: 0;\n box-sizing: content-box;\n}\npre {\n overflow: auto;\n}\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\nlabel,\ninput,\nselect,\ntextarea {\n font-family: inherit;\n line-height: normal;\n}\ntextarea {\n overflow: auto;\n height: auto;\n font: inherit;\n color: inherit;\n}\ntextarea::-moz-placeholder {\n padding-left: 2px;\n}\ntextarea::-ms-input-placeholder {\n padding-left: 2px;\n}\ntextarea::placeholder {\n padding-left: 2px;\n}\nform,\ninput,\noptgroup,\nselect {\n margin: 0;\n font: inherit;\n color: inherit;\n}\nhtml input[type=button],\ninput[type=reset],\ninput[type=submit] {\n cursor: pointer;\n -webkit-appearance: button;\n}\na,\na div,\na span,\na ion-icon,\na ion-label,\nbutton,\nbutton div,\nbutton span,\nbutton ion-icon,\nbutton ion-label,\n.ion-tappable,\n[tappable],\n[tappable] div,\n[tappable] span,\n[tappable] ion-icon,\n[tappable] ion-label,\ninput,\ntextarea {\n touch-action: manipulation;\n}\na ion-label,\nbutton ion-label {\n pointer-events: none;\n}\nbutton {\n border: 0;\n border-radius: 0;\n font-family: inherit;\n font-style: inherit;\n font-variant: inherit;\n line-height: 1;\n text-transform: none;\n cursor: pointer;\n -webkit-appearance: button;\n}\n[tappable] {\n cursor: pointer;\n}\na[disabled],\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\ninput[type=checkbox],\ninput[type=radio] {\n padding: 0;\n box-sizing: border-box;\n}\ninput[type=number]::-webkit-inner-spin-button,\ninput[type=number]::-webkit-outer-spin-button {\n height: auto;\n}\ninput[type=search]::-webkit-search-cancel-button,\ninput[type=search]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\ntd,\nth {\n padding: 0;\n}\n* {\n box-sizing: border-box;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n}\nhtml {\n width: 100%;\n height: 100%;\n -webkit-text-size-adjust: 100%;\n -moz-text-size-adjust: 100%;\n -ms-text-size-adjust: 100%;\n text-size-adjust: 100%;\n}\nhtml:not(.hydrated) body {\n display: none;\n}\nhtml.plt-pwa {\n height: 100vh;\n}\nbody {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n margin-left: 0;\n margin-right: 0;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n padding-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n position: fixed;\n width: 100%;\n max-width: 100%;\n height: 100%;\n max-height: 100%;\n text-rendering: optimizeLegibility;\n overflow: hidden;\n touch-action: manipulation;\n -webkit-user-drag: none;\n -ms-content-zooming: none;\n word-wrap: break-word;\n overscroll-behavior-y: none;\n -webkit-text-size-adjust: none;\n -moz-text-size-adjust: none;\n -ms-text-size-adjust: none;\n text-size-adjust: none;\n}\nhtml {\n font-family: var(--ion-font-family);\n}\na {\n background-color: transparent;\n color: var(--ion-color-primary, #3880ff);\n}\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 16px;\n margin-bottom: 10px;\n font-weight: 500;\n line-height: 1.2;\n}\nh1 {\n margin-top: 20px;\n font-size: 26px;\n}\nh2 {\n margin-top: 18px;\n font-size: 24px;\n}\nh3 {\n font-size: 22px;\n}\nh4 {\n font-size: 20px;\n}\nh5 {\n font-size: 18px;\n}\nh6 {\n font-size: 16px;\n}\nsmall {\n font-size: 75%;\n}\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\nsup {\n top: -0.5em;\n}\nsub {\n bottom: -0.25em;\n}\n.ion-hide {\n display: none !important;\n}\n.ion-hide-up {\n display: none !important;\n}\n.ion-hide-down {\n display: none !important;\n}\n@media (min-width: 576px) {\n .ion-hide-sm-up {\n display: none !important;\n }\n}\n@media (max-width: 575.98px) {\n .ion-hide-sm-down {\n display: none !important;\n }\n}\n@media (min-width: 768px) {\n .ion-hide-md-up {\n display: none !important;\n }\n}\n@media (max-width: 767.98px) {\n .ion-hide-md-down {\n display: none !important;\n }\n}\n@media (min-width: 992px) {\n .ion-hide-lg-up {\n display: none !important;\n }\n}\n@media (max-width: 991.98px) {\n .ion-hide-lg-down {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .ion-hide-xl-up {\n display: none !important;\n }\n}\n@media (max-width: 1199.98px) {\n .ion-hide-xl-down {\n display: none !important;\n }\n}\n/* Optional CSS utils that can be commented out */\n.ion-no-padding {\n --padding-start: 0;\n --padding-end: 0;\n --padding-top: 0;\n --padding-bottom: 0;\n padding-left: 0;\n padding-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n}\n.ion-padding {\n --padding-start: var(--ion-padding, 16px);\n --padding-end: var(--ion-padding, 16px);\n --padding-top: var(--ion-padding, 16px);\n --padding-bottom: var(--ion-padding, 16px);\n padding-left: var(--ion-padding, 16px);\n padding-right: var(--ion-padding, 16px);\n padding-top: var(--ion-padding, 16px);\n padding-bottom: var(--ion-padding, 16px);\n}\n@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0) {\n .ion-padding {\n padding-left: unset;\n padding-right: unset;\n -webkit-padding-start: var(--ion-padding, 16px);\n padding-inline-start: var(--ion-padding, 16px);\n -webkit-padding-end: var(--ion-padding, 16px);\n padding-inline-end: var(--ion-padding, 16px);\n }\n}\n.ion-padding-top {\n --padding-top: var(--ion-padding, 16px);\n padding-top: var(--ion-padding, 16px);\n}\n.ion-padding-start {\n --padding-start: var(--ion-padding, 16px);\n padding-left: var(--ion-padding, 16px);\n}\n@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0) {\n .ion-padding-start {\n padding-left: unset;\n -webkit-padding-start: var(--ion-padding, 16px);\n padding-inline-start: var(--ion-padding, 16px);\n }\n}\n.ion-padding-end {\n --padding-end: var(--ion-padding, 16px);\n padding-right: var(--ion-padding, 16px);\n}\n@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0) {\n .ion-padding-end {\n padding-right: unset;\n -webkit-padding-end: var(--ion-padding, 16px);\n padding-inline-end: var(--ion-padding, 16px);\n }\n}\n.ion-padding-bottom {\n --padding-bottom: var(--ion-padding, 16px);\n padding-bottom: var(--ion-padding, 16px);\n}\n.ion-padding-vertical {\n --padding-top: var(--ion-padding, 16px);\n --padding-bottom: var(--ion-padding, 16px);\n padding-top: var(--ion-padding, 16px);\n padding-bottom: var(--ion-padding, 16px);\n}\n.ion-padding-horizontal {\n --padding-start: var(--ion-padding, 16px);\n --padding-end: var(--ion-padding, 16px);\n padding-left: var(--ion-padding, 16px);\n padding-right: var(--ion-padding, 16px);\n}\n@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0) {\n .ion-padding-horizontal {\n padding-left: unset;\n padding-right: unset;\n -webkit-padding-start: var(--ion-padding, 16px);\n padding-inline-start: var(--ion-padding, 16px);\n -webkit-padding-end: var(--ion-padding, 16px);\n padding-inline-end: var(--ion-padding, 16px);\n }\n}\n.ion-no-margin {\n --margin-start: 0;\n --margin-end: 0;\n --margin-top: 0;\n --margin-bottom: 0;\n margin-left: 0;\n margin-right: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n.ion-margin {\n --margin-start: var(--ion-margin, 16px);\n --margin-end: var(--ion-margin, 16px);\n --margin-top: var(--ion-margin, 16px);\n --margin-bottom: var(--ion-margin, 16px);\n margin-left: var(--ion-margin, 16px);\n margin-right: var(--ion-margin, 16px);\n margin-top: var(--ion-margin, 16px);\n margin-bottom: var(--ion-margin, 16px);\n}\n@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0) {\n .ion-margin {\n margin-left: unset;\n margin-right: unset;\n -webkit-margin-start: var(--ion-margin, 16px);\n margin-inline-start: var(--ion-margin, 16px);\n -webkit-margin-end: var(--ion-margin, 16px);\n margin-inline-end: var(--ion-margin, 16px);\n }\n}\n.ion-margin-top {\n --margin-top: var(--ion-margin, 16px);\n margin-top: var(--ion-margin, 16px);\n}\n.ion-margin-start {\n --margin-start: var(--ion-margin, 16px);\n margin-left: var(--ion-margin, 16px);\n}\n@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0) {\n .ion-margin-start {\n margin-left: unset;\n -webkit-margin-start: var(--ion-margin, 16px);\n margin-inline-start: var(--ion-margin, 16px);\n }\n}\n.ion-margin-end {\n --margin-end: var(--ion-margin, 16px);\n margin-right: var(--ion-margin, 16px);\n}\n@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0) {\n .ion-margin-end {\n margin-right: unset;\n -webkit-margin-end: var(--ion-margin, 16px);\n margin-inline-end: var(--ion-margin, 16px);\n }\n}\n.ion-margin-bottom {\n --margin-bottom: var(--ion-margin, 16px);\n margin-bottom: var(--ion-margin, 16px);\n}\n.ion-margin-vertical {\n --margin-top: var(--ion-margin, 16px);\n --margin-bottom: var(--ion-margin, 16px);\n margin-top: var(--ion-margin, 16px);\n margin-bottom: var(--ion-margin, 16px);\n}\n.ion-margin-horizontal {\n --margin-start: var(--ion-margin, 16px);\n --margin-end: var(--ion-margin, 16px);\n margin-left: var(--ion-margin, 16px);\n margin-right: var(--ion-margin, 16px);\n}\n@supports ((-webkit-margin-start: 0) or (margin-inline-start: 0)) or (-webkit-margin-start: 0) {\n .ion-margin-horizontal {\n margin-left: unset;\n margin-right: unset;\n -webkit-margin-start: var(--ion-margin, 16px);\n margin-inline-start: var(--ion-margin, 16px);\n -webkit-margin-end: var(--ion-margin, 16px);\n margin-inline-end: var(--ion-margin, 16px);\n }\n}\n.ion-float-left {\n float: left !important;\n}\n.ion-float-right {\n float: right !important;\n}\n.ion-float-start {\n float: left !important;\n}\n[dir=rtl] .ion-float-start, :host-context([dir=rtl]) .ion-float-start {\n float: right !important;\n}\n.ion-float-end {\n float: right !important;\n}\n[dir=rtl] .ion-float-end, :host-context([dir=rtl]) .ion-float-end {\n float: left !important;\n}\n@media (min-width: 576px) {\n .ion-float-sm-left {\n float: left !important;\n }\n\n .ion-float-sm-right {\n float: right !important;\n }\n\n .ion-float-sm-start {\n float: left !important;\n }\n [dir=rtl] .ion-float-sm-start, :host-context([dir=rtl]) .ion-float-sm-start {\n float: right !important;\n }\n\n .ion-float-sm-end {\n float: right !important;\n }\n [dir=rtl] .ion-float-sm-end, :host-context([dir=rtl]) .ion-float-sm-end {\n float: left !important;\n }\n}\n@media (min-width: 768px) {\n .ion-float-md-left {\n float: left !important;\n }\n\n .ion-float-md-right {\n float: right !important;\n }\n\n .ion-float-md-start {\n float: left !important;\n }\n [dir=rtl] .ion-float-md-start, :host-context([dir=rtl]) .ion-float-md-start {\n float: right !important;\n }\n\n .ion-float-md-end {\n float: right !important;\n }\n [dir=rtl] .ion-float-md-end, :host-context([dir=rtl]) .ion-float-md-end {\n float: left !important;\n }\n}\n@media (min-width: 992px) {\n .ion-float-lg-left {\n float: left !important;\n }\n\n .ion-float-lg-right {\n float: right !important;\n }\n\n .ion-float-lg-start {\n float: left !important;\n }\n [dir=rtl] .ion-float-lg-start, :host-context([dir=rtl]) .ion-float-lg-start {\n float: right !important;\n }\n\n .ion-float-lg-end {\n float: right !important;\n }\n [dir=rtl] .ion-float-lg-end, :host-context([dir=rtl]) .ion-float-lg-end {\n float: left !important;\n }\n}\n@media (min-width: 1200px) {\n .ion-float-xl-left {\n float: left !important;\n }\n\n .ion-float-xl-right {\n float: right !important;\n }\n\n .ion-float-xl-start {\n float: left !important;\n }\n [dir=rtl] .ion-float-xl-start, :host-context([dir=rtl]) .ion-float-xl-start {\n float: right !important;\n }\n\n .ion-float-xl-end {\n float: right !important;\n }\n [dir=rtl] .ion-float-xl-end, :host-context([dir=rtl]) .ion-float-xl-end {\n float: left !important;\n }\n}\n.ion-text-center {\n text-align: center !important;\n}\n.ion-text-justify {\n text-align: justify !important;\n}\n.ion-text-start {\n text-align: start !important;\n}\n.ion-text-end {\n text-align: end !important;\n}\n.ion-text-left {\n text-align: left !important;\n}\n.ion-text-right {\n text-align: right !important;\n}\n.ion-text-nowrap {\n white-space: nowrap !important;\n}\n.ion-text-wrap {\n white-space: normal !important;\n}\n@media (min-width: 576px) {\n .ion-text-sm-center {\n text-align: center !important;\n }\n\n .ion-text-sm-justify {\n text-align: justify !important;\n }\n\n .ion-text-sm-start {\n text-align: start !important;\n }\n\n .ion-text-sm-end {\n text-align: end !important;\n }\n\n .ion-text-sm-left {\n text-align: left !important;\n }\n\n .ion-text-sm-right {\n text-align: right !important;\n }\n\n .ion-text-sm-nowrap {\n white-space: nowrap !important;\n }\n\n .ion-text-sm-wrap {\n white-space: normal !important;\n }\n}\n@media (min-width: 768px) {\n .ion-text-md-center {\n text-align: center !important;\n }\n\n .ion-text-md-justify {\n text-align: justify !important;\n }\n\n .ion-text-md-start {\n text-align: start !important;\n }\n\n .ion-text-md-end {\n text-align: end !important;\n }\n\n .ion-text-md-left {\n text-align: left !important;\n }\n\n .ion-text-md-right {\n text-align: right !important;\n }\n\n .ion-text-md-nowrap {\n white-space: nowrap !important;\n }\n\n .ion-text-md-wrap {\n white-space: normal !important;\n }\n}\n@media (min-width: 992px) {\n .ion-text-lg-center {\n text-align: center !important;\n }\n\n .ion-text-lg-justify {\n text-align: justify !important;\n }\n\n .ion-text-lg-start {\n text-align: start !important;\n }\n\n .ion-text-lg-end {\n text-align: end !important;\n }\n\n .ion-text-lg-left {\n text-align: left !important;\n }\n\n .ion-text-lg-right {\n text-align: right !important;\n }\n\n .ion-text-lg-nowrap {\n white-space: nowrap !important;\n }\n\n .ion-text-lg-wrap {\n white-space: normal !important;\n }\n}\n@media (min-width: 1200px) {\n .ion-text-xl-center {\n text-align: center !important;\n }\n\n .ion-text-xl-justify {\n text-align: justify !important;\n }\n\n .ion-text-xl-start {\n text-align: start !important;\n }\n\n .ion-text-xl-end {\n text-align: end !important;\n }\n\n .ion-text-xl-left {\n text-align: left !important;\n }\n\n .ion-text-xl-right {\n text-align: right !important;\n }\n\n .ion-text-xl-nowrap {\n white-space: nowrap !important;\n }\n\n .ion-text-xl-wrap {\n white-space: normal !important;\n }\n}\n.ion-text-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n}\n.ion-text-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n}\n.ion-text-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n}\n@media (min-width: 576px) {\n .ion-text-sm-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n }\n\n .ion-text-sm-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n }\n\n .ion-text-sm-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n }\n}\n@media (min-width: 768px) {\n .ion-text-md-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n }\n\n .ion-text-md-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n }\n\n .ion-text-md-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n }\n}\n@media (min-width: 992px) {\n .ion-text-lg-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n }\n\n .ion-text-lg-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n }\n\n .ion-text-lg-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n }\n}\n@media (min-width: 1200px) {\n .ion-text-xl-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n }\n\n .ion-text-xl-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n }\n\n .ion-text-xl-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n }\n}\n.ion-align-self-start {\n align-self: flex-start !important;\n}\n.ion-align-self-end {\n align-self: flex-end !important;\n}\n.ion-align-self-center {\n align-self: center !important;\n}\n.ion-align-self-stretch {\n align-self: stretch !important;\n}\n.ion-align-self-baseline {\n align-self: baseline !important;\n}\n.ion-align-self-auto {\n align-self: auto !important;\n}\n.ion-wrap {\n flex-wrap: wrap !important;\n}\n.ion-nowrap {\n flex-wrap: nowrap !important;\n}\n.ion-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n.ion-justify-content-start {\n justify-content: flex-start !important;\n}\n.ion-justify-content-center {\n justify-content: center !important;\n}\n.ion-justify-content-end {\n justify-content: flex-end !important;\n}\n.ion-justify-content-around {\n justify-content: space-around !important;\n}\n.ion-justify-content-between {\n justify-content: space-between !important;\n}\n.ion-justify-content-evenly {\n justify-content: space-evenly !important;\n}\n.ion-align-items-start {\n align-items: flex-start !important;\n}\n.ion-align-items-center {\n align-items: center !important;\n}\n.ion-align-items-end {\n align-items: flex-end !important;\n}\n.ion-align-items-stretch {\n align-items: stretch !important;\n}\n.ion-align-items-baseline {\n align-items: baseline !important;\n}", "",{"version":3,"sources":["C:\\Users\\tiago.kayaya\\development\\gabinete-digital/src\\global.scss","../node_modules/@ionic/angular/src/css/core.scss","../node_modules/@ionic/angular/css/core.css","../node_modules/@ionic/angular/src/themes/ionic.mixins.scss","../node_modules/@ionic/angular/src/themes/ionic.globals.scss","../node_modules/@ionic/angular/src/components/menu/menu.ios.vars.scss","../node_modules/@ionic/angular/src/components/menu/menu.md.vars.scss","../node_modules/@ionic/angular/src/css/normalize.scss","../node_modules/@ionic/angular/css/normalize.css","../node_modules/@ionic/angular/src/css/structure.scss","../node_modules/@ionic/angular/css/structure.css","../node_modules/@ionic/angular/src/css/typography.scss","../node_modules/@ionic/angular/css/typography.css","../node_modules/@ionic/angular/src/css/display.scss","../node_modules/@ionic/angular/css/display.css","../node_modules/@ionic/angular/src/css/padding.scss","../node_modules/@ionic/angular/css/padding.css","../node_modules/@ionic/angular/src/css/float-elements.scss","../node_modules/@ionic/angular/css/float-elements.css","../node_modules/@ionic/angular/src/css/text-alignment.scss","../node_modules/@ionic/angular/css/text-alignment.css","../node_modules/@ionic/angular/src/css/text-transformation.scss","../node_modules/@ionic/angular/css/text-transformation.css","../node_modules/@ionic/angular/src/css/flex-utils.scss","../node_modules/@ionic/angular/css/flex-utils.css"],"names":[],"mappings":"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AAA;ECyBJ;AACF;AXkGI;EUrHA;IACE,wBAAA;ECsBJ;AACF;Ad/BA,iDAAA;AeJA;EACE,kBAAA;EACA,gBAAA;EACA,gBAAA;EACA,mBAAA;EZqME,eYnMe;EZoMf,gBYpMe;EZwOjB,cYxOiB;EZyOjB,iBYzOiB;ACbnB;ADgBA;EACE,yCAAA;EACA,uCAAA;EACA,uCAAA;EACA,0CAAA;EZgME,sCYnNM;EZoNN,uCYpNM;EZoPR,qCYpPQ;EZqPR,wCYrPQ;ACUV;Ab6MM;EACE;IAEI,mBAAA;IAGA,oBAAA;IAGF,+CYhOA;IZiOA,8CYjOA;IZkOA,6CYlOA;IZmOA,4CYnOA;ECmBR;AACF;ADIA;EACE,uCAAA;EZ2NA,qCYpPQ;ACyBV;ADKA;EACE,yCAAA;EZoLE,sCYnNM;AC6BV;Ab0LM;EACE;IAEI,mBAAA;IAMF,+CYhOA;IZiOA,8CYjOA;ECmCR;AACF;ADAA;EACE,uCAAA;EZ+KE,uCYpNM;ACyCV;Ab8KM;EACE;IAKI,oBAAA;IAKF,6CYlOA;IZmOA,4CYnOA;EC+CR;AACF;ADNA;EACE,0CAAA;EZ0MA,wCYrPQ;ACqDV;ADLA;EACE,uCAAA;EACA,0CAAA;EZkMA,qCYpPQ;EZqPR,wCYrPQ;AC2DV;ADJA;EACE,yCAAA;EACA,uCAAA;EZ0JE,sCYnNM;EZoNN,uCYpNM;ACiEV;AbsJM;EACE;IAEI,mBAAA;IAGA,oBAAA;IAGF,+CYhOA;IZiOA,8CYjOA;IZkOA,6CYlOA;IZmOA,4CYnOA;EC0ER;AACF;ADTA;EACE,iBAAA;EACA,eAAA;EACA,eAAA;EACA,kBAAA;EZyIE,cYvIc;EZwId,eYxIc;EZ4KhB,aY5KgB;EZ6KhB,gBY7KgB;ACclB;ADXA;EACE,uCAAA;EACA,qCAAA;EACA,qCAAA;EACA,wCAAA;EZoIE,oCYlNK;EZmNL,qCYnNK;EZmPP,mCYnPO;EZoPP,sCYpPO;ACgGT;AbsHM;EACE;IAEI,kBAAA;IAGA,mBAAA;IAGF,6CY/ND;IZgOC,4CYhOD;IZiOC,2CYjOD;IZkOC,0CYlOD;ECyGP;AACF;ADvBA;EACE,qCAAA;EZ+JA,mCYnPO;AC+GT;ADtBA;EACE,uCAAA;EZwHE,oCYlNK;ACmHT;AbmGM;EACE;IAEI,kBAAA;IAMF,6CY/ND;IZgOC,4CYhOD;ECyHP;AACF;AD3BA;EACE,qCAAA;EZmHE,qCYnNK;AC+HT;AbuFM;EACE;IAKI,mBAAA;IAKF,2CYjOD;IZkOC,0CYlOD;ECqIP;AACF;ADjCA;EACE,wCAAA;EZ8IA,sCYpPO;AC2IT;ADhCA;EACE,qCAAA;EACA,wCAAA;EZsIA,mCYnPO;EZoPP,sCYpPO;ACiJT;AD/BA;EACE,uCAAA;EACA,qCAAA;EZ8FE,oCYlNK;EZmNL,qCYnNK;ACuJT;Ab+DM;EACE;IAEI,kBAAA;IAGA,mBAAA;IAGF,6CY/ND;IZgOC,4CYhOD;IZiOC,2CYjOD;IZkOC,0CYlOD;ECgKP;AACF;AC9JI;Ed0YE,sBAAA;AetZN;ADgBI;EdsYE,uBAAA;AelZN;ADgBI;EdoXE,sBAAA;AehYN;AfmKW;EAgOL,uBAAA;AehYN;ADaI;EduXE,uBAAA;AehYN;Af4JW;EAuOL,sBAAA;AehYN;AfmFI;EczFA;Id0YE,sBAAA;Ee/XJ;;EDPE;IdsYE,uBAAA;Ee3XJ;;EDPE;IdoXE,sBAAA;EezWJ;Ef4IS;IAgOL,uBAAA;EezWJ;;EDVE;IduXE,uBAAA;EezWJ;EfqIS;IAuOL,sBAAA;EezWJ;AACF;Af2DI;EczFA;Id0YE,sBAAA;EexWJ;;ED9BE;IdsYE,uBAAA;EepWJ;;ED9BE;IdoXE,sBAAA;EelVJ;EfqHS;IAgOL,uBAAA;EelVJ;;EDjCE;IduXE,uBAAA;EelVJ;Ef8GS;IAuOL,sBAAA;EelVJ;AACF;AfoCI;EczFA;Id0YE,sBAAA;EejVJ;;EDrDE;IdsYE,uBAAA;Ee7UJ;;EDrDE;IdoXE,sBAAA;Ee3TJ;Ef8FS;IAgOL,uBAAA;Ee3TJ;;EDxDE;IduXE,uBAAA;Ee3TJ;EfuFS;IAuOL,sBAAA;Ee3TJ;AACF;AfaI;EczFA;Id0YE,sBAAA;Ee1TJ;;ED5EE;IdsYE,uBAAA;EetTJ;;ED5EE;IdoXE,sBAAA;EepSJ;EfuES;IAgOL,uBAAA;EepSJ;;ED/EE;IduXE,uBAAA;EepSJ;EfgES;IAuOL,sBAAA;EepSJ;AACF;ACnGI;EACE,6BAAA;ACbN;ADgBI;EACE,8BAAA;ACbN;ADgBI;EACE,4BAAA;ACbN;ADgBI;EACE,0BAAA;ACbN;ADgBI;EACE,2BAAA;ACbN;ADgBI;EACE,4BAAA;ACbN;ADgBI;EACE,8BAAA;ACbN;ADgBI;EACE,8BAAA;ACbN;AjByEI;EgBzFA;IACE,6BAAA;ECoBJ;;EDjBE;IACE,8BAAA;ECoBJ;;EDjBE;IACE,4BAAA;ECoBJ;;EDjBE;IACE,0BAAA;ECoBJ;;EDjBE;IACE,2BAAA;ECoBJ;;EDjBE;IACE,4BAAA;ECoBJ;;EDjBE;IACE,8BAAA;ECoBJ;;EDjBE;IACE,8BAAA;ECoBJ;AACF;AjBuCI;EgBzFA;IACE,6BAAA;ECqDJ;;EDlDE;IACE,8BAAA;ECqDJ;;EDlDE;IACE,4BAAA;ECqDJ;;EDlDE;IACE,0BAAA;ECqDJ;;EDlDE;IACE,2BAAA;ECqDJ;;EDlDE;IACE,4BAAA;ECqDJ;;EDlDE;IACE,8BAAA;ECqDJ;;EDlDE;IACE,8BAAA;ECqDJ;AACF;AjBMI;EgBzFA;IACE,6BAAA;ECsFJ;;EDnFE;IACE,8BAAA;ECsFJ;;EDnFE;IACE,4BAAA;ECsFJ;;EDnFE;IACE,0BAAA;ECsFJ;;EDnFE;IACE,2BAAA;ECsFJ;;EDnFE;IACE,4BAAA;ECsFJ;;EDnFE;IACE,8BAAA;ECsFJ;;EDnFE;IACE,8BAAA;ECsFJ;AACF;AjB3BI;EgBzFA;IACE,6BAAA;ECuHJ;;EDpHE;IACE,8BAAA;ECuHJ;;EDpHE;IACE,4BAAA;ECuHJ;;EDpHE;IACE,0BAAA;ECuHJ;;EDpHE;IACE,2BAAA;ECuHJ;;EDpHE;IACE,4BAAA;ECuHJ;;EDpHE;IACE,8BAAA;ECuHJ;;EDpHE;IACE,8BAAA;ECuHJ;AACF;ACrJI;EACE,yDAAA;EACA,oCAAA;ACbN;ADgBI;EACE,yDAAA;EACA,oCAAA;ACbN;ADgBI;EACE,yDAAA;EACA,qCAAA;ACbN;AnB0FI;EkBzFA;IACE,yDAAA;IACA,oCAAA;ECGJ;;EDAE;IACE,yDAAA;IACA,oCAAA;ECGJ;;EDAE;IACE,yDAAA;IACA,qCAAA;ECGJ;AACF;AnByEI;EkBzFA;IACE,yDAAA;IACA,oCAAA;ECmBJ;;EDhBE;IACE,yDAAA;IACA,oCAAA;ECmBJ;;EDhBE;IACE,yDAAA;IACA,qCAAA;ECmBJ;AACF;AnByDI;EkBzFA;IACE,yDAAA;IACA,oCAAA;ECmCJ;;EDhCE;IACE,yDAAA;IACA,oCAAA;ECmCJ;;EDhCE;IACE,yDAAA;IACA,qCAAA;ECmCJ;AACF;AnByCI;EkBzFA;IACE,yDAAA;IACA,oCAAA;ECmDJ;;EDhDE;IACE,yDAAA;IACA,oCAAA;ECmDJ;;EDhDE;IACE,yDAAA;IACA,qCAAA;ECmDJ;AACF;ACtEA;EACE,iCAAA;ACPF;ADUA;EACE,+BAAA;ACPF;ADUA;EACE,6BAAA;ACPF;ADUA;EACE,8BAAA;ACPF;ADUA;EACE,+BAAA;ACPF;ADUA;EACE,2BAAA;ACPF;ADcA;EACE,0BAAA;ACXF;ADcA;EACE,4BAAA;ACXF;ADcA;EACE,kCAAA;ACXF;ADkBA;EACE,sCAAA;ACfF;ADkBA;EACE,kCAAA;ACfF;ADkBA;EACE,oCAAA;ACfF;ADkBA;EACE,wCAAA;ACfF;ADkBA;EACE,yCAAA;ACfF;ADkBA;EACE,wCAAA;ACfF;ADsBA;EACE,kCAAA;ACnBF;ADsBA;EACE,8BAAA;ACnBF;ADsBA;EACE,gCAAA;ACnBF;ADsBA;EACE,+BAAA;ACnBF;ADsBA;EACE,gCAAA;ACnBF","file":"global.scss","sourcesContent":["/*\r\n * App Global CSS\r\n * ----------------------------------------------------------------------------\r\n * Put style rules here that you want to apply globally. These styles are for\r\n * the entire app and not just one component. Additionally, this file can be\r\n * used as an entry point to import other CSS/Sass files to be included in the\r\n * output CSS.\r\n * For more information on global stylesheets, visit the documentation:\r\n * https://ionicframework.com/docs/layout/global-stylesheets\r\n */\r\n\r\n/* Core CSS required for Ionic components to work properly */\r\n@import \"~@ionic/angular/css/core.css\";\r\n\r\n/* Basic CSS for apps built with Ionic */\r\n@import \"~@ionic/angular/css/normalize.css\";\r\n@import \"~@ionic/angular/css/structure.css\";\r\n@import \"~@ionic/angular/css/typography.css\";\r\n@import '~@ionic/angular/css/display.css';\r\n\r\n/* Optional CSS utils that can be commented out */\r\n@import \"~@ionic/angular/css/padding.css\";\r\n@import \"~@ionic/angular/css/float-elements.css\";\r\n@import \"~@ionic/angular/css/text-alignment.css\";\r\n@import \"~@ionic/angular/css/text-transformation.css\";\r\n@import \"~@ionic/angular/css/flex-utils.css\";\r\n",null,"html.ios {\n --ion-default-font: -apple-system, BlinkMacSystemFont, \"Helvetica Neue\", \"Roboto\", sans-serif;\n}\n\nhtml.md {\n --ion-default-font: \"Roboto\", \"Helvetica Neue\", sans-serif;\n}\n\nhtml {\n --ion-font-family: var(--ion-default-font);\n}\n\nbody {\n background: var(--ion-background-color);\n}\n\nbody.backdrop-no-scroll {\n overflow: hidden;\n}\n\nhtml.ios ion-modal.modal-card .ion-page > ion-header > ion-toolbar:first-of-type {\n padding-top: 0px;\n}\n\nhtml.ios ion-modal .ion-page {\n border-radius: inherit;\n}\n\n.ion-color-primary {\n --ion-color-base: var(--ion-color-primary, #3880ff) !important;\n --ion-color-base-rgb: var(--ion-color-primary-rgb, 56, 128, 255) !important;\n --ion-color-contrast: var(--ion-color-primary-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-primary-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-primary-shade, #3171e0) !important;\n --ion-color-tint: var(--ion-color-primary-tint, #4c8dff) !important;\n}\n\n.ion-color-secondary {\n --ion-color-base: var(--ion-color-secondary, #3dc2ff) !important;\n --ion-color-base-rgb: var(--ion-color-secondary-rgb, 61, 194, 255) !important;\n --ion-color-contrast: var(--ion-color-secondary-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-secondary-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-secondary-shade, #36abe0) !important;\n --ion-color-tint: var(--ion-color-secondary-tint, #50c8ff) !important;\n}\n\n.ion-color-tertiary {\n --ion-color-base: var(--ion-color-tertiary, #5260ff) !important;\n --ion-color-base-rgb: var(--ion-color-tertiary-rgb, 82, 96, 255) !important;\n --ion-color-contrast: var(--ion-color-tertiary-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-tertiary-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-tertiary-shade, #4854e0) !important;\n --ion-color-tint: var(--ion-color-tertiary-tint, #6370ff) !important;\n}\n\n.ion-color-success {\n --ion-color-base: var(--ion-color-success, #2dd36f) !important;\n --ion-color-base-rgb: var(--ion-color-success-rgb, 45, 211, 111) !important;\n --ion-color-contrast: var(--ion-color-success-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-success-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-success-shade, #28ba62) !important;\n --ion-color-tint: var(--ion-color-success-tint, #42d77d) !important;\n}\n\n.ion-color-warning {\n --ion-color-base: var(--ion-color-warning, #ffc409) !important;\n --ion-color-base-rgb: var(--ion-color-warning-rgb, 255, 196, 9) !important;\n --ion-color-contrast: var(--ion-color-warning-contrast, #000) !important;\n --ion-color-contrast-rgb: var(--ion-color-warning-contrast-rgb, 0, 0, 0) !important;\n --ion-color-shade: var(--ion-color-warning-shade, #e0ac08) !important;\n --ion-color-tint: var(--ion-color-warning-tint, #ffca22) !important;\n}\n\n.ion-color-danger {\n --ion-color-base: var(--ion-color-danger, #eb445a) !important;\n --ion-color-base-rgb: var(--ion-color-danger-rgb, 235, 68, 90) !important;\n --ion-color-contrast: var(--ion-color-danger-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-danger-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-danger-shade, #cf3c4f) !important;\n --ion-color-tint: var(--ion-color-danger-tint, #ed576b) !important;\n}\n\n.ion-color-light {\n --ion-color-base: var(--ion-color-light, #f4f5f8) !important;\n --ion-color-base-rgb: var(--ion-color-light-rgb, 244, 245, 248) !important;\n --ion-color-contrast: var(--ion-color-light-contrast, #000) !important;\n --ion-color-contrast-rgb: var(--ion-color-light-contrast-rgb, 0, 0, 0) !important;\n --ion-color-shade: var(--ion-color-light-shade, #d7d8da) !important;\n --ion-color-tint: var(--ion-color-light-tint, #f5f6f9) !important;\n}\n\n.ion-color-medium {\n --ion-color-base: var(--ion-color-medium, #92949c) !important;\n --ion-color-base-rgb: var(--ion-color-medium-rgb, 146, 148, 156) !important;\n --ion-color-contrast: var(--ion-color-medium-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-medium-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-medium-shade, #808289) !important;\n --ion-color-tint: var(--ion-color-medium-tint, #9d9fa6) !important;\n}\n\n.ion-color-dark {\n --ion-color-base: var(--ion-color-dark, #222428) !important;\n --ion-color-base-rgb: var(--ion-color-dark-rgb, 34, 36, 40) !important;\n --ion-color-contrast: var(--ion-color-dark-contrast, #fff) !important;\n --ion-color-contrast-rgb: var(--ion-color-dark-contrast-rgb, 255, 255, 255) !important;\n --ion-color-shade: var(--ion-color-dark-shade, #1e2023) !important;\n --ion-color-tint: var(--ion-color-dark-tint, #383a3e) !important;\n}\n\n.ion-page {\n left: 0;\n right: 0;\n top: 0;\n bottom: 0;\n display: flex;\n position: absolute;\n flex-direction: column;\n justify-content: space-between;\n contain: layout size style;\n overflow: hidden;\n z-index: 0;\n}\n\n.split-pane-visible > .ion-page.split-pane-main {\n position: relative;\n}\n\nion-route,\nion-route-redirect,\nion-router,\nion-select-option,\nion-nav-controller,\nion-menu-controller,\nion-action-sheet-controller,\nion-alert-controller,\nion-loading-controller,\nion-modal-controller,\nion-picker-controller,\nion-popover-controller,\nion-toast-controller,\n.ion-page-hidden,\n[hidden] {\n /* stylelint-disable-next-line declaration-no-important */\n display: none !important;\n}\n\n.ion-page-invisible {\n opacity: 0;\n}\n\n.can-go-back > ion-header ion-back-button {\n display: block;\n}\n\nhtml.plt-ios.plt-hybrid, html.plt-ios.plt-pwa {\n --ion-statusbar-padding: 20px;\n}\n\n@supports (padding-top: 20px) {\n html {\n --ion-safe-area-top: var(--ion-statusbar-padding);\n }\n}\n@supports (padding-top: constant(safe-area-inset-top)) {\n html {\n --ion-safe-area-top: constant(safe-area-inset-top);\n --ion-safe-area-bottom: constant(safe-area-inset-bottom);\n --ion-safe-area-left: constant(safe-area-inset-left);\n --ion-safe-area-right: constant(safe-area-inset-right);\n }\n}\n@supports (padding-top: env(safe-area-inset-top)) {\n html {\n --ion-safe-area-top: env(safe-area-inset-top);\n --ion-safe-area-bottom: env(safe-area-inset-bottom);\n --ion-safe-area-left: env(safe-area-inset-left);\n --ion-safe-area-right: env(safe-area-inset-right);\n }\n}\nion-card.ion-color .ion-inherit-color,\nion-card-header.ion-color .ion-inherit-color {\n color: inherit;\n}\n\n.menu-content {\n transform: translate3d(0, 0, 0);\n}\n\n.menu-content-open {\n cursor: pointer;\n touch-action: manipulation;\n pointer-events: none;\n}\n\n.ios .menu-content-reveal {\n box-shadow: -8px 0 42px rgba(0, 0, 0, 0.08);\n}\n\n[dir=rtl].ios .menu-content-reveal {\n box-shadow: 8px 0 42px rgba(0, 0, 0, 0.08);\n}\n\n.md .menu-content-reveal {\n box-shadow: 4px 0px 16px rgba(0, 0, 0, 0.18);\n}\n\n.md .menu-content-push {\n box-shadow: 4px 0px 16px rgba(0, 0, 0, 0.18);\n}\n\n/*# sourceMappingURL=core.css.map */\n",null,null,null,null,null,"audio,\ncanvas,\nprogress,\nvideo {\n vertical-align: baseline;\n}\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\nb,\nstrong {\n font-weight: bold;\n}\n\nimg {\n max-width: 100%;\n border: 0;\n}\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\nfigure {\n margin: 1em 40px;\n}\n\nhr {\n height: 1px;\n border-width: 0;\n box-sizing: content-box;\n}\n\npre {\n overflow: auto;\n}\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace;\n font-size: 1em;\n}\n\nlabel,\ninput,\nselect,\ntextarea {\n font-family: inherit;\n line-height: normal;\n}\n\ntextarea {\n overflow: auto;\n height: auto;\n font: inherit;\n color: inherit;\n}\n\ntextarea::placeholder {\n padding-left: 2px;\n}\n\nform,\ninput,\noptgroup,\nselect {\n margin: 0;\n font: inherit;\n color: inherit;\n}\n\nhtml input[type=button],\ninput[type=reset],\ninput[type=submit] {\n cursor: pointer;\n -webkit-appearance: button;\n}\n\na,\na div,\na span,\na ion-icon,\na ion-label,\nbutton,\nbutton div,\nbutton span,\nbutton ion-icon,\nbutton ion-label,\n.ion-tappable,\n[tappable],\n[tappable] div,\n[tappable] span,\n[tappable] ion-icon,\n[tappable] ion-label,\ninput,\ntextarea {\n touch-action: manipulation;\n}\n\na ion-label,\nbutton ion-label {\n pointer-events: none;\n}\n\nbutton {\n border: 0;\n border-radius: 0;\n font-family: inherit;\n font-style: inherit;\n font-variant: inherit;\n line-height: 1;\n text-transform: none;\n cursor: pointer;\n -webkit-appearance: button;\n}\n\n[tappable] {\n cursor: pointer;\n}\n\na[disabled],\nbutton[disabled],\nhtml input[disabled] {\n cursor: default;\n}\n\nbutton::-moz-focus-inner,\ninput::-moz-focus-inner {\n padding: 0;\n border: 0;\n}\n\ninput[type=checkbox],\ninput[type=radio] {\n padding: 0;\n box-sizing: border-box;\n}\n\ninput[type=number]::-webkit-inner-spin-button,\ninput[type=number]::-webkit-outer-spin-button {\n height: auto;\n}\n\ninput[type=search]::-webkit-search-cancel-button,\ninput[type=search]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\ntable {\n border-collapse: collapse;\n border-spacing: 0;\n}\n\ntd,\nth {\n padding: 0;\n}\n\n/*# sourceMappingURL=normalize.css.map */\n",null,"* {\n box-sizing: border-box;\n -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n -webkit-tap-highlight-color: transparent;\n -webkit-touch-callout: none;\n}\n\nhtml {\n width: 100%;\n height: 100%;\n text-size-adjust: 100%;\n}\n\nhtml:not(.hydrated) body {\n display: none;\n}\n\nhtml.plt-pwa {\n height: 100vh;\n}\n\nbody {\n -moz-osx-font-smoothing: grayscale;\n -webkit-font-smoothing: antialiased;\n margin-left: 0;\n margin-right: 0;\n margin-top: 0;\n margin-bottom: 0;\n padding-left: 0;\n padding-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n position: fixed;\n width: 100%;\n max-width: 100%;\n height: 100%;\n max-height: 100%;\n text-rendering: optimizeLegibility;\n overflow: hidden;\n touch-action: manipulation;\n -webkit-user-drag: none;\n -ms-content-zooming: none;\n word-wrap: break-word;\n overscroll-behavior-y: none;\n text-size-adjust: none;\n}\n\n/*# sourceMappingURL=structure.css.map */\n",null,"html {\n font-family: var(--ion-font-family);\n}\n\na {\n background-color: transparent;\n color: var(--ion-color-primary, #3880ff);\n}\n\nh1,\nh2,\nh3,\nh4,\nh5,\nh6 {\n margin-top: 16px;\n margin-bottom: 10px;\n font-weight: 500;\n line-height: 1.2;\n}\nh1 {\n margin-top: 20px;\n font-size: 26px;\n}\nh2 {\n margin-top: 18px;\n font-size: 24px;\n}\nh3 {\n font-size: 22px;\n}\n\nh4 {\n font-size: 20px;\n}\n\nh5 {\n font-size: 18px;\n}\n\nh6 {\n font-size: 16px;\n}\n\nsmall {\n font-size: 75%;\n}\n\nsub,\nsup {\n position: relative;\n font-size: 75%;\n line-height: 0;\n vertical-align: baseline;\n}\n\nsup {\n top: -0.5em;\n}\n\nsub {\n bottom: -0.25em;\n}\n\n/*# sourceMappingURL=typography.css.map */\n",null,".ion-hide {\n display: none !important;\n}\n\n.ion-hide-up {\n display: none !important;\n}\n\n.ion-hide-down {\n display: none !important;\n}\n\n@media (min-width: 576px) {\n .ion-hide-sm-up {\n display: none !important;\n }\n}\n@media (max-width: 575.98px) {\n .ion-hide-sm-down {\n display: none !important;\n }\n}\n@media (min-width: 768px) {\n .ion-hide-md-up {\n display: none !important;\n }\n}\n@media (max-width: 767.98px) {\n .ion-hide-md-down {\n display: none !important;\n }\n}\n@media (min-width: 992px) {\n .ion-hide-lg-up {\n display: none !important;\n }\n}\n@media (max-width: 991.98px) {\n .ion-hide-lg-down {\n display: none !important;\n }\n}\n@media (min-width: 1200px) {\n .ion-hide-xl-up {\n display: none !important;\n }\n}\n@media (max-width: 1199.98px) {\n .ion-hide-xl-down {\n display: none !important;\n }\n}\n\n/*# sourceMappingURL=display.css.map */\n",null,".ion-no-padding {\n --padding-start: 0;\n --padding-end: 0;\n --padding-top: 0;\n --padding-bottom: 0;\n padding-left: 0;\n padding-right: 0;\n padding-top: 0;\n padding-bottom: 0;\n}\n\n.ion-padding {\n --padding-start: var(--ion-padding, 16px);\n --padding-end: var(--ion-padding, 16px);\n --padding-top: var(--ion-padding, 16px);\n --padding-bottom: var(--ion-padding, 16px);\n padding-left: var(--ion-padding, 16px);\n padding-right: var(--ion-padding, 16px);\n padding-top: var(--ion-padding, 16px);\n padding-bottom: var(--ion-padding, 16px);\n}\n@supports (margin-inline-start: 0) or (-webkit-margin-start: 0) {\n .ion-padding {\n padding-left: unset;\n padding-right: unset;\n -webkit-padding-start: var(--ion-padding, 16px);\n padding-inline-start: var(--ion-padding, 16px);\n -webkit-padding-end: var(--ion-padding, 16px);\n padding-inline-end: var(--ion-padding, 16px);\n }\n}\n\n.ion-padding-top {\n --padding-top: var(--ion-padding, 16px);\n padding-top: var(--ion-padding, 16px);\n}\n.ion-padding-start {\n --padding-start: var(--ion-padding, 16px);\n padding-left: var(--ion-padding, 16px);\n}\n@supports (margin-inline-start: 0) or (-webkit-margin-start: 0) {\n .ion-padding-start {\n padding-left: unset;\n -webkit-padding-start: var(--ion-padding, 16px);\n padding-inline-start: var(--ion-padding, 16px);\n }\n}\n\n.ion-padding-end {\n --padding-end: var(--ion-padding, 16px);\n padding-right: var(--ion-padding, 16px);\n}\n@supports (margin-inline-start: 0) or (-webkit-margin-start: 0) {\n .ion-padding-end {\n padding-right: unset;\n -webkit-padding-end: var(--ion-padding, 16px);\n padding-inline-end: var(--ion-padding, 16px);\n }\n}\n\n.ion-padding-bottom {\n --padding-bottom: var(--ion-padding, 16px);\n padding-bottom: var(--ion-padding, 16px);\n}\n.ion-padding-vertical {\n --padding-top: var(--ion-padding, 16px);\n --padding-bottom: var(--ion-padding, 16px);\n padding-top: var(--ion-padding, 16px);\n padding-bottom: var(--ion-padding, 16px);\n}\n.ion-padding-horizontal {\n --padding-start: var(--ion-padding, 16px);\n --padding-end: var(--ion-padding, 16px);\n padding-left: var(--ion-padding, 16px);\n padding-right: var(--ion-padding, 16px);\n}\n@supports (margin-inline-start: 0) or (-webkit-margin-start: 0) {\n .ion-padding-horizontal {\n padding-left: unset;\n padding-right: unset;\n -webkit-padding-start: var(--ion-padding, 16px);\n padding-inline-start: var(--ion-padding, 16px);\n -webkit-padding-end: var(--ion-padding, 16px);\n padding-inline-end: var(--ion-padding, 16px);\n }\n}\n\n.ion-no-margin {\n --margin-start: 0;\n --margin-end: 0;\n --margin-top: 0;\n --margin-bottom: 0;\n margin-left: 0;\n margin-right: 0;\n margin-top: 0;\n margin-bottom: 0;\n}\n\n.ion-margin {\n --margin-start: var(--ion-margin, 16px);\n --margin-end: var(--ion-margin, 16px);\n --margin-top: var(--ion-margin, 16px);\n --margin-bottom: var(--ion-margin, 16px);\n margin-left: var(--ion-margin, 16px);\n margin-right: var(--ion-margin, 16px);\n margin-top: var(--ion-margin, 16px);\n margin-bottom: var(--ion-margin, 16px);\n}\n@supports (margin-inline-start: 0) or (-webkit-margin-start: 0) {\n .ion-margin {\n margin-left: unset;\n margin-right: unset;\n -webkit-margin-start: var(--ion-margin, 16px);\n margin-inline-start: var(--ion-margin, 16px);\n -webkit-margin-end: var(--ion-margin, 16px);\n margin-inline-end: var(--ion-margin, 16px);\n }\n}\n\n.ion-margin-top {\n --margin-top: var(--ion-margin, 16px);\n margin-top: var(--ion-margin, 16px);\n}\n.ion-margin-start {\n --margin-start: var(--ion-margin, 16px);\n margin-left: var(--ion-margin, 16px);\n}\n@supports (margin-inline-start: 0) or (-webkit-margin-start: 0) {\n .ion-margin-start {\n margin-left: unset;\n -webkit-margin-start: var(--ion-margin, 16px);\n margin-inline-start: var(--ion-margin, 16px);\n }\n}\n\n.ion-margin-end {\n --margin-end: var(--ion-margin, 16px);\n margin-right: var(--ion-margin, 16px);\n}\n@supports (margin-inline-start: 0) or (-webkit-margin-start: 0) {\n .ion-margin-end {\n margin-right: unset;\n -webkit-margin-end: var(--ion-margin, 16px);\n margin-inline-end: var(--ion-margin, 16px);\n }\n}\n\n.ion-margin-bottom {\n --margin-bottom: var(--ion-margin, 16px);\n margin-bottom: var(--ion-margin, 16px);\n}\n.ion-margin-vertical {\n --margin-top: var(--ion-margin, 16px);\n --margin-bottom: var(--ion-margin, 16px);\n margin-top: var(--ion-margin, 16px);\n margin-bottom: var(--ion-margin, 16px);\n}\n.ion-margin-horizontal {\n --margin-start: var(--ion-margin, 16px);\n --margin-end: var(--ion-margin, 16px);\n margin-left: var(--ion-margin, 16px);\n margin-right: var(--ion-margin, 16px);\n}\n@supports (margin-inline-start: 0) or (-webkit-margin-start: 0) {\n .ion-margin-horizontal {\n margin-left: unset;\n margin-right: unset;\n -webkit-margin-start: var(--ion-margin, 16px);\n margin-inline-start: var(--ion-margin, 16px);\n -webkit-margin-end: var(--ion-margin, 16px);\n margin-inline-end: var(--ion-margin, 16px);\n }\n}\n\n/*# sourceMappingURL=padding.css.map */\n",null,".ion-float-left {\n float: left !important;\n}\n\n.ion-float-right {\n float: right !important;\n}\n\n.ion-float-start {\n float: left !important;\n}\n[dir=rtl] .ion-float-start, :host-context([dir=rtl]) .ion-float-start {\n float: right !important;\n}\n\n.ion-float-end {\n float: right !important;\n}\n[dir=rtl] .ion-float-end, :host-context([dir=rtl]) .ion-float-end {\n float: left !important;\n}\n\n@media (min-width: 576px) {\n .ion-float-sm-left {\n float: left !important;\n }\n\n .ion-float-sm-right {\n float: right !important;\n }\n\n .ion-float-sm-start {\n float: left !important;\n }\n [dir=rtl] .ion-float-sm-start, :host-context([dir=rtl]) .ion-float-sm-start {\n float: right !important;\n }\n\n .ion-float-sm-end {\n float: right !important;\n }\n [dir=rtl] .ion-float-sm-end, :host-context([dir=rtl]) .ion-float-sm-end {\n float: left !important;\n }\n}\n@media (min-width: 768px) {\n .ion-float-md-left {\n float: left !important;\n }\n\n .ion-float-md-right {\n float: right !important;\n }\n\n .ion-float-md-start {\n float: left !important;\n }\n [dir=rtl] .ion-float-md-start, :host-context([dir=rtl]) .ion-float-md-start {\n float: right !important;\n }\n\n .ion-float-md-end {\n float: right !important;\n }\n [dir=rtl] .ion-float-md-end, :host-context([dir=rtl]) .ion-float-md-end {\n float: left !important;\n }\n}\n@media (min-width: 992px) {\n .ion-float-lg-left {\n float: left !important;\n }\n\n .ion-float-lg-right {\n float: right !important;\n }\n\n .ion-float-lg-start {\n float: left !important;\n }\n [dir=rtl] .ion-float-lg-start, :host-context([dir=rtl]) .ion-float-lg-start {\n float: right !important;\n }\n\n .ion-float-lg-end {\n float: right !important;\n }\n [dir=rtl] .ion-float-lg-end, :host-context([dir=rtl]) .ion-float-lg-end {\n float: left !important;\n }\n}\n@media (min-width: 1200px) {\n .ion-float-xl-left {\n float: left !important;\n }\n\n .ion-float-xl-right {\n float: right !important;\n }\n\n .ion-float-xl-start {\n float: left !important;\n }\n [dir=rtl] .ion-float-xl-start, :host-context([dir=rtl]) .ion-float-xl-start {\n float: right !important;\n }\n\n .ion-float-xl-end {\n float: right !important;\n }\n [dir=rtl] .ion-float-xl-end, :host-context([dir=rtl]) .ion-float-xl-end {\n float: left !important;\n }\n}\n\n/*# sourceMappingURL=float-elements.css.map */\n",null,".ion-text-center {\n text-align: center !important;\n}\n\n.ion-text-justify {\n text-align: justify !important;\n}\n\n.ion-text-start {\n text-align: start !important;\n}\n\n.ion-text-end {\n text-align: end !important;\n}\n\n.ion-text-left {\n text-align: left !important;\n}\n\n.ion-text-right {\n text-align: right !important;\n}\n\n.ion-text-nowrap {\n white-space: nowrap !important;\n}\n\n.ion-text-wrap {\n white-space: normal !important;\n}\n\n@media (min-width: 576px) {\n .ion-text-sm-center {\n text-align: center !important;\n }\n\n .ion-text-sm-justify {\n text-align: justify !important;\n }\n\n .ion-text-sm-start {\n text-align: start !important;\n }\n\n .ion-text-sm-end {\n text-align: end !important;\n }\n\n .ion-text-sm-left {\n text-align: left !important;\n }\n\n .ion-text-sm-right {\n text-align: right !important;\n }\n\n .ion-text-sm-nowrap {\n white-space: nowrap !important;\n }\n\n .ion-text-sm-wrap {\n white-space: normal !important;\n }\n}\n@media (min-width: 768px) {\n .ion-text-md-center {\n text-align: center !important;\n }\n\n .ion-text-md-justify {\n text-align: justify !important;\n }\n\n .ion-text-md-start {\n text-align: start !important;\n }\n\n .ion-text-md-end {\n text-align: end !important;\n }\n\n .ion-text-md-left {\n text-align: left !important;\n }\n\n .ion-text-md-right {\n text-align: right !important;\n }\n\n .ion-text-md-nowrap {\n white-space: nowrap !important;\n }\n\n .ion-text-md-wrap {\n white-space: normal !important;\n }\n}\n@media (min-width: 992px) {\n .ion-text-lg-center {\n text-align: center !important;\n }\n\n .ion-text-lg-justify {\n text-align: justify !important;\n }\n\n .ion-text-lg-start {\n text-align: start !important;\n }\n\n .ion-text-lg-end {\n text-align: end !important;\n }\n\n .ion-text-lg-left {\n text-align: left !important;\n }\n\n .ion-text-lg-right {\n text-align: right !important;\n }\n\n .ion-text-lg-nowrap {\n white-space: nowrap !important;\n }\n\n .ion-text-lg-wrap {\n white-space: normal !important;\n }\n}\n@media (min-width: 1200px) {\n .ion-text-xl-center {\n text-align: center !important;\n }\n\n .ion-text-xl-justify {\n text-align: justify !important;\n }\n\n .ion-text-xl-start {\n text-align: start !important;\n }\n\n .ion-text-xl-end {\n text-align: end !important;\n }\n\n .ion-text-xl-left {\n text-align: left !important;\n }\n\n .ion-text-xl-right {\n text-align: right !important;\n }\n\n .ion-text-xl-nowrap {\n white-space: nowrap !important;\n }\n\n .ion-text-xl-wrap {\n white-space: normal !important;\n }\n}\n\n/*# sourceMappingURL=text-alignment.css.map */\n",null,".ion-text-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n}\n\n.ion-text-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n}\n\n.ion-text-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n}\n\n@media (min-width: 576px) {\n .ion-text-sm-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n }\n\n .ion-text-sm-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n }\n\n .ion-text-sm-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n }\n}\n@media (min-width: 768px) {\n .ion-text-md-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n }\n\n .ion-text-md-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n }\n\n .ion-text-md-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n }\n}\n@media (min-width: 992px) {\n .ion-text-lg-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n }\n\n .ion-text-lg-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n }\n\n .ion-text-lg-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n }\n}\n@media (min-width: 1200px) {\n .ion-text-xl-uppercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: uppercase !important;\n }\n\n .ion-text-xl-lowercase {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: lowercase !important;\n }\n\n .ion-text-xl-capitalize {\n /* stylelint-disable-next-line declaration-no-important */\n text-transform: capitalize !important;\n }\n}\n\n/*# sourceMappingURL=text-transformation.css.map */\n",null,".ion-align-self-start {\n align-self: flex-start !important;\n}\n\n.ion-align-self-end {\n align-self: flex-end !important;\n}\n\n.ion-align-self-center {\n align-self: center !important;\n}\n\n.ion-align-self-stretch {\n align-self: stretch !important;\n}\n\n.ion-align-self-baseline {\n align-self: baseline !important;\n}\n\n.ion-align-self-auto {\n align-self: auto !important;\n}\n\n.ion-wrap {\n flex-wrap: wrap !important;\n}\n\n.ion-nowrap {\n flex-wrap: nowrap !important;\n}\n\n.ion-wrap-reverse {\n flex-wrap: wrap-reverse !important;\n}\n\n.ion-justify-content-start {\n justify-content: flex-start !important;\n}\n\n.ion-justify-content-center {\n justify-content: center !important;\n}\n\n.ion-justify-content-end {\n justify-content: flex-end !important;\n}\n\n.ion-justify-content-around {\n justify-content: space-around !important;\n}\n\n.ion-justify-content-between {\n justify-content: space-between !important;\n}\n\n.ion-justify-content-evenly {\n justify-content: space-evenly !important;\n}\n\n.ion-align-items-start {\n align-items: flex-start !important;\n}\n\n.ion-align-items-center {\n align-items: center !important;\n}\n\n.ion-align-items-end {\n align-items: flex-end !important;\n}\n\n.ion-align-items-stretch {\n align-items: stretch !important;\n}\n\n.ion-align-items-baseline {\n align-items: baseline !important;\n}\n\n/*# sourceMappingURL=flex-utils.css.map */\n"]}]); -// Exports -module.exports = exports; - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/cjs.js?!./node_modules/postcss-loader/src/index.js?!./node_modules/sass-loader/dist/cjs.js?!./src/theme/variables.scss": -/*!*********************************************************************************************************************************************************************************!*\ - !*** ./node_modules/css-loader/dist/cjs.js??ref--13-1!./node_modules/postcss-loader/src??embedded!./node_modules/sass-loader/dist/cjs.js??ref--13-3!./src/theme/variables.scss ***! - \*********************************************************************************************************************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -// Imports -var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/css-loader/dist/runtime/api.js */ "./node_modules/css-loader/dist/runtime/api.js"); -exports = ___CSS_LOADER_API_IMPORT___(true); -// Module -exports.push([module.i, "/** Ionic CSS Variables **/\n:root {\n /** primary **/\n --ion-color-primary: #3880ff;\n --ion-color-primary-rgb: 56, 128, 255;\n --ion-color-primary-contrast: #ffffff;\n --ion-color-primary-contrast-rgb: 255, 255, 255;\n --ion-color-primary-shade: #3171e0;\n --ion-color-primary-tint: #4c8dff;\n /** secondary **/\n --ion-color-secondary: #3dc2ff;\n --ion-color-secondary-rgb: 61, 194, 255;\n --ion-color-secondary-contrast: #ffffff;\n --ion-color-secondary-contrast-rgb: 255, 255, 255;\n --ion-color-secondary-shade: #36abe0;\n --ion-color-secondary-tint: #50c8ff;\n /** tertiary **/\n --ion-color-tertiary: #5260ff;\n --ion-color-tertiary-rgb: 82, 96, 255;\n --ion-color-tertiary-contrast: #ffffff;\n --ion-color-tertiary-contrast-rgb: 255, 255, 255;\n --ion-color-tertiary-shade: #4854e0;\n --ion-color-tertiary-tint: #6370ff;\n /** success **/\n --ion-color-success: #2dd36f;\n --ion-color-success-rgb: 45, 211, 111;\n --ion-color-success-contrast: #ffffff;\n --ion-color-success-contrast-rgb: 255, 255, 255;\n --ion-color-success-shade: #28ba62;\n --ion-color-success-tint: #42d77d;\n /** warning **/\n --ion-color-warning: #ffc409;\n --ion-color-warning-rgb: 255, 196, 9;\n --ion-color-warning-contrast: #000000;\n --ion-color-warning-contrast-rgb: 0, 0, 0;\n --ion-color-warning-shade: #e0ac08;\n --ion-color-warning-tint: #ffca22;\n /** danger **/\n --ion-color-danger: #eb445a;\n --ion-color-danger-rgb: 235, 68, 90;\n --ion-color-danger-contrast: #ffffff;\n --ion-color-danger-contrast-rgb: 255, 255, 255;\n --ion-color-danger-shade: #cf3c4f;\n --ion-color-danger-tint: #ed576b;\n /** dark **/\n --ion-color-dark: #222428;\n --ion-color-dark-rgb: 34, 36, 40;\n --ion-color-dark-contrast: #ffffff;\n --ion-color-dark-contrast-rgb: 255, 255, 255;\n --ion-color-dark-shade: #1e2023;\n --ion-color-dark-tint: #383a3e;\n /** medium **/\n --ion-color-medium: #92949c;\n --ion-color-medium-rgb: 146, 148, 156;\n --ion-color-medium-contrast: #ffffff;\n --ion-color-medium-contrast-rgb: 255, 255, 255;\n --ion-color-medium-shade: #808289;\n --ion-color-medium-tint: #9d9fa6;\n /** light **/\n --ion-color-light: #f4f5f8;\n --ion-color-light-rgb: 244, 245, 248;\n --ion-color-light-contrast: #000000;\n --ion-color-light-contrast-rgb: 0, 0, 0;\n --ion-color-light-shade: #d7d8da;\n --ion-color-light-tint: #f5f6f9;\n --ion-color-expediente: #dae3f3;\n}\n@media (prefers-color-scheme: dark) {\n /*\n * Dark Colors\n * -------------------------------------------\n */\n body {\n --ion-color-primary: #428cff;\n --ion-color-primary-rgb: 66,140,255;\n --ion-color-primary-contrast: #ffffff;\n --ion-color-primary-contrast-rgb: 255,255,255;\n --ion-color-primary-shade: #3a7be0;\n --ion-color-primary-tint: #5598ff;\n --ion-color-secondary: #50c8ff;\n --ion-color-secondary-rgb: 80,200,255;\n --ion-color-secondary-contrast: #ffffff;\n --ion-color-secondary-contrast-rgb: 255,255,255;\n --ion-color-secondary-shade: #46b0e0;\n --ion-color-secondary-tint: #62ceff;\n --ion-color-tertiary: #6a64ff;\n --ion-color-tertiary-rgb: 106,100,255;\n --ion-color-tertiary-contrast: #ffffff;\n --ion-color-tertiary-contrast-rgb: 255,255,255;\n --ion-color-tertiary-shade: #5d58e0;\n --ion-color-tertiary-tint: #7974ff;\n --ion-color-success: #2fdf75;\n --ion-color-success-rgb: 47,223,117;\n --ion-color-success-contrast: #000000;\n --ion-color-success-contrast-rgb: 0,0,0;\n --ion-color-success-shade: #29c467;\n --ion-color-success-tint: #44e283;\n --ion-color-warning: #ffd534;\n --ion-color-warning-rgb: 255,213,52;\n --ion-color-warning-contrast: #000000;\n --ion-color-warning-contrast-rgb: 0,0,0;\n --ion-color-warning-shade: #e0bb2e;\n --ion-color-warning-tint: #ffd948;\n --ion-color-danger: #ff4961;\n --ion-color-danger-rgb: 255,73,97;\n --ion-color-danger-contrast: #ffffff;\n --ion-color-danger-contrast-rgb: 255,255,255;\n --ion-color-danger-shade: #e04055;\n --ion-color-danger-tint: #ff5b71;\n --ion-color-dark: #f4f5f8;\n --ion-color-dark-rgb: 244,245,248;\n --ion-color-dark-contrast: #000000;\n --ion-color-dark-contrast-rgb: 0,0,0;\n --ion-color-dark-shade: #d7d8da;\n --ion-color-dark-tint: #f5f6f9;\n --ion-color-medium: #989aa2;\n --ion-color-medium-rgb: 152,154,162;\n --ion-color-medium-contrast: #000000;\n --ion-color-medium-contrast-rgb: 0,0,0;\n --ion-color-medium-shade: #86888f;\n --ion-color-medium-tint: #a2a4ab;\n --ion-color-light: #222428;\n --ion-color-light-rgb: 34,36,40;\n --ion-color-light-contrast: #ffffff;\n --ion-color-light-contrast-rgb: 255,255,255;\n --ion-color-light-shade: #1e2023;\n --ion-color-light-tint: #383a3e;\n --ion-color-expediente: #dae3f3;\n }\n\n /*\n * iOS Dark Theme\n * -------------------------------------------\n */\n .ios body {\n --ion-background-color: #000000;\n --ion-background-color-rgb: 0,0,0;\n --ion-text-color: #ffffff;\n --ion-text-color-rgb: 255,255,255;\n --ion-color-step-50: #0d0d0d;\n --ion-color-step-100: #1a1a1a;\n --ion-color-step-150: #262626;\n --ion-color-step-200: #333333;\n --ion-color-step-250: #404040;\n --ion-color-step-300: #4d4d4d;\n --ion-color-step-350: #595959;\n --ion-color-step-400: #666666;\n --ion-color-step-450: #737373;\n --ion-color-step-500: #808080;\n --ion-color-step-550: #8c8c8c;\n --ion-color-step-600: #999999;\n --ion-color-step-650: #a6a6a6;\n --ion-color-step-700: #b3b3b3;\n --ion-color-step-750: #bfbfbf;\n --ion-color-step-800: #cccccc;\n --ion-color-step-850: #d9d9d9;\n --ion-color-step-900: #e6e6e6;\n --ion-color-step-950: #f2f2f2;\n --ion-toolbar-background: #0d0d0d;\n --ion-item-background: #000000;\n --ion-card-background: #1c1c1d;\n --ion-color-expediente: #dae3f3;\n }\n\n /*\n * Material Design Dark Theme\n * -------------------------------------------\n */\n .md body {\n --ion-background-color: #121212;\n --ion-background-color-rgb: 18,18,18;\n --ion-text-color: #ffffff;\n --ion-text-color-rgb: 255,255,255;\n --ion-border-color: #222222;\n --ion-color-step-50: #1e1e1e;\n --ion-color-step-100: #2a2a2a;\n --ion-color-step-150: #363636;\n --ion-color-step-200: #414141;\n --ion-color-step-250: #4d4d4d;\n --ion-color-step-300: #595959;\n --ion-color-step-350: #656565;\n --ion-color-step-400: #717171;\n --ion-color-step-450: #7d7d7d;\n --ion-color-step-500: #898989;\n --ion-color-step-550: #949494;\n --ion-color-step-600: #a0a0a0;\n --ion-color-step-650: #acacac;\n --ion-color-step-700: #b8b8b8;\n --ion-color-step-750: #c4c4c4;\n --ion-color-step-800: #d0d0d0;\n --ion-color-step-850: #dbdbdb;\n --ion-color-step-900: #e7e7e7;\n --ion-color-step-950: #f3f3f3;\n --ion-item-background: #1e1e1e;\n --ion-toolbar-background: #1f1f1f;\n --ion-tab-bar-background: #1f1f1f;\n --ion-card-background: #1e1e1e;\n /* My colors */\n --ion-color-expediente: #dae3f3;\n }\n}\n.center {\n text-align: center;\n}\n.wrapper {\n padding: 150px 20px 0 20px;\n overflow: auto;\n}\n/* .cal-modal{\n --height: 80%;\n --border-radius: 10px;\n padding: 25px;\n} */\n.capitalizeText {\n text-transform: capitalize;\n}", "",{"version":3,"sources":["C:\\Users\\tiago.kayaya\\development\\gabinete-digital/src\\theme\\variables.scss","variables.scss"],"names":[],"mappings":"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","file":"variables.scss","sourcesContent":["// Ionic Variables and Theming. For more info, please see:\r\n// http://ionicframework.com/docs/theming/\r\n\r\n/** Ionic CSS Variables **/\r\n:root {\r\n /** primary **/\r\n --ion-color-primary: #3880ff;\r\n --ion-color-primary-rgb: 56, 128, 255;\r\n --ion-color-primary-contrast: #ffffff;\r\n --ion-color-primary-contrast-rgb: 255, 255, 255;\r\n --ion-color-primary-shade: #3171e0;\r\n --ion-color-primary-tint: #4c8dff;\r\n\r\n /** secondary **/\r\n --ion-color-secondary: #3dc2ff;\r\n --ion-color-secondary-rgb: 61, 194, 255;\r\n --ion-color-secondary-contrast: #ffffff;\r\n --ion-color-secondary-contrast-rgb: 255, 255, 255;\r\n --ion-color-secondary-shade: #36abe0;\r\n --ion-color-secondary-tint: #50c8ff;\r\n\r\n /** tertiary **/\r\n --ion-color-tertiary: #5260ff;\r\n --ion-color-tertiary-rgb: 82, 96, 255;\r\n --ion-color-tertiary-contrast: #ffffff;\r\n --ion-color-tertiary-contrast-rgb: 255, 255, 255;\r\n --ion-color-tertiary-shade: #4854e0;\r\n --ion-color-tertiary-tint: #6370ff;\r\n\r\n /** success **/\r\n --ion-color-success: #2dd36f;\r\n --ion-color-success-rgb: 45, 211, 111;\r\n --ion-color-success-contrast: #ffffff;\r\n --ion-color-success-contrast-rgb: 255, 255, 255;\r\n --ion-color-success-shade: #28ba62;\r\n --ion-color-success-tint: #42d77d;\r\n\r\n /** warning **/\r\n --ion-color-warning: #ffc409;\r\n --ion-color-warning-rgb: 255, 196, 9;\r\n --ion-color-warning-contrast: #000000;\r\n --ion-color-warning-contrast-rgb: 0, 0, 0;\r\n --ion-color-warning-shade: #e0ac08;\r\n --ion-color-warning-tint: #ffca22;\r\n\r\n /** danger **/\r\n --ion-color-danger: #eb445a;\r\n --ion-color-danger-rgb: 235, 68, 90;\r\n --ion-color-danger-contrast: #ffffff;\r\n --ion-color-danger-contrast-rgb: 255, 255, 255;\r\n --ion-color-danger-shade: #cf3c4f;\r\n --ion-color-danger-tint: #ed576b;\r\n\r\n /** dark **/\r\n --ion-color-dark: #222428;\r\n --ion-color-dark-rgb: 34, 36, 40;\r\n --ion-color-dark-contrast: #ffffff;\r\n --ion-color-dark-contrast-rgb: 255, 255, 255;\r\n --ion-color-dark-shade: #1e2023;\r\n --ion-color-dark-tint: #383a3e;\r\n\r\n /** medium **/\r\n --ion-color-medium: #92949c;\r\n --ion-color-medium-rgb: 146, 148, 156;\r\n --ion-color-medium-contrast: #ffffff;\r\n --ion-color-medium-contrast-rgb: 255, 255, 255;\r\n --ion-color-medium-shade: #808289;\r\n --ion-color-medium-tint: #9d9fa6;\r\n\r\n /** light **/\r\n --ion-color-light: #f4f5f8;\r\n --ion-color-light-rgb: 244, 245, 248;\r\n --ion-color-light-contrast: #000000;\r\n --ion-color-light-contrast-rgb: 0, 0, 0;\r\n --ion-color-light-shade: #d7d8da;\r\n --ion-color-light-tint: #f5f6f9;\r\n\r\n --ion-color-expediente: #dae3f3;\r\n}\r\n\r\n@media (prefers-color-scheme: dark) {\r\n /*\r\n * Dark Colors\r\n * -------------------------------------------\r\n */\r\n\r\n body {\r\n --ion-color-primary: #428cff;\r\n --ion-color-primary-rgb: 66,140,255;\r\n --ion-color-primary-contrast: #ffffff;\r\n --ion-color-primary-contrast-rgb: 255,255,255;\r\n --ion-color-primary-shade: #3a7be0;\r\n --ion-color-primary-tint: #5598ff;\r\n\r\n --ion-color-secondary: #50c8ff;\r\n --ion-color-secondary-rgb: 80,200,255;\r\n --ion-color-secondary-contrast: #ffffff;\r\n --ion-color-secondary-contrast-rgb: 255,255,255;\r\n --ion-color-secondary-shade: #46b0e0;\r\n --ion-color-secondary-tint: #62ceff;\r\n\r\n --ion-color-tertiary: #6a64ff;\r\n --ion-color-tertiary-rgb: 106,100,255;\r\n --ion-color-tertiary-contrast: #ffffff;\r\n --ion-color-tertiary-contrast-rgb: 255,255,255;\r\n --ion-color-tertiary-shade: #5d58e0;\r\n --ion-color-tertiary-tint: #7974ff;\r\n\r\n --ion-color-success: #2fdf75;\r\n --ion-color-success-rgb: 47,223,117;\r\n --ion-color-success-contrast: #000000;\r\n --ion-color-success-contrast-rgb: 0,0,0;\r\n --ion-color-success-shade: #29c467;\r\n --ion-color-success-tint: #44e283;\r\n\r\n --ion-color-warning: #ffd534;\r\n --ion-color-warning-rgb: 255,213,52;\r\n --ion-color-warning-contrast: #000000;\r\n --ion-color-warning-contrast-rgb: 0,0,0;\r\n --ion-color-warning-shade: #e0bb2e;\r\n --ion-color-warning-tint: #ffd948;\r\n\r\n --ion-color-danger: #ff4961;\r\n --ion-color-danger-rgb: 255,73,97;\r\n --ion-color-danger-contrast: #ffffff;\r\n --ion-color-danger-contrast-rgb: 255,255,255;\r\n --ion-color-danger-shade: #e04055;\r\n --ion-color-danger-tint: #ff5b71;\r\n\r\n --ion-color-dark: #f4f5f8;\r\n --ion-color-dark-rgb: 244,245,248;\r\n --ion-color-dark-contrast: #000000;\r\n --ion-color-dark-contrast-rgb: 0,0,0;\r\n --ion-color-dark-shade: #d7d8da;\r\n --ion-color-dark-tint: #f5f6f9;\r\n\r\n --ion-color-medium: #989aa2;\r\n --ion-color-medium-rgb: 152,154,162;\r\n --ion-color-medium-contrast: #000000;\r\n --ion-color-medium-contrast-rgb: 0,0,0;\r\n --ion-color-medium-shade: #86888f;\r\n --ion-color-medium-tint: #a2a4ab;\r\n\r\n --ion-color-light: #222428;\r\n --ion-color-light-rgb: 34,36,40;\r\n --ion-color-light-contrast: #ffffff;\r\n --ion-color-light-contrast-rgb: 255,255,255;\r\n --ion-color-light-shade: #1e2023;\r\n --ion-color-light-tint: #383a3e;\r\n\r\n --ion-color-expediente: #dae3f3;\r\n }\r\n\r\n /*\r\n * iOS Dark Theme\r\n * -------------------------------------------\r\n */\r\n\r\n .ios body {\r\n --ion-background-color: #000000;\r\n --ion-background-color-rgb: 0,0,0;\r\n\r\n --ion-text-color: #ffffff;\r\n --ion-text-color-rgb: 255,255,255;\r\n\r\n --ion-color-step-50: #0d0d0d;\r\n --ion-color-step-100: #1a1a1a;\r\n --ion-color-step-150: #262626;\r\n --ion-color-step-200: #333333;\r\n --ion-color-step-250: #404040;\r\n --ion-color-step-300: #4d4d4d;\r\n --ion-color-step-350: #595959;\r\n --ion-color-step-400: #666666;\r\n --ion-color-step-450: #737373;\r\n --ion-color-step-500: #808080;\r\n --ion-color-step-550: #8c8c8c;\r\n --ion-color-step-600: #999999;\r\n --ion-color-step-650: #a6a6a6;\r\n --ion-color-step-700: #b3b3b3;\r\n --ion-color-step-750: #bfbfbf;\r\n --ion-color-step-800: #cccccc;\r\n --ion-color-step-850: #d9d9d9;\r\n --ion-color-step-900: #e6e6e6;\r\n --ion-color-step-950: #f2f2f2;\r\n\r\n --ion-toolbar-background: #0d0d0d;\r\n\r\n --ion-item-background: #000000;\r\n\r\n --ion-card-background: #1c1c1d;\r\n\r\n --ion-color-expediente: #dae3f3;\r\n }\r\n\r\n\r\n /*\r\n * Material Design Dark Theme\r\n * -------------------------------------------\r\n */\r\n\r\n .md body {\r\n --ion-background-color: #121212;\r\n --ion-background-color-rgb: 18,18,18;\r\n\r\n --ion-text-color: #ffffff;\r\n --ion-text-color-rgb: 255,255,255;\r\n\r\n --ion-border-color: #222222;\r\n\r\n --ion-color-step-50: #1e1e1e;\r\n --ion-color-step-100: #2a2a2a;\r\n --ion-color-step-150: #363636;\r\n --ion-color-step-200: #414141;\r\n --ion-color-step-250: #4d4d4d;\r\n --ion-color-step-300: #595959;\r\n --ion-color-step-350: #656565;\r\n --ion-color-step-400: #717171;\r\n --ion-color-step-450: #7d7d7d;\r\n --ion-color-step-500: #898989;\r\n --ion-color-step-550: #949494;\r\n --ion-color-step-600: #a0a0a0;\r\n --ion-color-step-650: #acacac;\r\n --ion-color-step-700: #b8b8b8;\r\n --ion-color-step-750: #c4c4c4;\r\n --ion-color-step-800: #d0d0d0;\r\n --ion-color-step-850: #dbdbdb;\r\n --ion-color-step-900: #e7e7e7;\r\n --ion-color-step-950: #f3f3f3;\r\n\r\n --ion-item-background: #1e1e1e;\r\n\r\n --ion-toolbar-background: #1f1f1f;\r\n\r\n --ion-tab-bar-background: #1f1f1f;\r\n\r\n --ion-card-background: #1e1e1e;\r\n/* My colors */\r\n --ion-color-expediente: #dae3f3;\r\n }\r\n}\r\n.center{\r\n text-align: center;\r\n}\r\n.wrapper{\r\n padding: 150px 20px 0 20px;\r\n overflow: auto;\r\n}\r\n/* .cal-modal{\r\n --height: 80%;\r\n --border-radius: 10px;\r\n padding: 25px;\r\n} */\r\n.capitalizeText{\r\n text-transform: capitalize;\r\n}","/** Ionic CSS Variables **/\n:root {\n /** primary **/\n --ion-color-primary: #3880ff;\n --ion-color-primary-rgb: 56, 128, 255;\n --ion-color-primary-contrast: #ffffff;\n --ion-color-primary-contrast-rgb: 255, 255, 255;\n --ion-color-primary-shade: #3171e0;\n --ion-color-primary-tint: #4c8dff;\n /** secondary **/\n --ion-color-secondary: #3dc2ff;\n --ion-color-secondary-rgb: 61, 194, 255;\n --ion-color-secondary-contrast: #ffffff;\n --ion-color-secondary-contrast-rgb: 255, 255, 255;\n --ion-color-secondary-shade: #36abe0;\n --ion-color-secondary-tint: #50c8ff;\n /** tertiary **/\n --ion-color-tertiary: #5260ff;\n --ion-color-tertiary-rgb: 82, 96, 255;\n --ion-color-tertiary-contrast: #ffffff;\n --ion-color-tertiary-contrast-rgb: 255, 255, 255;\n --ion-color-tertiary-shade: #4854e0;\n --ion-color-tertiary-tint: #6370ff;\n /** success **/\n --ion-color-success: #2dd36f;\n --ion-color-success-rgb: 45, 211, 111;\n --ion-color-success-contrast: #ffffff;\n --ion-color-success-contrast-rgb: 255, 255, 255;\n --ion-color-success-shade: #28ba62;\n --ion-color-success-tint: #42d77d;\n /** warning **/\n --ion-color-warning: #ffc409;\n --ion-color-warning-rgb: 255, 196, 9;\n --ion-color-warning-contrast: #000000;\n --ion-color-warning-contrast-rgb: 0, 0, 0;\n --ion-color-warning-shade: #e0ac08;\n --ion-color-warning-tint: #ffca22;\n /** danger **/\n --ion-color-danger: #eb445a;\n --ion-color-danger-rgb: 235, 68, 90;\n --ion-color-danger-contrast: #ffffff;\n --ion-color-danger-contrast-rgb: 255, 255, 255;\n --ion-color-danger-shade: #cf3c4f;\n --ion-color-danger-tint: #ed576b;\n /** dark **/\n --ion-color-dark: #222428;\n --ion-color-dark-rgb: 34, 36, 40;\n --ion-color-dark-contrast: #ffffff;\n --ion-color-dark-contrast-rgb: 255, 255, 255;\n --ion-color-dark-shade: #1e2023;\n --ion-color-dark-tint: #383a3e;\n /** medium **/\n --ion-color-medium: #92949c;\n --ion-color-medium-rgb: 146, 148, 156;\n --ion-color-medium-contrast: #ffffff;\n --ion-color-medium-contrast-rgb: 255, 255, 255;\n --ion-color-medium-shade: #808289;\n --ion-color-medium-tint: #9d9fa6;\n /** light **/\n --ion-color-light: #f4f5f8;\n --ion-color-light-rgb: 244, 245, 248;\n --ion-color-light-contrast: #000000;\n --ion-color-light-contrast-rgb: 0, 0, 0;\n --ion-color-light-shade: #d7d8da;\n --ion-color-light-tint: #f5f6f9;\n --ion-color-expediente: #dae3f3;\n}\n\n@media (prefers-color-scheme: dark) {\n /*\n * Dark Colors\n * -------------------------------------------\n */\n body {\n --ion-color-primary: #428cff;\n --ion-color-primary-rgb: 66,140,255;\n --ion-color-primary-contrast: #ffffff;\n --ion-color-primary-contrast-rgb: 255,255,255;\n --ion-color-primary-shade: #3a7be0;\n --ion-color-primary-tint: #5598ff;\n --ion-color-secondary: #50c8ff;\n --ion-color-secondary-rgb: 80,200,255;\n --ion-color-secondary-contrast: #ffffff;\n --ion-color-secondary-contrast-rgb: 255,255,255;\n --ion-color-secondary-shade: #46b0e0;\n --ion-color-secondary-tint: #62ceff;\n --ion-color-tertiary: #6a64ff;\n --ion-color-tertiary-rgb: 106,100,255;\n --ion-color-tertiary-contrast: #ffffff;\n --ion-color-tertiary-contrast-rgb: 255,255,255;\n --ion-color-tertiary-shade: #5d58e0;\n --ion-color-tertiary-tint: #7974ff;\n --ion-color-success: #2fdf75;\n --ion-color-success-rgb: 47,223,117;\n --ion-color-success-contrast: #000000;\n --ion-color-success-contrast-rgb: 0,0,0;\n --ion-color-success-shade: #29c467;\n --ion-color-success-tint: #44e283;\n --ion-color-warning: #ffd534;\n --ion-color-warning-rgb: 255,213,52;\n --ion-color-warning-contrast: #000000;\n --ion-color-warning-contrast-rgb: 0,0,0;\n --ion-color-warning-shade: #e0bb2e;\n --ion-color-warning-tint: #ffd948;\n --ion-color-danger: #ff4961;\n --ion-color-danger-rgb: 255,73,97;\n --ion-color-danger-contrast: #ffffff;\n --ion-color-danger-contrast-rgb: 255,255,255;\n --ion-color-danger-shade: #e04055;\n --ion-color-danger-tint: #ff5b71;\n --ion-color-dark: #f4f5f8;\n --ion-color-dark-rgb: 244,245,248;\n --ion-color-dark-contrast: #000000;\n --ion-color-dark-contrast-rgb: 0,0,0;\n --ion-color-dark-shade: #d7d8da;\n --ion-color-dark-tint: #f5f6f9;\n --ion-color-medium: #989aa2;\n --ion-color-medium-rgb: 152,154,162;\n --ion-color-medium-contrast: #000000;\n --ion-color-medium-contrast-rgb: 0,0,0;\n --ion-color-medium-shade: #86888f;\n --ion-color-medium-tint: #a2a4ab;\n --ion-color-light: #222428;\n --ion-color-light-rgb: 34,36,40;\n --ion-color-light-contrast: #ffffff;\n --ion-color-light-contrast-rgb: 255,255,255;\n --ion-color-light-shade: #1e2023;\n --ion-color-light-tint: #383a3e;\n --ion-color-expediente: #dae3f3;\n }\n\n /*\n * iOS Dark Theme\n * -------------------------------------------\n */\n .ios body {\n --ion-background-color: #000000;\n --ion-background-color-rgb: 0,0,0;\n --ion-text-color: #ffffff;\n --ion-text-color-rgb: 255,255,255;\n --ion-color-step-50: #0d0d0d;\n --ion-color-step-100: #1a1a1a;\n --ion-color-step-150: #262626;\n --ion-color-step-200: #333333;\n --ion-color-step-250: #404040;\n --ion-color-step-300: #4d4d4d;\n --ion-color-step-350: #595959;\n --ion-color-step-400: #666666;\n --ion-color-step-450: #737373;\n --ion-color-step-500: #808080;\n --ion-color-step-550: #8c8c8c;\n --ion-color-step-600: #999999;\n --ion-color-step-650: #a6a6a6;\n --ion-color-step-700: #b3b3b3;\n --ion-color-step-750: #bfbfbf;\n --ion-color-step-800: #cccccc;\n --ion-color-step-850: #d9d9d9;\n --ion-color-step-900: #e6e6e6;\n --ion-color-step-950: #f2f2f2;\n --ion-toolbar-background: #0d0d0d;\n --ion-item-background: #000000;\n --ion-card-background: #1c1c1d;\n --ion-color-expediente: #dae3f3;\n }\n\n /*\n * Material Design Dark Theme\n * -------------------------------------------\n */\n .md body {\n --ion-background-color: #121212;\n --ion-background-color-rgb: 18,18,18;\n --ion-text-color: #ffffff;\n --ion-text-color-rgb: 255,255,255;\n --ion-border-color: #222222;\n --ion-color-step-50: #1e1e1e;\n --ion-color-step-100: #2a2a2a;\n --ion-color-step-150: #363636;\n --ion-color-step-200: #414141;\n --ion-color-step-250: #4d4d4d;\n --ion-color-step-300: #595959;\n --ion-color-step-350: #656565;\n --ion-color-step-400: #717171;\n --ion-color-step-450: #7d7d7d;\n --ion-color-step-500: #898989;\n --ion-color-step-550: #949494;\n --ion-color-step-600: #a0a0a0;\n --ion-color-step-650: #acacac;\n --ion-color-step-700: #b8b8b8;\n --ion-color-step-750: #c4c4c4;\n --ion-color-step-800: #d0d0d0;\n --ion-color-step-850: #dbdbdb;\n --ion-color-step-900: #e7e7e7;\n --ion-color-step-950: #f3f3f3;\n --ion-item-background: #1e1e1e;\n --ion-toolbar-background: #1f1f1f;\n --ion-tab-bar-background: #1f1f1f;\n --ion-card-background: #1e1e1e;\n /* My colors */\n --ion-color-expediente: #dae3f3;\n }\n}\n.center {\n text-align: center;\n}\n\n.wrapper {\n padding: 150px 20px 0 20px;\n overflow: auto;\n}\n\n/* .cal-modal{\n --height: 80%;\n --border-radius: 10px;\n padding: 25px;\n} */\n.capitalizeText {\n text-transform: capitalize;\n}"]}]); -// Exports -module.exports = exports; - - -/***/ }), - -/***/ "./node_modules/css-loader/dist/runtime/api.js": -/*!*****************************************************!*\ - !*** ./node_modules/css-loader/dist/runtime/api.js ***! - \*****************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -// css base code, injected by the css-loader -// eslint-disable-next-line func-names -module.exports = function (useSourceMap) { - var list = []; // return the list of modules as css string - - list.toString = function toString() { - return this.map(function (item) { - var content = cssWithMappingToString(item, useSourceMap); - - if (item[2]) { - return "@media ".concat(item[2], " {").concat(content, "}"); - } - - return content; - }).join(''); - }; // import a list of modules into the list - // eslint-disable-next-line func-names - - - list.i = function (modules, mediaQuery, dedupe) { - if (typeof modules === 'string') { - // eslint-disable-next-line no-param-reassign - modules = [[null, modules, '']]; - } - - var alreadyImportedModules = {}; - - if (dedupe) { - for (var i = 0; i < this.length; i++) { - // eslint-disable-next-line prefer-destructuring - var id = this[i][0]; - - if (id != null) { - alreadyImportedModules[id] = true; - } - } - } - - for (var _i = 0; _i < modules.length; _i++) { - var item = [].concat(modules[_i]); - - if (dedupe && alreadyImportedModules[item[0]]) { - // eslint-disable-next-line no-continue - continue; - } - - if (mediaQuery) { - if (!item[2]) { - item[2] = mediaQuery; - } else { - item[2] = "".concat(mediaQuery, " and ").concat(item[2]); - } - } - - list.push(item); - } - }; - - return list; -}; - -function cssWithMappingToString(item, useSourceMap) { - var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring - - var cssMapping = item[3]; - - if (!cssMapping) { - return content; - } - - if (useSourceMap && typeof btoa === 'function') { - var sourceMapping = toComment(cssMapping); - var sourceURLs = cssMapping.sources.map(function (source) { - return "/*# sourceURL=".concat(cssMapping.sourceRoot || '').concat(source, " */"); - }); - return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); - } - - return [content].join('\n'); -} // Adapted from convert-source-map (MIT) - - -function toComment(sourceMap) { - // eslint-disable-next-line no-undef - var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); - var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); - return "/*# ".concat(data, " */"); -} - -/***/ }), - -/***/ "./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js": -/*!****************************************************************************!*\ - !*** ./node_modules/style-loader/dist/runtime/injectStylesIntoStyleTag.js ***! - \****************************************************************************/ -/*! no static exports found */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var isOldIE = function isOldIE() { - var memo; - return function memorize() { - if (typeof memo === 'undefined') { - // Test for IE <= 9 as proposed by Browserhacks - // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 - // Tests for existence of standard globals is to allow style-loader - // to operate correctly into non-standard environments - // @see https://github.com/webpack-contrib/style-loader/issues/177 - memo = Boolean(window && document && document.all && !window.atob); - } - - return memo; - }; -}(); - -var getTarget = function getTarget() { - var memo = {}; - return function memorize(target) { - if (typeof memo[target] === 'undefined') { - var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself - - if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { - try { - // This will throw an exception if access to iframe is blocked - // due to cross-origin restrictions - styleTarget = styleTarget.contentDocument.head; - } catch (e) { - // istanbul ignore next - styleTarget = null; - } - } - - memo[target] = styleTarget; - } - - return memo[target]; - }; -}(); - -var stylesInDom = []; - -function getIndexByIdentifier(identifier) { - var result = -1; - - for (var i = 0; i < stylesInDom.length; i++) { - if (stylesInDom[i].identifier === identifier) { - result = i; - break; - } - } - - return result; -} - -function modulesToDom(list, options) { - var idCountMap = {}; - var identifiers = []; - - for (var i = 0; i < list.length; i++) { - var item = list[i]; - var id = options.base ? item[0] + options.base : item[0]; - var count = idCountMap[id] || 0; - var identifier = "".concat(id, " ").concat(count); - idCountMap[id] = count + 1; - var index = getIndexByIdentifier(identifier); - var obj = { - css: item[1], - media: item[2], - sourceMap: item[3] - }; - - if (index !== -1) { - stylesInDom[index].references++; - stylesInDom[index].updater(obj); - } else { - stylesInDom.push({ - identifier: identifier, - updater: addStyle(obj, options), - references: 1 - }); - } - - identifiers.push(identifier); - } - - return identifiers; -} - -function insertStyleElement(options) { - var style = document.createElement('style'); - var attributes = options.attributes || {}; - - if (typeof attributes.nonce === 'undefined') { - var nonce = true ? __webpack_require__.nc : undefined; - - if (nonce) { - attributes.nonce = nonce; - } - } - - Object.keys(attributes).forEach(function (key) { - style.setAttribute(key, attributes[key]); - }); - - if (typeof options.insert === 'function') { - options.insert(style); - } else { - var target = getTarget(options.insert || 'head'); - - if (!target) { - throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); - } - - target.appendChild(style); - } - - return style; -} - -function removeStyleElement(style) { - // istanbul ignore if - if (style.parentNode === null) { - return false; - } - - style.parentNode.removeChild(style); -} -/* istanbul ignore next */ - - -var replaceText = function replaceText() { - var textStore = []; - return function replace(index, replacement) { - textStore[index] = replacement; - return textStore.filter(Boolean).join('\n'); - }; -}(); - -function applyToSingletonTag(style, index, remove, obj) { - var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE - - /* istanbul ignore if */ - - if (style.styleSheet) { - style.styleSheet.cssText = replaceText(index, css); - } else { - var cssNode = document.createTextNode(css); - var childNodes = style.childNodes; - - if (childNodes[index]) { - style.removeChild(childNodes[index]); - } - - if (childNodes.length) { - style.insertBefore(cssNode, childNodes[index]); - } else { - style.appendChild(cssNode); - } - } -} - -function applyToTag(style, options, obj) { - var css = obj.css; - var media = obj.media; - var sourceMap = obj.sourceMap; - - if (media) { - style.setAttribute('media', media); - } else { - style.removeAttribute('media'); - } - - if (sourceMap && btoa) { - css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); - } // For old IE - - /* istanbul ignore if */ - - - if (style.styleSheet) { - style.styleSheet.cssText = css; - } else { - while (style.firstChild) { - style.removeChild(style.firstChild); - } - - style.appendChild(document.createTextNode(css)); - } -} - -var singleton = null; -var singletonCounter = 0; - -function addStyle(obj, options) { - var style; - var update; - var remove; - - if (options.singleton) { - var styleIndex = singletonCounter++; - style = singleton || (singleton = insertStyleElement(options)); - update = applyToSingletonTag.bind(null, style, styleIndex, false); - remove = applyToSingletonTag.bind(null, style, styleIndex, true); - } else { - style = insertStyleElement(options); - update = applyToTag.bind(null, style, options); - - remove = function remove() { - removeStyleElement(style); - }; - } - - update(obj); - return function updateStyle(newObj) { - if (newObj) { - if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { - return; - } - - update(obj = newObj); - } else { - remove(); - } - }; -} - -module.exports = function (list, options) { - options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of - - - could become: - - -
- -
- - Note the use of @polyfill in the comment above a ShadowDOM specific style - declaration. This is a directive to the styling shim to use the selector - in comments in lieu of the next selector when running under polyfill. -*/ -class ShadowCss { - constructor() { - this.strictStyling = true; - } - /* - * Shim some cssText with the given selector. Returns cssText that can - * be included in the document via WebComponents.ShadowCSS.addCssToDocument(css). - * - * When strictStyling is true: - * - selector is the attribute added to all elements inside the host, - * - hostSelector is the attribute added to the host itself. - */ - shimCssText(cssText, selector, hostSelector = '') { - const commentsWithHash = extractCommentsWithHash(cssText); - cssText = stripComments(cssText); - cssText = this._insertDirectives(cssText); - const scopedCssText = this._scopeCssText(cssText, selector, hostSelector); - return [scopedCssText, ...commentsWithHash].join('\n'); - } - _insertDirectives(cssText) { - cssText = this._insertPolyfillDirectivesInCssText(cssText); - return this._insertPolyfillRulesInCssText(cssText); - } - /* - * Process styles to convert native ShadowDOM rules that will trip - * up the css parser; we rely on decorating the stylesheet with inert rules. - * - * For example, we convert this rule: - * - * polyfill-next-selector { content: ':host menu-item'; } - * ::content menu-item { - * - * to this: - * - * scopeName menu-item { - * - **/ - _insertPolyfillDirectivesInCssText(cssText) { - // Difference with webcomponents.js: does not handle comments - return cssText.replace(_cssContentNextSelectorRe, function (...m) { - return m[2] + '{'; - }); - } - /* - * Process styles to add rules which will only apply under the polyfill - * - * For example, we convert this rule: - * - * polyfill-rule { - * content: ':host menu-item'; - * ... - * } - * - * to this: - * - * scopeName menu-item {...} - * - **/ - _insertPolyfillRulesInCssText(cssText) { - // Difference with webcomponents.js: does not handle comments - return cssText.replace(_cssContentRuleRe, (...m) => { - const rule = m[0].replace(m[1], '').replace(m[2], ''); - return m[4] + rule; - }); - } - /* Ensure styles are scoped. Pseudo-scoping takes a rule like: - * - * .foo {... } - * - * and converts this to - * - * scopeName .foo { ... } - */ - _scopeCssText(cssText, scopeSelector, hostSelector) { - const unscopedRules = this._extractUnscopedRulesFromCssText(cssText); - // replace :host and :host-context -shadowcsshost and -shadowcsshost respectively - cssText = this._insertPolyfillHostInCssText(cssText); - cssText = this._convertColonHost(cssText); - cssText = this._convertColonHostContext(cssText); - cssText = this._convertShadowDOMSelectors(cssText); - if (scopeSelector) { - cssText = this._scopeSelectors(cssText, scopeSelector, hostSelector); - } - cssText = cssText + '\n' + unscopedRules; - return cssText.trim(); - } - /* - * Process styles to add rules which will only apply under the polyfill - * and do not process via CSSOM. (CSSOM is destructive to rules on rare - * occasions, e.g. -webkit-calc on Safari.) - * For example, we convert this rule: - * - * @polyfill-unscoped-rule { - * content: 'menu-item'; - * ... } - * - * to this: - * - * menu-item {...} - * - **/ - _extractUnscopedRulesFromCssText(cssText) { - // Difference with webcomponents.js: does not handle comments - let r = ''; - let m; - _cssContentUnscopedRuleRe.lastIndex = 0; - while ((m = _cssContentUnscopedRuleRe.exec(cssText)) !== null) { - const rule = m[0].replace(m[2], '').replace(m[1], m[4]); - r += rule + '\n\n'; - } - return r; - } - /* - * convert a rule like :host(.foo) > .bar { } - * - * to - * - * .foo > .bar - */ - _convertColonHost(cssText) { - return this._convertColonRule(cssText, _cssColonHostRe, this._colonHostPartReplacer); - } - /* - * convert a rule like :host-context(.foo) > .bar { } - * - * to - * - * .foo > .bar, .foo scopeName > .bar { } - * - * and - * - * :host-context(.foo:host) .bar { ... } - * - * to - * - * .foo .bar { ... } - */ - _convertColonHostContext(cssText) { - return this._convertColonRule(cssText, _cssColonHostContextRe, this._colonHostContextPartReplacer); - } - _convertColonRule(cssText, regExp, partReplacer) { - // m[1] = :host(-context), m[2] = contents of (), m[3] rest of rule - return cssText.replace(regExp, function (...m) { - if (m[2]) { - const parts = m[2].split(','); - const r = []; - for (let i = 0; i < parts.length; i++) { - const p = parts[i].trim(); - if (!p) - break; - r.push(partReplacer(_polyfillHostNoCombinator, p, m[3])); - } - return r.join(','); - } - else { - return _polyfillHostNoCombinator + m[3]; - } - }); - } - _colonHostContextPartReplacer(host, part, suffix) { - if (part.indexOf(_polyfillHost) > -1) { - return this._colonHostPartReplacer(host, part, suffix); - } - else { - return host + part + suffix + ', ' + part + ' ' + host + suffix; - } - } - _colonHostPartReplacer(host, part, suffix) { - return host + part.replace(_polyfillHost, '') + suffix; - } - /* - * Convert combinators like ::shadow and pseudo-elements like ::content - * by replacing with space. - */ - _convertShadowDOMSelectors(cssText) { - return _shadowDOMSelectorsRe.reduce((result, pattern) => result.replace(pattern, ' '), cssText); - } - // change a selector like 'div' to 'name div' - _scopeSelectors(cssText, scopeSelector, hostSelector) { - return processRules(cssText, (rule) => { - let selector = rule.selector; - let content = rule.content; - if (rule.selector[0] != '@') { - selector = - this._scopeSelector(rule.selector, scopeSelector, hostSelector, this.strictStyling); - } - else if (rule.selector.startsWith('@media') || rule.selector.startsWith('@supports') || - rule.selector.startsWith('@page') || rule.selector.startsWith('@document')) { - content = this._scopeSelectors(rule.content, scopeSelector, hostSelector); - } - return new CssRule(selector, content); - }); - } - _scopeSelector(selector, scopeSelector, hostSelector, strict) { - return selector.split(',') - .map(part => part.trim().split(_shadowDeepSelectors)) - .map((deepParts) => { - const [shallowPart, ...otherParts] = deepParts; - const applyScope = (shallowPart) => { - if (this._selectorNeedsScoping(shallowPart, scopeSelector)) { - return strict ? - this._applyStrictSelectorScope(shallowPart, scopeSelector, hostSelector) : - this._applySelectorScope(shallowPart, scopeSelector, hostSelector); - } - else { - return shallowPart; - } - }; - return [applyScope(shallowPart), ...otherParts].join(' '); - }) - .join(', '); - } - _selectorNeedsScoping(selector, scopeSelector) { - const re = this._makeScopeMatcher(scopeSelector); - return !re.test(selector); - } - _makeScopeMatcher(scopeSelector) { - const lre = /\[/g; - const rre = /\]/g; - scopeSelector = scopeSelector.replace(lre, '\\[').replace(rre, '\\]'); - return new RegExp('^(' + scopeSelector + ')' + _selectorReSuffix, 'm'); - } - _applySelectorScope(selector, scopeSelector, hostSelector) { - // Difference from webcomponents.js: scopeSelector could not be an array - return this._applySimpleSelectorScope(selector, scopeSelector, hostSelector); - } - // scope via name and [is=name] - _applySimpleSelectorScope(selector, scopeSelector, hostSelector) { - // In Android browser, the lastIndex is not reset when the regex is used in String.replace() - _polyfillHostRe.lastIndex = 0; - if (_polyfillHostRe.test(selector)) { - const replaceBy = this.strictStyling ? `[${hostSelector}]` : scopeSelector; - return selector - .replace(_polyfillHostNoCombinatorRe, (hnc, selector) => { - return selector.replace(/([^:]*)(:*)(.*)/, (_, before, colon, after) => { - return before + replaceBy + colon + after; - }); - }) - .replace(_polyfillHostRe, replaceBy + ' '); - } - return scopeSelector + ' ' + selector; - } - // return a selector with [name] suffix on each simple selector - // e.g. .foo.bar > .zot becomes .foo[name].bar[name] > .zot[name] /** @internal */ - _applyStrictSelectorScope(selector, scopeSelector, hostSelector) { - const isRe = /\[is=([^\]]*)\]/g; - scopeSelector = scopeSelector.replace(isRe, (_, ...parts) => parts[0]); - const attrName = '[' + scopeSelector + ']'; - const _scopeSelectorPart = (p) => { - let scopedP = p.trim(); - if (!scopedP) { - return ''; - } - if (p.indexOf(_polyfillHostNoCombinator) > -1) { - scopedP = this._applySimpleSelectorScope(p, scopeSelector, hostSelector); - } - else { - // remove :host since it should be unnecessary - const t = p.replace(_polyfillHostRe, ''); - if (t.length > 0) { - const matches = t.match(/([^:]*)(:*)(.*)/); - if (matches) { - scopedP = matches[1] + attrName + matches[2] + matches[3]; - } - } - } - return scopedP; - }; - const safeContent = new SafeSelector(selector); - selector = safeContent.content(); - let scopedSelector = ''; - let startIndex = 0; - let res; - const sep = /( |>|\+|~(?!=))\s*/g; - // If a selector appears before :host it should not be shimmed as it - // matches on ancestor elements and not on elements in the host's shadow - // `:host-context(div)` is transformed to - // `-shadowcsshost-no-combinatordiv, div -shadowcsshost-no-combinator` - // the `div` is not part of the component in the 2nd selectors and should not be scoped. - // Historically `component-tag:host` was matching the component so we also want to preserve - // this behavior to avoid breaking legacy apps (it should not match). - // The behavior should be: - // - `tag:host` -> `tag[h]` (this is to avoid breaking legacy apps, should not match anything) - // - `tag :host` -> `tag [h]` (`tag` is not scoped because it's considered part of a - // `:host-context(tag)`) - const hasHost = selector.indexOf(_polyfillHostNoCombinator) > -1; - // Only scope parts after the first `-shadowcsshost-no-combinator` when it is present - let shouldScope = !hasHost; - while ((res = sep.exec(selector)) !== null) { - const separator = res[1]; - const part = selector.slice(startIndex, res.index).trim(); - shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1; - const scopedPart = shouldScope ? _scopeSelectorPart(part) : part; - scopedSelector += `${scopedPart} ${separator} `; - startIndex = sep.lastIndex; - } - const part = selector.substring(startIndex); - shouldScope = shouldScope || part.indexOf(_polyfillHostNoCombinator) > -1; - scopedSelector += shouldScope ? _scopeSelectorPart(part) : part; - // replace the placeholders with their original values - return safeContent.restore(scopedSelector); - } - _insertPolyfillHostInCssText(selector) { - return selector.replace(_colonHostContextRe, _polyfillHostContext) - .replace(_colonHostRe, _polyfillHost); - } -} -class SafeSelector { - constructor(selector) { - this.placeholders = []; - this.index = 0; - // Replaces attribute selectors with placeholders. - // The WS in [attr="va lue"] would otherwise be interpreted as a selector separator. - selector = selector.replace(/(\[[^\]]*\])/g, (_, keep) => { - const replaceBy = `__ph-${this.index}__`; - this.placeholders.push(keep); - this.index++; - return replaceBy; - }); - // Replaces the expression in `:nth-child(2n + 1)` with a placeholder. - // WS and "+" would otherwise be interpreted as selector separators. - this._content = selector.replace(/(:nth-[-\w]+)(\([^)]+\))/g, (_, pseudo, exp) => { - const replaceBy = `__ph-${this.index}__`; - this.placeholders.push(exp); - this.index++; - return pseudo + replaceBy; - }); - } - restore(content) { - return content.replace(/__ph-(\d+)__/g, (ph, index) => this.placeholders[+index]); - } - content() { - return this._content; - } -} -const _cssContentNextSelectorRe = /polyfill-next-selector[^}]*content:[\s]*?(['"])(.*?)\1[;\s]*}([^{]*?){/gim; -const _cssContentRuleRe = /(polyfill-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim; -const _cssContentUnscopedRuleRe = /(polyfill-unscoped-rule)[^}]*(content:[\s]*(['"])(.*?)\3)[;\s]*[^}]*}/gim; -const _polyfillHost = '-shadowcsshost'; -// note: :host-context pre-processed to -shadowcsshostcontext. -const _polyfillHostContext = '-shadowcsscontext'; -const _parenSuffix = ')(?:\\((' + - '(?:\\([^)(]*\\)|[^)(]*)+?' + - ')\\))?([^,{]*)'; -const _cssColonHostRe = new RegExp('(' + _polyfillHost + _parenSuffix, 'gim'); -const _cssColonHostContextRe = new RegExp('(' + _polyfillHostContext + _parenSuffix, 'gim'); -const _polyfillHostNoCombinator = _polyfillHost + '-no-combinator'; -const _polyfillHostNoCombinatorRe = /-shadowcsshost-no-combinator([^\s]*)/; -const _shadowDOMSelectorsRe = [ - /::shadow/g, - /::content/g, - // Deprecated selectors - /\/shadow-deep\//g, - /\/shadow\//g, -]; -// The deep combinator is deprecated in the CSS spec -// Support for `>>>`, `deep`, `::ng-deep` is then also deprecated and will be removed in the future. -// see https://github.com/angular/angular/pull/17677 -const _shadowDeepSelectors = /(?:>>>)|(?:\/deep\/)|(?:::ng-deep)/g; -const _selectorReSuffix = '([>\\s~+\[.,{:][\\s\\S]*)?$'; -const _polyfillHostRe = /-shadowcsshost/gim; -const _colonHostRe = /:host/gim; -const _colonHostContextRe = /:host-context/gim; -const _commentRe = /\/\*\s*[\s\S]*?\*\//g; -function stripComments(input) { - return input.replace(_commentRe, ''); -} -const _commentWithHashRe = /\/\*\s*#\s*source(Mapping)?URL=[\s\S]+?\*\//g; -function extractCommentsWithHash(input) { - return input.match(_commentWithHashRe) || []; -} -const _ruleRe = /(\s*)([^;\{\}]+?)(\s*)((?:{%BLOCK%}?\s*;?)|(?:\s*;))/g; -const _curlyRe = /([{}])/g; -const OPEN_CURLY = '{'; -const CLOSE_CURLY = '}'; -const BLOCK_PLACEHOLDER = '%BLOCK%'; -class CssRule { - constructor(selector, content) { - this.selector = selector; - this.content = content; - } -} -function processRules(input, ruleCallback) { - const inputWithEscapedBlocks = escapeBlocks(input); - let nextBlockIndex = 0; - return inputWithEscapedBlocks.escapedString.replace(_ruleRe, function (...m) { - const selector = m[2]; - let content = ''; - let suffix = m[4]; - let contentPrefix = ''; - if (suffix && suffix.startsWith('{' + BLOCK_PLACEHOLDER)) { - content = inputWithEscapedBlocks.blocks[nextBlockIndex++]; - suffix = suffix.substring(BLOCK_PLACEHOLDER.length + 1); - contentPrefix = '{'; - } - const rule = ruleCallback(new CssRule(selector, content)); - return `${m[1]}${rule.selector}${m[3]}${contentPrefix}${rule.content}${suffix}`; - }); -} -class StringWithEscapedBlocks { - constructor(escapedString, blocks) { - this.escapedString = escapedString; - this.blocks = blocks; - } -} -function escapeBlocks(input) { - const inputParts = input.split(_curlyRe); - const resultParts = []; - const escapedBlocks = []; - let bracketCount = 0; - let currentBlockParts = []; - for (let partIndex = 0; partIndex < inputParts.length; partIndex++) { - const part = inputParts[partIndex]; - if (part == CLOSE_CURLY) { - bracketCount--; - } - if (bracketCount > 0) { - currentBlockParts.push(part); - } - else { - if (currentBlockParts.length > 0) { - escapedBlocks.push(currentBlockParts.join('')); - resultParts.push(BLOCK_PLACEHOLDER); - currentBlockParts = []; - } - resultParts.push(part); - } - if (part == OPEN_CURLY) { - bracketCount++; - } - } - if (currentBlockParts.length > 0) { - escapedBlocks.push(currentBlockParts.join('')); - resultParts.push(BLOCK_PLACEHOLDER); - } - return new StringWithEscapedBlocks(resultParts.join(''), escapedBlocks); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -const COMPONENT_VARIABLE = '%COMP%'; -const HOST_ATTR = `_nghost-${COMPONENT_VARIABLE}`; -const CONTENT_ATTR = `_ngcontent-${COMPONENT_VARIABLE}`; -class StylesCompileDependency { - constructor(name, moduleUrl, setValue) { - this.name = name; - this.moduleUrl = moduleUrl; - this.setValue = setValue; - } -} -class CompiledStylesheet { - constructor(outputCtx, stylesVar, dependencies, isShimmed, meta) { - this.outputCtx = outputCtx; - this.stylesVar = stylesVar; - this.dependencies = dependencies; - this.isShimmed = isShimmed; - this.meta = meta; - } -} -class StyleCompiler { - constructor(_urlResolver) { - this._urlResolver = _urlResolver; - this._shadowCss = new ShadowCss(); - } - compileComponent(outputCtx, comp) { - const template = comp.template; - return this._compileStyles(outputCtx, comp, new CompileStylesheetMetadata({ - styles: template.styles, - styleUrls: template.styleUrls, - moduleUrl: identifierModuleUrl(comp.type) - }), this.needsStyleShim(comp), true); - } - compileStyles(outputCtx, comp, stylesheet, shim = this.needsStyleShim(comp)) { - return this._compileStyles(outputCtx, comp, stylesheet, shim, false); - } - needsStyleShim(comp) { - return comp.template.encapsulation === ViewEncapsulation.Emulated; - } - _compileStyles(outputCtx, comp, stylesheet, shim, isComponentStylesheet) { - const styleExpressions = stylesheet.styles.map(plainStyle => literal(this._shimIfNeeded(plainStyle, shim))); - const dependencies = []; - stylesheet.styleUrls.forEach((styleUrl) => { - const exprIndex = styleExpressions.length; - // Note: This placeholder will be filled later. - styleExpressions.push(null); - dependencies.push(new StylesCompileDependency(getStylesVarName(null), styleUrl, (value) => styleExpressions[exprIndex] = outputCtx.importExpr(value))); - }); - // styles variable contains plain strings and arrays of other styles arrays (recursive), - // so we set its type to dynamic. - const stylesVar = getStylesVarName(isComponentStylesheet ? comp : null); - const stmt = variable(stylesVar) - .set(literalArr(styleExpressions, new ArrayType(DYNAMIC_TYPE, [TypeModifier.Const]))) - .toDeclStmt(null, isComponentStylesheet ? [StmtModifier.Final] : [ - StmtModifier.Final, StmtModifier.Exported - ]); - outputCtx.statements.push(stmt); - return new CompiledStylesheet(outputCtx, stylesVar, dependencies, shim, stylesheet); - } - _shimIfNeeded(style, shim) { - return shim ? this._shadowCss.shimCssText(style, CONTENT_ATTR, HOST_ATTR) : style; - } -} -function getStylesVarName(component) { - let result = `styles`; - if (component) { - result += `_${identifierName(component.type)}`; - } - return result; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * A path is an ordered set of elements. Typically a path is to a - * particular offset in a source file. The head of the list is the top - * most node. The tail is the node that contains the offset directly. - * - * For example, the expression `a + b + c` might have an ast that looks - * like: - * + - * / \ - * a + - * / \ - * b c - * - * The path to the node at offset 9 would be `['+' at 1-10, '+' at 7-10, - * 'c' at 9-10]` and the path the node at offset 1 would be - * `['+' at 1-10, 'a' at 1-2]`. - */ -class AstPath { - constructor(path, position = -1) { - this.path = path; - this.position = position; - } - get empty() { - return !this.path || !this.path.length; - } - get head() { - return this.path[0]; - } - get tail() { - return this.path[this.path.length - 1]; - } - parentOf(node) { - return node && this.path[this.path.indexOf(node) - 1]; - } - childOf(node) { - return this.path[this.path.indexOf(node) + 1]; - } - first(ctor) { - for (let i = this.path.length - 1; i >= 0; i--) { - let item = this.path[i]; - if (item instanceof ctor) - return item; - } - } - push(node) { - this.path.push(node); - } - pop() { - return this.path.pop(); - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -class NodeWithI18n { - constructor(sourceSpan, i18n) { - this.sourceSpan = sourceSpan; - this.i18n = i18n; - } -} -class Text$3 extends NodeWithI18n { - constructor(value, sourceSpan, i18n) { - super(sourceSpan, i18n); - this.value = value; - } - visit(visitor, context) { - return visitor.visitText(this, context); - } -} -class Expansion extends NodeWithI18n { - constructor(switchValue, type, cases, sourceSpan, switchValueSourceSpan, i18n) { - super(sourceSpan, i18n); - this.switchValue = switchValue; - this.type = type; - this.cases = cases; - this.switchValueSourceSpan = switchValueSourceSpan; - } - visit(visitor, context) { - return visitor.visitExpansion(this, context); - } -} -class ExpansionCase { - constructor(value, expression, sourceSpan, valueSourceSpan, expSourceSpan) { - this.value = value; - this.expression = expression; - this.sourceSpan = sourceSpan; - this.valueSourceSpan = valueSourceSpan; - this.expSourceSpan = expSourceSpan; - } - visit(visitor, context) { - return visitor.visitExpansionCase(this, context); - } -} -class Attribute extends NodeWithI18n { - constructor(name, value, sourceSpan, valueSpan, i18n) { - super(sourceSpan, i18n); - this.name = name; - this.value = value; - this.valueSpan = valueSpan; - } - visit(visitor, context) { - return visitor.visitAttribute(this, context); - } -} -class Element$1 extends NodeWithI18n { - constructor(name, attrs, children, sourceSpan, startSourceSpan = null, endSourceSpan = null, i18n) { - super(sourceSpan, i18n); - this.name = name; - this.attrs = attrs; - this.children = children; - this.startSourceSpan = startSourceSpan; - this.endSourceSpan = endSourceSpan; - } - visit(visitor, context) { - return visitor.visitElement(this, context); - } -} -class Comment { - constructor(value, sourceSpan) { - this.value = value; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitComment(this, context); - } -} -function visitAll$1(visitor, nodes, context = null) { - const result = []; - const visit = visitor.visit ? - (ast) => visitor.visit(ast, context) || ast.visit(visitor, context) : - (ast) => ast.visit(visitor, context); - nodes.forEach(ast => { - const astResult = visit(ast); - if (astResult) { - result.push(astResult); - } - }); - return result; -} -class RecursiveVisitor$1 { - constructor() { } - visitElement(ast, context) { - this.visitChildren(context, visit => { - visit(ast.attrs); - visit(ast.children); - }); - } - visitAttribute(ast, context) { } - visitText(ast, context) { } - visitComment(ast, context) { } - visitExpansion(ast, context) { - return this.visitChildren(context, visit => { - visit(ast.cases); - }); - } - visitExpansionCase(ast, context) { } - visitChildren(context, cb) { - let results = []; - let t = this; - function visit(children) { - if (children) - results.push(visitAll$1(t, children, context)); - } - cb(visit); - return Array.prototype.concat.apply([], results); - } -} -function spanOf(ast) { - const start = ast.sourceSpan.start.offset; - let end = ast.sourceSpan.end.offset; - if (ast instanceof Element$1) { - if (ast.endSourceSpan) { - end = ast.endSourceSpan.end.offset; - } - else if (ast.children && ast.children.length) { - end = spanOf(ast.children[ast.children.length - 1]).end; - } - } - return { start, end }; -} -function findNode(nodes, position) { - const path = []; - const visitor = new class extends RecursiveVisitor$1 { - visit(ast, context) { - const span = spanOf(ast); - if (span.start <= position && position < span.end) { - path.push(ast); - } - else { - // Returning a value here will result in the children being skipped. - return true; - } - } - }; - visitAll$1(visitor, nodes); - return new AstPath(path, position); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -var TokenType; -(function (TokenType) { - TokenType[TokenType["TAG_OPEN_START"] = 0] = "TAG_OPEN_START"; - TokenType[TokenType["TAG_OPEN_END"] = 1] = "TAG_OPEN_END"; - TokenType[TokenType["TAG_OPEN_END_VOID"] = 2] = "TAG_OPEN_END_VOID"; - TokenType[TokenType["TAG_CLOSE"] = 3] = "TAG_CLOSE"; - TokenType[TokenType["TEXT"] = 4] = "TEXT"; - TokenType[TokenType["ESCAPABLE_RAW_TEXT"] = 5] = "ESCAPABLE_RAW_TEXT"; - TokenType[TokenType["RAW_TEXT"] = 6] = "RAW_TEXT"; - TokenType[TokenType["COMMENT_START"] = 7] = "COMMENT_START"; - TokenType[TokenType["COMMENT_END"] = 8] = "COMMENT_END"; - TokenType[TokenType["CDATA_START"] = 9] = "CDATA_START"; - TokenType[TokenType["CDATA_END"] = 10] = "CDATA_END"; - TokenType[TokenType["ATTR_NAME"] = 11] = "ATTR_NAME"; - TokenType[TokenType["ATTR_QUOTE"] = 12] = "ATTR_QUOTE"; - TokenType[TokenType["ATTR_VALUE"] = 13] = "ATTR_VALUE"; - TokenType[TokenType["DOC_TYPE"] = 14] = "DOC_TYPE"; - TokenType[TokenType["EXPANSION_FORM_START"] = 15] = "EXPANSION_FORM_START"; - TokenType[TokenType["EXPANSION_CASE_VALUE"] = 16] = "EXPANSION_CASE_VALUE"; - TokenType[TokenType["EXPANSION_CASE_EXP_START"] = 17] = "EXPANSION_CASE_EXP_START"; - TokenType[TokenType["EXPANSION_CASE_EXP_END"] = 18] = "EXPANSION_CASE_EXP_END"; - TokenType[TokenType["EXPANSION_FORM_END"] = 19] = "EXPANSION_FORM_END"; - TokenType[TokenType["EOF"] = 20] = "EOF"; -})(TokenType || (TokenType = {})); -class Token { - constructor(type, parts, sourceSpan) { - this.type = type; - this.parts = parts; - this.sourceSpan = sourceSpan; - } -} -class TokenError extends ParseError { - constructor(errorMsg, tokenType, span) { - super(span, errorMsg); - this.tokenType = tokenType; - } -} -class TokenizeResult { - constructor(tokens, errors) { - this.tokens = tokens; - this.errors = errors; - } -} -function tokenize(source, url, getTagDefinition, options = {}) { - return new _Tokenizer(new ParseSourceFile(source, url), getTagDefinition, options).tokenize(); -} -const _CR_OR_CRLF_REGEXP = /\r\n?/g; -function _unexpectedCharacterErrorMsg(charCode) { - const char = charCode === $EOF ? 'EOF' : String.fromCharCode(charCode); - return `Unexpected character "${char}"`; -} -function _unknownEntityErrorMsg(entitySrc) { - return `Unknown entity "${entitySrc}" - use the "&#;" or "&#x;" syntax`; -} -class _ControlFlowError { - constructor(error) { - this.error = error; - } -} -// See http://www.w3.org/TR/html51/syntax.html#writing -class _Tokenizer { - /** - * @param _file The html source file being tokenized. - * @param _getTagDefinition A function that will retrieve a tag definition for a given tag name. - * @param options Configuration of the tokenization. - */ - constructor(_file, _getTagDefinition, options) { - this._getTagDefinition = _getTagDefinition; - this._currentTokenStart = null; - this._currentTokenType = null; - this._expansionCaseStack = []; - this._inInterpolation = false; - this.tokens = []; - this.errors = []; - this._tokenizeIcu = options.tokenizeExpansionForms || false; - this._interpolationConfig = options.interpolationConfig || DEFAULT_INTERPOLATION_CONFIG; - this._leadingTriviaCodePoints = - options.leadingTriviaChars && options.leadingTriviaChars.map(c => c.codePointAt(0) || 0); - const range = options.range || { endPos: _file.content.length, startPos: 0, startLine: 0, startCol: 0 }; - this._cursor = options.escapedString ? new EscapedCharacterCursor(_file, range) : - new PlainCharacterCursor(_file, range); - this._preserveLineEndings = options.preserveLineEndings || false; - try { - this._cursor.init(); - } - catch (e) { - this.handleError(e); - } - } - _processCarriageReturns(content) { - if (this._preserveLineEndings) { - return content; - } - // http://www.w3.org/TR/html5/syntax.html#preprocessing-the-input-stream - // In order to keep the original position in the source, we can not - // pre-process it. - // Instead CRs are processed right before instantiating the tokens. - return content.replace(_CR_OR_CRLF_REGEXP, '\n'); - } - tokenize() { - while (this._cursor.peek() !== $EOF) { - const start = this._cursor.clone(); - try { - if (this._attemptCharCode($LT)) { - if (this._attemptCharCode($BANG)) { - if (this._attemptCharCode($LBRACKET)) { - this._consumeCdata(start); - } - else if (this._attemptCharCode($MINUS)) { - this._consumeComment(start); - } - else { - this._consumeDocType(start); - } - } - else if (this._attemptCharCode($SLASH)) { - this._consumeTagClose(start); - } - else { - this._consumeTagOpen(start); - } - } - else if (!(this._tokenizeIcu && this._tokenizeExpansionForm())) { - this._consumeText(); - } - } - catch (e) { - this.handleError(e); - } - } - this._beginToken(TokenType.EOF); - this._endToken([]); - return new TokenizeResult(mergeTextTokens(this.tokens), this.errors); - } - /** - * @returns whether an ICU token has been created - * @internal - */ - _tokenizeExpansionForm() { - if (this.isExpansionFormStart()) { - this._consumeExpansionFormStart(); - return true; - } - if (isExpansionCaseStart(this._cursor.peek()) && this._isInExpansionForm()) { - this._consumeExpansionCaseStart(); - return true; - } - if (this._cursor.peek() === $RBRACE) { - if (this._isInExpansionCase()) { - this._consumeExpansionCaseEnd(); - return true; - } - if (this._isInExpansionForm()) { - this._consumeExpansionFormEnd(); - return true; - } - } - return false; - } - _beginToken(type, start = this._cursor.clone()) { - this._currentTokenStart = start; - this._currentTokenType = type; - } - _endToken(parts, end) { - if (this._currentTokenStart === null) { - throw new TokenError('Programming error - attempted to end a token when there was no start to the token', this._currentTokenType, this._cursor.getSpan(end)); - } - if (this._currentTokenType === null) { - throw new TokenError('Programming error - attempted to end a token which has no token type', null, this._cursor.getSpan(this._currentTokenStart)); - } - const token = new Token(this._currentTokenType, parts, this._cursor.getSpan(this._currentTokenStart, this._leadingTriviaCodePoints)); - this.tokens.push(token); - this._currentTokenStart = null; - this._currentTokenType = null; - return token; - } - _createError(msg, span) { - if (this._isInExpansionForm()) { - msg += ` (Do you have an unescaped "{" in your template? Use "{{ '{' }}") to escape it.)`; - } - const error = new TokenError(msg, this._currentTokenType, span); - this._currentTokenStart = null; - this._currentTokenType = null; - return new _ControlFlowError(error); - } - handleError(e) { - if (e instanceof CursorError) { - e = this._createError(e.msg, this._cursor.getSpan(e.cursor)); - } - if (e instanceof _ControlFlowError) { - this.errors.push(e.error); - } - else { - throw e; - } - } - _attemptCharCode(charCode) { - if (this._cursor.peek() === charCode) { - this._cursor.advance(); - return true; - } - return false; - } - _attemptCharCodeCaseInsensitive(charCode) { - if (compareCharCodeCaseInsensitive(this._cursor.peek(), charCode)) { - this._cursor.advance(); - return true; - } - return false; - } - _requireCharCode(charCode) { - const location = this._cursor.clone(); - if (!this._attemptCharCode(charCode)) { - throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(location)); - } - } - _attemptStr(chars) { - const len = chars.length; - if (this._cursor.charsLeft() < len) { - return false; - } - const initialPosition = this._cursor.clone(); - for (let i = 0; i < len; i++) { - if (!this._attemptCharCode(chars.charCodeAt(i))) { - // If attempting to parse the string fails, we want to reset the parser - // to where it was before the attempt - this._cursor = initialPosition; - return false; - } - } - return true; - } - _attemptStrCaseInsensitive(chars) { - for (let i = 0; i < chars.length; i++) { - if (!this._attemptCharCodeCaseInsensitive(chars.charCodeAt(i))) { - return false; - } - } - return true; - } - _requireStr(chars) { - const location = this._cursor.clone(); - if (!this._attemptStr(chars)) { - throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(location)); - } - } - _attemptCharCodeUntilFn(predicate) { - while (!predicate(this._cursor.peek())) { - this._cursor.advance(); - } - } - _requireCharCodeUntilFn(predicate, len) { - const start = this._cursor.clone(); - this._attemptCharCodeUntilFn(predicate); - if (this._cursor.diff(start) < len) { - throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(start)); - } - } - _attemptUntilChar(char) { - while (this._cursor.peek() !== char) { - this._cursor.advance(); - } - } - _readChar(decodeEntities) { - if (decodeEntities && this._cursor.peek() === $AMPERSAND) { - return this._decodeEntity(); - } - else { - // Don't rely upon reading directly from `_input` as the actual char value - // may have been generated from an escape sequence. - const char = String.fromCodePoint(this._cursor.peek()); - this._cursor.advance(); - return char; - } - } - _decodeEntity() { - const start = this._cursor.clone(); - this._cursor.advance(); - if (this._attemptCharCode($HASH)) { - const isHex = this._attemptCharCode($x) || this._attemptCharCode($X); - const codeStart = this._cursor.clone(); - this._attemptCharCodeUntilFn(isDigitEntityEnd); - if (this._cursor.peek() != $SEMICOLON) { - throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan()); - } - const strNum = this._cursor.getChars(codeStart); - this._cursor.advance(); - try { - const charCode = parseInt(strNum, isHex ? 16 : 10); - return String.fromCharCode(charCode); - } - catch (_a) { - throw this._createError(_unknownEntityErrorMsg(this._cursor.getChars(start)), this._cursor.getSpan()); - } - } - else { - const nameStart = this._cursor.clone(); - this._attemptCharCodeUntilFn(isNamedEntityEnd); - if (this._cursor.peek() != $SEMICOLON) { - this._cursor = nameStart; - return '&'; - } - const name = this._cursor.getChars(nameStart); - this._cursor.advance(); - const char = NAMED_ENTITIES[name]; - if (!char) { - throw this._createError(_unknownEntityErrorMsg(name), this._cursor.getSpan(start)); - } - return char; - } - } - _consumeRawText(decodeEntities, endMarkerPredicate) { - this._beginToken(decodeEntities ? TokenType.ESCAPABLE_RAW_TEXT : TokenType.RAW_TEXT); - const parts = []; - while (true) { - const tagCloseStart = this._cursor.clone(); - const foundEndMarker = endMarkerPredicate(); - this._cursor = tagCloseStart; - if (foundEndMarker) { - break; - } - parts.push(this._readChar(decodeEntities)); - } - return this._endToken([this._processCarriageReturns(parts.join(''))]); - } - _consumeComment(start) { - this._beginToken(TokenType.COMMENT_START, start); - this._requireCharCode($MINUS); - this._endToken([]); - this._consumeRawText(false, () => this._attemptStr('-->')); - this._beginToken(TokenType.COMMENT_END); - this._requireStr('-->'); - this._endToken([]); - } - _consumeCdata(start) { - this._beginToken(TokenType.CDATA_START, start); - this._requireStr('CDATA['); - this._endToken([]); - this._consumeRawText(false, () => this._attemptStr(']]>')); - this._beginToken(TokenType.CDATA_END); - this._requireStr(']]>'); - this._endToken([]); - } - _consumeDocType(start) { - this._beginToken(TokenType.DOC_TYPE, start); - const contentStart = this._cursor.clone(); - this._attemptUntilChar($GT); - const content = this._cursor.getChars(contentStart); - this._cursor.advance(); - this._endToken([content]); - } - _consumePrefixAndName() { - const nameOrPrefixStart = this._cursor.clone(); - let prefix = ''; - while (this._cursor.peek() !== $COLON && !isPrefixEnd(this._cursor.peek())) { - this._cursor.advance(); - } - let nameStart; - if (this._cursor.peek() === $COLON) { - prefix = this._cursor.getChars(nameOrPrefixStart); - this._cursor.advance(); - nameStart = this._cursor.clone(); - } - else { - nameStart = nameOrPrefixStart; - } - this._requireCharCodeUntilFn(isNameEnd, prefix === '' ? 0 : 1); - const name = this._cursor.getChars(nameStart); - return [prefix, name]; - } - _consumeTagOpen(start) { - let tagName; - let prefix; - let openTagToken; - let tokensBeforeTagOpen = this.tokens.length; - const innerStart = this._cursor.clone(); - try { - if (!isAsciiLetter(this._cursor.peek())) { - throw this._createError(_unexpectedCharacterErrorMsg(this._cursor.peek()), this._cursor.getSpan(start)); - } - openTagToken = this._consumeTagOpenStart(start); - prefix = openTagToken.parts[0]; - tagName = openTagToken.parts[1]; - this._attemptCharCodeUntilFn(isNotWhitespace); - while (this._cursor.peek() !== $SLASH && this._cursor.peek() !== $GT) { - this._consumeAttributeName(); - this._attemptCharCodeUntilFn(isNotWhitespace); - if (this._attemptCharCode($EQ)) { - this._attemptCharCodeUntilFn(isNotWhitespace); - this._consumeAttributeValue(); - } - this._attemptCharCodeUntilFn(isNotWhitespace); - } - this._consumeTagOpenEnd(); - } - catch (e) { - if (e instanceof _ControlFlowError) { - // When the start tag is invalid (including invalid "attributes"), assume we want a "<" - this._cursor = innerStart; - if (openTagToken) { - this.tokens.length = tokensBeforeTagOpen; - } - // Back to back text tokens are merged at the end - this._beginToken(TokenType.TEXT, start); - this._endToken(['<']); - return; - } - throw e; - } - const contentTokenType = this._getTagDefinition(tagName).contentType; - if (contentTokenType === TagContentType.RAW_TEXT) { - this._consumeRawTextWithTagClose(prefix, tagName, false); - } - else if (contentTokenType === TagContentType.ESCAPABLE_RAW_TEXT) { - this._consumeRawTextWithTagClose(prefix, tagName, true); - } - } - _consumeRawTextWithTagClose(prefix, tagName, decodeEntities) { - const textToken = this._consumeRawText(decodeEntities, () => { - if (!this._attemptCharCode($LT)) - return false; - if (!this._attemptCharCode($SLASH)) - return false; - this._attemptCharCodeUntilFn(isNotWhitespace); - if (!this._attemptStrCaseInsensitive(tagName)) - return false; - this._attemptCharCodeUntilFn(isNotWhitespace); - return this._attemptCharCode($GT); - }); - this._beginToken(TokenType.TAG_CLOSE); - this._requireCharCodeUntilFn(code => code === $GT, 3); - this._cursor.advance(); // Consume the `>` - this._endToken([prefix, tagName]); - } - _consumeTagOpenStart(start) { - this._beginToken(TokenType.TAG_OPEN_START, start); - const parts = this._consumePrefixAndName(); - return this._endToken(parts); - } - _consumeAttributeName() { - const attrNameStart = this._cursor.peek(); - if (attrNameStart === $SQ || attrNameStart === $DQ) { - throw this._createError(_unexpectedCharacterErrorMsg(attrNameStart), this._cursor.getSpan()); - } - this._beginToken(TokenType.ATTR_NAME); - const prefixAndName = this._consumePrefixAndName(); - this._endToken(prefixAndName); - } - _consumeAttributeValue() { - let value; - if (this._cursor.peek() === $SQ || this._cursor.peek() === $DQ) { - this._beginToken(TokenType.ATTR_QUOTE); - const quoteChar = this._cursor.peek(); - this._cursor.advance(); - this._endToken([String.fromCodePoint(quoteChar)]); - this._beginToken(TokenType.ATTR_VALUE); - const parts = []; - while (this._cursor.peek() !== quoteChar) { - parts.push(this._readChar(true)); - } - value = parts.join(''); - this._endToken([this._processCarriageReturns(value)]); - this._beginToken(TokenType.ATTR_QUOTE); - this._cursor.advance(); - this._endToken([String.fromCodePoint(quoteChar)]); - } - else { - this._beginToken(TokenType.ATTR_VALUE); - const valueStart = this._cursor.clone(); - this._requireCharCodeUntilFn(isNameEnd, 1); - value = this._cursor.getChars(valueStart); - this._endToken([this._processCarriageReturns(value)]); - } - } - _consumeTagOpenEnd() { - const tokenType = this._attemptCharCode($SLASH) ? TokenType.TAG_OPEN_END_VOID : TokenType.TAG_OPEN_END; - this._beginToken(tokenType); - this._requireCharCode($GT); - this._endToken([]); - } - _consumeTagClose(start) { - this._beginToken(TokenType.TAG_CLOSE, start); - this._attemptCharCodeUntilFn(isNotWhitespace); - const prefixAndName = this._consumePrefixAndName(); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._requireCharCode($GT); - this._endToken(prefixAndName); - } - _consumeExpansionFormStart() { - this._beginToken(TokenType.EXPANSION_FORM_START); - this._requireCharCode($LBRACE); - this._endToken([]); - this._expansionCaseStack.push(TokenType.EXPANSION_FORM_START); - this._beginToken(TokenType.RAW_TEXT); - const condition = this._readUntil($COMMA); - this._endToken([condition]); - this._requireCharCode($COMMA); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._beginToken(TokenType.RAW_TEXT); - const type = this._readUntil($COMMA); - this._endToken([type]); - this._requireCharCode($COMMA); - this._attemptCharCodeUntilFn(isNotWhitespace); - } - _consumeExpansionCaseStart() { - this._beginToken(TokenType.EXPANSION_CASE_VALUE); - const value = this._readUntil($LBRACE).trim(); - this._endToken([value]); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._beginToken(TokenType.EXPANSION_CASE_EXP_START); - this._requireCharCode($LBRACE); - this._endToken([]); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._expansionCaseStack.push(TokenType.EXPANSION_CASE_EXP_START); - } - _consumeExpansionCaseEnd() { - this._beginToken(TokenType.EXPANSION_CASE_EXP_END); - this._requireCharCode($RBRACE); - this._endToken([]); - this._attemptCharCodeUntilFn(isNotWhitespace); - this._expansionCaseStack.pop(); - } - _consumeExpansionFormEnd() { - this._beginToken(TokenType.EXPANSION_FORM_END); - this._requireCharCode($RBRACE); - this._endToken([]); - this._expansionCaseStack.pop(); - } - _consumeText() { - const start = this._cursor.clone(); - this._beginToken(TokenType.TEXT, start); - const parts = []; - do { - if (this._interpolationConfig && this._attemptStr(this._interpolationConfig.start)) { - parts.push(this._interpolationConfig.start); - this._inInterpolation = true; - } - else if (this._interpolationConfig && this._inInterpolation && - this._attemptStr(this._interpolationConfig.end)) { - parts.push(this._interpolationConfig.end); - this._inInterpolation = false; - } - else { - parts.push(this._readChar(true)); - } - } while (!this._isTextEnd()); - this._endToken([this._processCarriageReturns(parts.join(''))]); - } - _isTextEnd() { - if (this._cursor.peek() === $LT || this._cursor.peek() === $EOF) { - return true; - } - if (this._tokenizeIcu && !this._inInterpolation) { - if (this.isExpansionFormStart()) { - // start of an expansion form - return true; - } - if (this._cursor.peek() === $RBRACE && this._isInExpansionCase()) { - // end of and expansion case - return true; - } - } - return false; - } - _readUntil(char) { - const start = this._cursor.clone(); - this._attemptUntilChar(char); - return this._cursor.getChars(start); - } - _isInExpansionCase() { - return this._expansionCaseStack.length > 0 && - this._expansionCaseStack[this._expansionCaseStack.length - 1] === - TokenType.EXPANSION_CASE_EXP_START; - } - _isInExpansionForm() { - return this._expansionCaseStack.length > 0 && - this._expansionCaseStack[this._expansionCaseStack.length - 1] === - TokenType.EXPANSION_FORM_START; - } - isExpansionFormStart() { - if (this._cursor.peek() !== $LBRACE) { - return false; - } - if (this._interpolationConfig) { - const start = this._cursor.clone(); - const isInterpolation = this._attemptStr(this._interpolationConfig.start); - this._cursor = start; - return !isInterpolation; - } - return true; - } -} -function isNotWhitespace(code) { - return !isWhitespace(code) || code === $EOF; -} -function isNameEnd(code) { - return isWhitespace(code) || code === $GT || code === $SLASH || - code === $SQ || code === $DQ || code === $EQ; -} -function isPrefixEnd(code) { - return (code < $a || $z < code) && (code < $A || $Z < code) && - (code < $0 || code > $9); -} -function isDigitEntityEnd(code) { - return code == $SEMICOLON || code == $EOF || !isAsciiHexDigit(code); -} -function isNamedEntityEnd(code) { - return code == $SEMICOLON || code == $EOF || !isAsciiLetter(code); -} -function isExpansionCaseStart(peek) { - return peek !== $RBRACE; -} -function compareCharCodeCaseInsensitive(code1, code2) { - return toUpperCaseCharCode(code1) == toUpperCaseCharCode(code2); -} -function toUpperCaseCharCode(code) { - return code >= $a && code <= $z ? code - $a + $A : code; -} -function mergeTextTokens(srcTokens) { - const dstTokens = []; - let lastDstToken = undefined; - for (let i = 0; i < srcTokens.length; i++) { - const token = srcTokens[i]; - if (lastDstToken && lastDstToken.type == TokenType.TEXT && token.type == TokenType.TEXT) { - lastDstToken.parts[0] += token.parts[0]; - lastDstToken.sourceSpan.end = token.sourceSpan.end; - } - else { - lastDstToken = token; - dstTokens.push(lastDstToken); - } - } - return dstTokens; -} -class PlainCharacterCursor { - constructor(fileOrCursor, range) { - if (fileOrCursor instanceof PlainCharacterCursor) { - this.file = fileOrCursor.file; - this.input = fileOrCursor.input; - this.end = fileOrCursor.end; - const state = fileOrCursor.state; - // Note: avoid using `{...fileOrCursor.state}` here as that has a severe performance penalty. - // In ES5 bundles the object spread operator is translated into the `__assign` helper, which - // is not optimized by VMs as efficiently as a raw object literal. Since this constructor is - // called in tight loops, this difference matters. - this.state = { - peek: state.peek, - offset: state.offset, - line: state.line, - column: state.column, - }; - } - else { - if (!range) { - throw new Error('Programming error: the range argument must be provided with a file argument.'); - } - this.file = fileOrCursor; - this.input = fileOrCursor.content; - this.end = range.endPos; - this.state = { - peek: -1, - offset: range.startPos, - line: range.startLine, - column: range.startCol, - }; - } - } - clone() { - return new PlainCharacterCursor(this); - } - peek() { - return this.state.peek; - } - charsLeft() { - return this.end - this.state.offset; - } - diff(other) { - return this.state.offset - other.state.offset; - } - advance() { - this.advanceState(this.state); - } - init() { - this.updatePeek(this.state); - } - getSpan(start, leadingTriviaCodePoints) { - start = start || this; - let cloned = false; - if (leadingTriviaCodePoints) { - while (this.diff(start) > 0 && leadingTriviaCodePoints.indexOf(start.peek()) !== -1) { - if (!cloned) { - start = start.clone(); - cloned = true; - } - start.advance(); - } - } - return new ParseSourceSpan(new ParseLocation(start.file, start.state.offset, start.state.line, start.state.column), new ParseLocation(this.file, this.state.offset, this.state.line, this.state.column)); - } - getChars(start) { - return this.input.substring(start.state.offset, this.state.offset); - } - charAt(pos) { - return this.input.charCodeAt(pos); - } - advanceState(state) { - if (state.offset >= this.end) { - this.state = state; - throw new CursorError('Unexpected character "EOF"', this); - } - const currentChar = this.charAt(state.offset); - if (currentChar === $LF) { - state.line++; - state.column = 0; - } - else if (!isNewLine(currentChar)) { - state.column++; - } - state.offset++; - this.updatePeek(state); - } - updatePeek(state) { - state.peek = state.offset >= this.end ? $EOF : this.charAt(state.offset); - } -} -class EscapedCharacterCursor extends PlainCharacterCursor { - constructor(fileOrCursor, range) { - if (fileOrCursor instanceof EscapedCharacterCursor) { - super(fileOrCursor); - this.internalState = Object.assign({}, fileOrCursor.internalState); - } - else { - super(fileOrCursor, range); - this.internalState = this.state; - } - } - advance() { - this.state = this.internalState; - super.advance(); - this.processEscapeSequence(); - } - init() { - super.init(); - this.processEscapeSequence(); - } - clone() { - return new EscapedCharacterCursor(this); - } - getChars(start) { - const cursor = start.clone(); - let chars = ''; - while (cursor.internalState.offset < this.internalState.offset) { - chars += String.fromCodePoint(cursor.peek()); - cursor.advance(); - } - return chars; - } - /** - * Process the escape sequence that starts at the current position in the text. - * - * This method is called to ensure that `peek` has the unescaped value of escape sequences. - */ - processEscapeSequence() { - const peek = () => this.internalState.peek; - if (peek() === $BACKSLASH) { - // We have hit an escape sequence so we need the internal state to become independent - // of the external state. - this.internalState = Object.assign({}, this.state); - // Move past the backslash - this.advanceState(this.internalState); - // First check for standard control char sequences - if (peek() === $n) { - this.state.peek = $LF; - } - else if (peek() === $r) { - this.state.peek = $CR; - } - else if (peek() === $v) { - this.state.peek = $VTAB; - } - else if (peek() === $t) { - this.state.peek = $TAB; - } - else if (peek() === $b) { - this.state.peek = $BSPACE; - } - else if (peek() === $f) { - this.state.peek = $FF; - } - // Now consider more complex sequences - else if (peek() === $u) { - // Unicode code-point sequence - this.advanceState(this.internalState); // advance past the `u` char - if (peek() === $LBRACE) { - // Variable length Unicode, e.g. `\x{123}` - this.advanceState(this.internalState); // advance past the `{` char - // Advance past the variable number of hex digits until we hit a `}` char - const digitStart = this.clone(); - let length = 0; - while (peek() !== $RBRACE) { - this.advanceState(this.internalState); - length++; - } - this.state.peek = this.decodeHexDigits(digitStart, length); - } - else { - // Fixed length Unicode, e.g. `\u1234` - const digitStart = this.clone(); - this.advanceState(this.internalState); - this.advanceState(this.internalState); - this.advanceState(this.internalState); - this.state.peek = this.decodeHexDigits(digitStart, 4); - } - } - else if (peek() === $x) { - // Hex char code, e.g. `\x2F` - this.advanceState(this.internalState); // advance past the `x` char - const digitStart = this.clone(); - this.advanceState(this.internalState); - this.state.peek = this.decodeHexDigits(digitStart, 2); - } - else if (isOctalDigit(peek())) { - // Octal char code, e.g. `\012`, - let octal = ''; - let length = 0; - let previous = this.clone(); - while (isOctalDigit(peek()) && length < 3) { - previous = this.clone(); - octal += String.fromCodePoint(peek()); - this.advanceState(this.internalState); - length++; - } - this.state.peek = parseInt(octal, 8); - // Backup one char - this.internalState = previous.internalState; - } - else if (isNewLine(this.internalState.peek)) { - // Line continuation `\` followed by a new line - this.advanceState(this.internalState); // advance over the newline - this.state = this.internalState; - } - else { - // If none of the `if` blocks were executed then we just have an escaped normal character. - // In that case we just, effectively, skip the backslash from the character. - this.state.peek = this.internalState.peek; - } - } - } - decodeHexDigits(start, length) { - const hex = this.input.substr(start.internalState.offset, length); - const charCode = parseInt(hex, 16); - if (!isNaN(charCode)) { - return charCode; - } - else { - start.state = start.internalState; - throw new CursorError('Invalid hexadecimal escape sequence', start); - } - } -} -class CursorError { - constructor(msg, cursor) { - this.msg = msg; - this.cursor = cursor; - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -class TreeError extends ParseError { - constructor(elementName, span, msg) { - super(span, msg); - this.elementName = elementName; - } - static create(elementName, span, msg) { - return new TreeError(elementName, span, msg); - } -} -class ParseTreeResult { - constructor(rootNodes, errors) { - this.rootNodes = rootNodes; - this.errors = errors; - } -} -class Parser { - constructor(getTagDefinition) { - this.getTagDefinition = getTagDefinition; - } - parse(source, url, options) { - const tokensAndErrors = tokenize(source, url, this.getTagDefinition, options); - const treeAndErrors = new _TreeBuilder(tokensAndErrors.tokens, this.getTagDefinition).build(); - return new ParseTreeResult(treeAndErrors.rootNodes, tokensAndErrors.errors.concat(treeAndErrors.errors)); - } -} -class _TreeBuilder { - constructor(tokens, getTagDefinition) { - this.tokens = tokens; - this.getTagDefinition = getTagDefinition; - this._index = -1; - this._rootNodes = []; - this._errors = []; - this._elementStack = []; - this._advance(); - } - build() { - while (this._peek.type !== TokenType.EOF) { - if (this._peek.type === TokenType.TAG_OPEN_START) { - this._consumeStartTag(this._advance()); - } - else if (this._peek.type === TokenType.TAG_CLOSE) { - this._consumeEndTag(this._advance()); - } - else if (this._peek.type === TokenType.CDATA_START) { - this._closeVoidElement(); - this._consumeCdata(this._advance()); - } - else if (this._peek.type === TokenType.COMMENT_START) { - this._closeVoidElement(); - this._consumeComment(this._advance()); - } - else if (this._peek.type === TokenType.TEXT || this._peek.type === TokenType.RAW_TEXT || - this._peek.type === TokenType.ESCAPABLE_RAW_TEXT) { - this._closeVoidElement(); - this._consumeText(this._advance()); - } - else if (this._peek.type === TokenType.EXPANSION_FORM_START) { - this._consumeExpansion(this._advance()); - } - else { - // Skip all other tokens... - this._advance(); - } - } - return new ParseTreeResult(this._rootNodes, this._errors); - } - _advance() { - const prev = this._peek; - if (this._index < this.tokens.length - 1) { - // Note: there is always an EOF token at the end - this._index++; - } - this._peek = this.tokens[this._index]; - return prev; - } - _advanceIf(type) { - if (this._peek.type === type) { - return this._advance(); - } - return null; - } - _consumeCdata(startToken) { - this._consumeText(this._advance()); - this._advanceIf(TokenType.CDATA_END); - } - _consumeComment(token) { - const text = this._advanceIf(TokenType.RAW_TEXT); - this._advanceIf(TokenType.COMMENT_END); - const value = text != null ? text.parts[0].trim() : null; - this._addToParent(new Comment(value, token.sourceSpan)); - } - _consumeExpansion(token) { - const switchValue = this._advance(); - const type = this._advance(); - const cases = []; - // read = - while (this._peek.type === TokenType.EXPANSION_CASE_VALUE) { - const expCase = this._parseExpansionCase(); - if (!expCase) - return; // error - cases.push(expCase); - } - // read the final } - if (this._peek.type !== TokenType.EXPANSION_FORM_END) { - this._errors.push(TreeError.create(null, this._peek.sourceSpan, `Invalid ICU message. Missing '}'.`)); - return; - } - const sourceSpan = new ParseSourceSpan(token.sourceSpan.start, this._peek.sourceSpan.end); - this._addToParent(new Expansion(switchValue.parts[0], type.parts[0], cases, sourceSpan, switchValue.sourceSpan)); - this._advance(); - } - _parseExpansionCase() { - const value = this._advance(); - // read { - if (this._peek.type !== TokenType.EXPANSION_CASE_EXP_START) { - this._errors.push(TreeError.create(null, this._peek.sourceSpan, `Invalid ICU message. Missing '{'.`)); - return null; - } - // read until } - const start = this._advance(); - const exp = this._collectExpansionExpTokens(start); - if (!exp) - return null; - const end = this._advance(); - exp.push(new Token(TokenType.EOF, [], end.sourceSpan)); - // parse everything in between { and } - const parsedExp = new _TreeBuilder(exp, this.getTagDefinition).build(); - if (parsedExp.errors.length > 0) { - this._errors = this._errors.concat(parsedExp.errors); - return null; - } - const sourceSpan = new ParseSourceSpan(value.sourceSpan.start, end.sourceSpan.end); - const expSourceSpan = new ParseSourceSpan(start.sourceSpan.start, end.sourceSpan.end); - return new ExpansionCase(value.parts[0], parsedExp.rootNodes, sourceSpan, value.sourceSpan, expSourceSpan); - } - _collectExpansionExpTokens(start) { - const exp = []; - const expansionFormStack = [TokenType.EXPANSION_CASE_EXP_START]; - while (true) { - if (this._peek.type === TokenType.EXPANSION_FORM_START || - this._peek.type === TokenType.EXPANSION_CASE_EXP_START) { - expansionFormStack.push(this._peek.type); - } - if (this._peek.type === TokenType.EXPANSION_CASE_EXP_END) { - if (lastOnStack(expansionFormStack, TokenType.EXPANSION_CASE_EXP_START)) { - expansionFormStack.pop(); - if (expansionFormStack.length == 0) - return exp; - } - else { - this._errors.push(TreeError.create(null, start.sourceSpan, `Invalid ICU message. Missing '}'.`)); - return null; - } - } - if (this._peek.type === TokenType.EXPANSION_FORM_END) { - if (lastOnStack(expansionFormStack, TokenType.EXPANSION_FORM_START)) { - expansionFormStack.pop(); - } - else { - this._errors.push(TreeError.create(null, start.sourceSpan, `Invalid ICU message. Missing '}'.`)); - return null; - } - } - if (this._peek.type === TokenType.EOF) { - this._errors.push(TreeError.create(null, start.sourceSpan, `Invalid ICU message. Missing '}'.`)); - return null; - } - exp.push(this._advance()); - } - } - _consumeText(token) { - let text = token.parts[0]; - if (text.length > 0 && text[0] == '\n') { - const parent = this._getParentElement(); - if (parent != null && parent.children.length == 0 && - this.getTagDefinition(parent.name).ignoreFirstLf) { - text = text.substring(1); - } - } - if (text.length > 0) { - this._addToParent(new Text$3(text, token.sourceSpan)); - } - } - _closeVoidElement() { - const el = this._getParentElement(); - if (el && this.getTagDefinition(el.name).isVoid) { - this._elementStack.pop(); - } - } - _consumeStartTag(startTagToken) { - const prefix = startTagToken.parts[0]; - const name = startTagToken.parts[1]; - const attrs = []; - while (this._peek.type === TokenType.ATTR_NAME) { - attrs.push(this._consumeAttr(this._advance())); - } - const fullName = this._getElementFullName(prefix, name, this._getParentElement()); - let selfClosing = false; - // Note: There could have been a tokenizer error - // so that we don't get a token for the end tag... - if (this._peek.type === TokenType.TAG_OPEN_END_VOID) { - this._advance(); - selfClosing = true; - const tagDef = this.getTagDefinition(fullName); - if (!(tagDef.canSelfClose || getNsPrefix(fullName) !== null || tagDef.isVoid)) { - this._errors.push(TreeError.create(fullName, startTagToken.sourceSpan, `Only void and foreign elements can be self closed "${startTagToken.parts[1]}"`)); - } - } - else if (this._peek.type === TokenType.TAG_OPEN_END) { - this._advance(); - selfClosing = false; - } - const end = this._peek.sourceSpan.start; - const span = new ParseSourceSpan(startTagToken.sourceSpan.start, end); - const el = new Element$1(fullName, attrs, [], span, span, undefined); - this._pushElement(el); - if (selfClosing) { - this._popElement(fullName); - el.endSourceSpan = span; - } - } - _pushElement(el) { - const parentEl = this._getParentElement(); - if (parentEl && this.getTagDefinition(parentEl.name).isClosedByChild(el.name)) { - this._elementStack.pop(); - } - this._addToParent(el); - this._elementStack.push(el); - } - _consumeEndTag(endTagToken) { - const fullName = this._getElementFullName(endTagToken.parts[0], endTagToken.parts[1], this._getParentElement()); - if (this._getParentElement()) { - this._getParentElement().endSourceSpan = endTagToken.sourceSpan; - } - if (this.getTagDefinition(fullName).isVoid) { - this._errors.push(TreeError.create(fullName, endTagToken.sourceSpan, `Void elements do not have end tags "${endTagToken.parts[1]}"`)); - } - else if (!this._popElement(fullName)) { - const errMsg = `Unexpected closing tag "${fullName}". It may happen when the tag has already been closed by another tag. For more info see https://www.w3.org/TR/html5/syntax.html#closing-elements-that-have-implied-end-tags`; - this._errors.push(TreeError.create(fullName, endTagToken.sourceSpan, errMsg)); - } - } - _popElement(fullName) { - for (let stackIndex = this._elementStack.length - 1; stackIndex >= 0; stackIndex--) { - const el = this._elementStack[stackIndex]; - if (el.name == fullName) { - this._elementStack.splice(stackIndex, this._elementStack.length - stackIndex); - return true; - } - if (!this.getTagDefinition(el.name).closedByParent) { - return false; - } - } - return false; - } - _consumeAttr(attrName) { - const fullName = mergeNsAndName(attrName.parts[0], attrName.parts[1]); - let end = attrName.sourceSpan.end; - let value = ''; - let valueSpan = undefined; - if (this._peek.type === TokenType.ATTR_QUOTE) { - this._advance(); - } - if (this._peek.type === TokenType.ATTR_VALUE) { - const valueToken = this._advance(); - value = valueToken.parts[0]; - end = valueToken.sourceSpan.end; - valueSpan = valueToken.sourceSpan; - } - if (this._peek.type === TokenType.ATTR_QUOTE) { - const quoteToken = this._advance(); - end = quoteToken.sourceSpan.end; - } - return new Attribute(fullName, value, new ParseSourceSpan(attrName.sourceSpan.start, end), valueSpan); - } - _getParentElement() { - return this._elementStack.length > 0 ? this._elementStack[this._elementStack.length - 1] : null; - } - /** - * Returns the parent in the DOM and the container. - * - * `` elements are skipped as they are not rendered as DOM element. - */ - _getParentElementSkippingContainers() { - let container = null; - for (let i = this._elementStack.length - 1; i >= 0; i--) { - if (!isNgContainer(this._elementStack[i].name)) { - return { parent: this._elementStack[i], container }; - } - container = this._elementStack[i]; - } - return { parent: null, container }; - } - _addToParent(node) { - const parent = this._getParentElement(); - if (parent != null) { - parent.children.push(node); - } - else { - this._rootNodes.push(node); - } - } - /** - * Insert a node between the parent and the container. - * When no container is given, the node is appended as a child of the parent. - * Also updates the element stack accordingly. - * - * @internal - */ - _insertBeforeContainer(parent, container, node) { - if (!container) { - this._addToParent(node); - this._elementStack.push(node); - } - else { - if (parent) { - // replace the container with the new node in the children - const index = parent.children.indexOf(container); - parent.children[index] = node; - } - else { - this._rootNodes.push(node); - } - node.children.push(container); - this._elementStack.splice(this._elementStack.indexOf(container), 0, node); - } - } - _getElementFullName(prefix, localName, parentElement) { - if (prefix === '') { - prefix = this.getTagDefinition(localName).implicitNamespacePrefix || ''; - if (prefix === '' && parentElement != null) { - prefix = getNsPrefix(parentElement.name); - } - } - return mergeNsAndName(prefix, localName); - } -} -function lastOnStack(stack, element) { - return stack.length > 0 && stack[stack.length - 1] === element; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -class HtmlParser extends Parser { - constructor() { - super(getHtmlTagDefinition); - } - parse(source, url, options) { - return super.parse(source, url, options); - } -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -const PRESERVE_WS_ATTR_NAME = 'ngPreserveWhitespaces'; -const SKIP_WS_TRIM_TAGS = new Set(['pre', 'template', 'textarea', 'script', 'style']); -// Equivalent to \s with \u00a0 (non-breaking space) excluded. -// Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/RegExp -const WS_CHARS = ' \f\n\r\t\v\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff'; -const NO_WS_REGEXP = new RegExp(`[^${WS_CHARS}]`); -const WS_REPLACE_REGEXP = new RegExp(`[${WS_CHARS}]{2,}`, 'g'); -function hasPreserveWhitespacesAttr(attrs) { - return attrs.some((attr) => attr.name === PRESERVE_WS_ATTR_NAME); -} -/** - * Angular Dart introduced &ngsp; as a placeholder for non-removable space, see: - * https://github.com/dart-lang/angular/blob/0bb611387d29d65b5af7f9d2515ab571fd3fbee4/_tests/test/compiler/preserve_whitespace_test.dart#L25-L32 - * In Angular Dart &ngsp; is converted to the 0xE500 PUA (Private Use Areas) unicode character - * and later on replaced by a space. We are re-implementing the same idea here. - */ -function replaceNgsp(value) { - // lexer is replacing the &ngsp; pseudo-entity with NGSP_UNICODE - return value.replace(new RegExp(NGSP_UNICODE, 'g'), ' '); -} -/** - * This visitor can walk HTML parse tree and remove / trim text nodes using the following rules: - * - consider spaces, tabs and new lines as whitespace characters; - * - drop text nodes consisting of whitespace characters only; - * - for all other text nodes replace consecutive whitespace characters with one space; - * - convert &ngsp; pseudo-entity to a single space; - * - * Removal and trimming of whitespaces have positive performance impact (less code to generate - * while compiling templates, faster view creation). At the same time it can be "destructive" - * in some cases (whitespaces can influence layout). Because of the potential of breaking layout - * this visitor is not activated by default in Angular 5 and people need to explicitly opt-in for - * whitespace removal. The default option for whitespace removal will be revisited in Angular 6 - * and might be changed to "on" by default. - */ -class WhitespaceVisitor { - visitElement(element, context) { - if (SKIP_WS_TRIM_TAGS.has(element.name) || hasPreserveWhitespacesAttr(element.attrs)) { - // don't descent into elements where we need to preserve whitespaces - // but still visit all attributes to eliminate one used as a market to preserve WS - return new Element$1(element.name, visitAll$1(this, element.attrs), element.children, element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.i18n); - } - return new Element$1(element.name, element.attrs, visitAllWithSiblings(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan, element.i18n); - } - visitAttribute(attribute, context) { - return attribute.name !== PRESERVE_WS_ATTR_NAME ? attribute : null; - } - visitText(text, context) { - const isNotBlank = text.value.match(NO_WS_REGEXP); - const hasExpansionSibling = context && - (context.prev instanceof Expansion || context.next instanceof Expansion); - if (isNotBlank || hasExpansionSibling) { - return new Text$3(replaceNgsp(text.value).replace(WS_REPLACE_REGEXP, ' '), text.sourceSpan, text.i18n); - } - return null; - } - visitComment(comment, context) { - return comment; - } - visitExpansion(expansion, context) { - return expansion; - } - visitExpansionCase(expansionCase, context) { - return expansionCase; - } -} -function removeWhitespaces(htmlAstWithErrors) { - return new ParseTreeResult(visitAll$1(new WhitespaceVisitor(), htmlAstWithErrors.rootNodes), htmlAstWithErrors.errors); -} -function visitAllWithSiblings(visitor, nodes) { - const result = []; - nodes.forEach((ast, i) => { - const context = { prev: nodes[i - 1], next: nodes[i + 1] }; - const astResult = ast.visit(visitor, context); - if (astResult) { - result.push(astResult); - } - }); - return result; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -// http://cldr.unicode.org/index/cldr-spec/plural-rules -const PLURAL_CASES = ['zero', 'one', 'two', 'few', 'many', 'other']; -/** - * Expands special forms into elements. - * - * For example, - * - * ``` - * { messages.length, plural, - * =0 {zero} - * =1 {one} - * other {more than one} - * } - * ``` - * - * will be expanded into - * - * ``` - * - * zero - * one - * more than one - * - * ``` - */ -function expandNodes(nodes) { - const expander = new _Expander(); - return new ExpansionResult(visitAll$1(expander, nodes), expander.isExpanded, expander.errors); -} -class ExpansionResult { - constructor(nodes, expanded, errors) { - this.nodes = nodes; - this.expanded = expanded; - this.errors = errors; - } -} -class ExpansionError extends ParseError { - constructor(span, errorMsg) { - super(span, errorMsg); - } -} -/** - * Expand expansion forms (plural, select) to directives - * - * @internal - */ -class _Expander { - constructor() { - this.isExpanded = false; - this.errors = []; - } - visitElement(element, context) { - return new Element$1(element.name, element.attrs, visitAll$1(this, element.children), element.sourceSpan, element.startSourceSpan, element.endSourceSpan); - } - visitAttribute(attribute, context) { - return attribute; - } - visitText(text, context) { - return text; - } - visitComment(comment, context) { - return comment; - } - visitExpansion(icu, context) { - this.isExpanded = true; - return icu.type == 'plural' ? _expandPluralForm(icu, this.errors) : - _expandDefaultForm(icu, this.errors); - } - visitExpansionCase(icuCase, context) { - throw new Error('Should not be reached'); - } -} -// Plural forms are expanded to `NgPlural` and `NgPluralCase`s -function _expandPluralForm(ast, errors) { - const children = ast.cases.map(c => { - if (PLURAL_CASES.indexOf(c.value) == -1 && !c.value.match(/^=\d+$/)) { - errors.push(new ExpansionError(c.valueSourceSpan, `Plural cases should be "=" or one of ${PLURAL_CASES.join(', ')}`)); - } - const expansionResult = expandNodes(c.expression); - errors.push(...expansionResult.errors); - return new Element$1(`ng-template`, [new Attribute('ngPluralCase', `${c.value}`, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan); - }); - const switchAttr = new Attribute('[ngPlural]', ast.switchValue, ast.switchValueSourceSpan); - return new Element$1('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan); -} -// ICU messages (excluding plural form) are expanded to `NgSwitch` and `NgSwitchCase`s -function _expandDefaultForm(ast, errors) { - const children = ast.cases.map(c => { - const expansionResult = expandNodes(c.expression); - errors.push(...expansionResult.errors); - if (c.value === 'other') { - // other is the default case when no values match - return new Element$1(`ng-template`, [new Attribute('ngSwitchDefault', '', c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan); - } - return new Element$1(`ng-template`, [new Attribute('ngSwitchCase', `${c.value}`, c.valueSourceSpan)], expansionResult.nodes, c.sourceSpan, c.sourceSpan, c.sourceSpan); - }); - const switchAttr = new Attribute('[ngSwitch]', ast.switchValue, ast.switchValueSourceSpan); - return new Element$1('ng-container', [switchAttr], children, ast.sourceSpan, ast.sourceSpan, ast.sourceSpan); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -/** - * A segment of text within the template. - */ -class TextAst { - constructor(value, ngContentIndex, sourceSpan) { - this.value = value; - this.ngContentIndex = ngContentIndex; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitText(this, context); - } -} -/** - * A bound expression within the text of a template. - */ -class BoundTextAst { - constructor(value, ngContentIndex, sourceSpan) { - this.value = value; - this.ngContentIndex = ngContentIndex; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitBoundText(this, context); - } -} -/** - * A plain attribute on an element. - */ -class AttrAst { - constructor(name, value, sourceSpan) { - this.name = name; - this.value = value; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitAttr(this, context); - } -} -const BoundPropertyMapping = { - [4 /* Animation */]: 4 /* Animation */, - [1 /* Attribute */]: 1 /* Attribute */, - [2 /* Class */]: 2 /* Class */, - [0 /* Property */]: 0 /* Property */, - [3 /* Style */]: 3 /* Style */, -}; -/** - * A binding for an element property (e.g. `[property]="expression"`) or an animation trigger (e.g. - * `[@trigger]="stateExp"`) - */ -class BoundElementPropertyAst { - constructor(name, type, securityContext, value, unit, sourceSpan) { - this.name = name; - this.type = type; - this.securityContext = securityContext; - this.value = value; - this.unit = unit; - this.sourceSpan = sourceSpan; - this.isAnimation = this.type === 4 /* Animation */; - } - static fromBoundProperty(prop) { - const type = BoundPropertyMapping[prop.type]; - return new BoundElementPropertyAst(prop.name, type, prop.securityContext, prop.value, prop.unit, prop.sourceSpan); - } - visit(visitor, context) { - return visitor.visitElementProperty(this, context); - } -} -/** - * A binding for an element event (e.g. `(event)="handler()"`) or an animation trigger event (e.g. - * `(@trigger.phase)="callback($event)"`). - */ -class BoundEventAst { - constructor(name, target, phase, handler, sourceSpan, handlerSpan) { - this.name = name; - this.target = target; - this.phase = phase; - this.handler = handler; - this.sourceSpan = sourceSpan; - this.handlerSpan = handlerSpan; - this.fullName = BoundEventAst.calcFullName(this.name, this.target, this.phase); - this.isAnimation = !!this.phase; - } - static calcFullName(name, target, phase) { - if (target) { - return `${target}:${name}`; - } - if (phase) { - return `@${name}.${phase}`; - } - return name; - } - static fromParsedEvent(event) { - const target = event.type === 0 /* Regular */ ? event.targetOrPhase : null; - const phase = event.type === 1 /* Animation */ ? event.targetOrPhase : null; - return new BoundEventAst(event.name, target, phase, event.handler, event.sourceSpan, event.handlerSpan); - } - visit(visitor, context) { - return visitor.visitEvent(this, context); - } -} -/** - * A reference declaration on an element (e.g. `let someName="expression"`). - */ -class ReferenceAst { - constructor(name, value, originalValue, sourceSpan) { - this.name = name; - this.value = value; - this.originalValue = originalValue; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitReference(this, context); - } -} -/** - * A variable declaration on a (e.g. `var-someName="someLocalName"`). - */ -class VariableAst { - constructor(name, value, sourceSpan, valueSpan) { - this.name = name; - this.value = value; - this.sourceSpan = sourceSpan; - this.valueSpan = valueSpan; - } - static fromParsedVariable(v) { - return new VariableAst(v.name, v.value, v.sourceSpan, v.valueSpan); - } - visit(visitor, context) { - return visitor.visitVariable(this, context); - } -} -/** - * An element declaration in a template. - */ -class ElementAst { - constructor(name, attrs, inputs, outputs, references, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan, endSourceSpan) { - this.name = name; - this.attrs = attrs; - this.inputs = inputs; - this.outputs = outputs; - this.references = references; - this.directives = directives; - this.providers = providers; - this.hasViewContainer = hasViewContainer; - this.queryMatches = queryMatches; - this.children = children; - this.ngContentIndex = ngContentIndex; - this.sourceSpan = sourceSpan; - this.endSourceSpan = endSourceSpan; - } - visit(visitor, context) { - return visitor.visitElement(this, context); - } -} -/** - * A `` element included in an Angular template. - */ -class EmbeddedTemplateAst { - constructor(attrs, outputs, references, variables, directives, providers, hasViewContainer, queryMatches, children, ngContentIndex, sourceSpan) { - this.attrs = attrs; - this.outputs = outputs; - this.references = references; - this.variables = variables; - this.directives = directives; - this.providers = providers; - this.hasViewContainer = hasViewContainer; - this.queryMatches = queryMatches; - this.children = children; - this.ngContentIndex = ngContentIndex; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitEmbeddedTemplate(this, context); - } -} -/** - * A directive property with a bound value (e.g. `*ngIf="condition"). - */ -class BoundDirectivePropertyAst { - constructor(directiveName, templateName, value, sourceSpan) { - this.directiveName = directiveName; - this.templateName = templateName; - this.value = value; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitDirectiveProperty(this, context); - } -} -/** - * A directive declared on an element. - */ -class DirectiveAst { - constructor(directive, inputs, hostProperties, hostEvents, contentQueryStartId, sourceSpan) { - this.directive = directive; - this.inputs = inputs; - this.hostProperties = hostProperties; - this.hostEvents = hostEvents; - this.contentQueryStartId = contentQueryStartId; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitDirective(this, context); - } -} -/** - * A provider declared on an element - */ -class ProviderAst { - constructor(token, multiProvider, eager, providers, providerType, lifecycleHooks, sourceSpan, isModule) { - this.token = token; - this.multiProvider = multiProvider; - this.eager = eager; - this.providers = providers; - this.providerType = providerType; - this.lifecycleHooks = lifecycleHooks; - this.sourceSpan = sourceSpan; - this.isModule = isModule; - } - visit(visitor, context) { - // No visit method in the visitor for now... - return null; - } -} -var ProviderAstType; -(function (ProviderAstType) { - ProviderAstType[ProviderAstType["PublicService"] = 0] = "PublicService"; - ProviderAstType[ProviderAstType["PrivateService"] = 1] = "PrivateService"; - ProviderAstType[ProviderAstType["Component"] = 2] = "Component"; - ProviderAstType[ProviderAstType["Directive"] = 3] = "Directive"; - ProviderAstType[ProviderAstType["Builtin"] = 4] = "Builtin"; -})(ProviderAstType || (ProviderAstType = {})); -/** - * Position where content is to be projected (instance of `` in a template). - */ -class NgContentAst { - constructor(index, ngContentIndex, sourceSpan) { - this.index = index; - this.ngContentIndex = ngContentIndex; - this.sourceSpan = sourceSpan; - } - visit(visitor, context) { - return visitor.visitNgContent(this, context); - } -} -/** - * A visitor that accepts each node but doesn't do anything. It is intended to be used - * as the base class for a visitor that is only interested in a subset of the node types. - */ -class NullTemplateVisitor { - visitNgContent(ast, context) { } - visitEmbeddedTemplate(ast, context) { } - visitElement(ast, context) { } - visitReference(ast, context) { } - visitVariable(ast, context) { } - visitEvent(ast, context) { } - visitElementProperty(ast, context) { } - visitAttr(ast, context) { } - visitBoundText(ast, context) { } - visitText(ast, context) { } - visitDirective(ast, context) { } - visitDirectiveProperty(ast, context) { } -} -/** - * Base class that can be used to build a visitor that visits each node - * in an template ast recursively. - */ -class RecursiveTemplateAstVisitor extends NullTemplateVisitor { - constructor() { - super(); - } - // Nodes with children - visitEmbeddedTemplate(ast, context) { - return this.visitChildren(context, visit => { - visit(ast.attrs); - visit(ast.references); - visit(ast.variables); - visit(ast.directives); - visit(ast.providers); - visit(ast.children); - }); - } - visitElement(ast, context) { - return this.visitChildren(context, visit => { - visit(ast.attrs); - visit(ast.inputs); - visit(ast.outputs); - visit(ast.references); - visit(ast.directives); - visit(ast.providers); - visit(ast.children); - }); - } - visitDirective(ast, context) { - return this.visitChildren(context, visit => { - visit(ast.inputs); - visit(ast.hostProperties); - visit(ast.hostEvents); - }); - } - visitChildren(context, cb) { - let results = []; - let t = this; - function visit(children) { - if (children && children.length) - results.push(templateVisitAll(t, children, context)); - } - cb(visit); - return Array.prototype.concat.apply([], results); - } -} -/** - * Visit every node in a list of {@link TemplateAst}s with the given {@link TemplateAstVisitor}. - */ -function templateVisitAll(visitor, asts, context = null) { - const result = []; - const visit = visitor.visit ? - (ast) => visitor.visit(ast, context) || ast.visit(visitor, context) : - (ast) => ast.visit(visitor, context); - asts.forEach(ast => { - const astResult = visit(ast); - if (astResult) { - result.push(astResult); - } - }); - return result; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -class ProviderError extends ParseError { - constructor(message, span) { - super(span, message); - } -} -class ProviderViewContext { - constructor(reflector, component) { - this.reflector = reflector; - this.component = component; - this.errors = []; - this.viewQueries = _getViewQueries(component); - this.viewProviders = new Map(); - component.viewProviders.forEach((provider) => { - if (this.viewProviders.get(tokenReference(provider.token)) == null) { - this.viewProviders.set(tokenReference(provider.token), true); - } - }); - } -} -class ProviderElementContext { - constructor(viewContext, _parent, _isViewRoot, _directiveAsts, attrs, refs, isTemplate, contentQueryStartId, _sourceSpan) { - this.viewContext = viewContext; - this._parent = _parent; - this._isViewRoot = _isViewRoot; - this._directiveAsts = _directiveAsts; - this._sourceSpan = _sourceSpan; - this._transformedProviders = new Map(); - this._seenProviders = new Map(); - this._queriedTokens = new Map(); - this.transformedHasViewContainer = false; - this._attrs = {}; - attrs.forEach((attrAst) => this._attrs[attrAst.name] = attrAst.value); - const directivesMeta = _directiveAsts.map(directiveAst => directiveAst.directive); - this._allProviders = - _resolveProvidersFromDirectives(directivesMeta, _sourceSpan, viewContext.errors); - this._contentQueries = _getContentQueries(contentQueryStartId, directivesMeta); - Array.from(this._allProviders.values()).forEach((provider) => { - this._addQueryReadsTo(provider.token, provider.token, this._queriedTokens); - }); - if (isTemplate) { - const templateRefId = createTokenForExternalReference(this.viewContext.reflector, Identifiers.TemplateRef); - this._addQueryReadsTo(templateRefId, templateRefId, this._queriedTokens); - } - refs.forEach((refAst) => { - let defaultQueryValue = refAst.value || - createTokenForExternalReference(this.viewContext.reflector, Identifiers.ElementRef); - this._addQueryReadsTo({ value: refAst.name }, defaultQueryValue, this._queriedTokens); - }); - if (this._queriedTokens.get(this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef))) { - this.transformedHasViewContainer = true; - } - // create the providers that we know are eager first - Array.from(this._allProviders.values()).forEach((provider) => { - const eager = provider.eager || this._queriedTokens.get(tokenReference(provider.token)); - if (eager) { - this._getOrCreateLocalProvider(provider.providerType, provider.token, true); - } - }); - } - afterElement() { - // collect lazy providers - Array.from(this._allProviders.values()).forEach((provider) => { - this._getOrCreateLocalProvider(provider.providerType, provider.token, false); - }); - } - get transformProviders() { - // Note: Maps keep their insertion order. - const lazyProviders = []; - const eagerProviders = []; - this._transformedProviders.forEach(provider => { - if (provider.eager) { - eagerProviders.push(provider); - } - else { - lazyProviders.push(provider); - } - }); - return lazyProviders.concat(eagerProviders); - } - get transformedDirectiveAsts() { - const sortedProviderTypes = this.transformProviders.map(provider => provider.token.identifier); - const sortedDirectives = this._directiveAsts.slice(); - sortedDirectives.sort((dir1, dir2) => sortedProviderTypes.indexOf(dir1.directive.type) - - sortedProviderTypes.indexOf(dir2.directive.type)); - return sortedDirectives; - } - get queryMatches() { - const allMatches = []; - this._queriedTokens.forEach((matches) => { - allMatches.push(...matches); - }); - return allMatches; - } - _addQueryReadsTo(token, defaultValue, queryReadTokens) { - this._getQueriesFor(token).forEach((query) => { - const queryValue = query.meta.read || defaultValue; - const tokenRef = tokenReference(queryValue); - let queryMatches = queryReadTokens.get(tokenRef); - if (!queryMatches) { - queryMatches = []; - queryReadTokens.set(tokenRef, queryMatches); - } - queryMatches.push({ queryId: query.queryId, value: queryValue }); - }); - } - _getQueriesFor(token) { - const result = []; - let currentEl = this; - let distance = 0; - let queries; - while (currentEl !== null) { - queries = currentEl._contentQueries.get(tokenReference(token)); - if (queries) { - result.push(...queries.filter((query) => query.meta.descendants || distance <= 1)); - } - if (currentEl._directiveAsts.length > 0) { - distance++; - } - currentEl = currentEl._parent; - } - queries = this.viewContext.viewQueries.get(tokenReference(token)); - if (queries) { - result.push(...queries); - } - return result; - } - _getOrCreateLocalProvider(requestingProviderType, token, eager) { - const resolvedProvider = this._allProviders.get(tokenReference(token)); - if (!resolvedProvider || - ((requestingProviderType === ProviderAstType.Directive || - requestingProviderType === ProviderAstType.PublicService) && - resolvedProvider.providerType === ProviderAstType.PrivateService) || - ((requestingProviderType === ProviderAstType.PrivateService || - requestingProviderType === ProviderAstType.PublicService) && - resolvedProvider.providerType === ProviderAstType.Builtin)) { - return null; - } - let transformedProviderAst = this._transformedProviders.get(tokenReference(token)); - if (transformedProviderAst) { - return transformedProviderAst; - } - if (this._seenProviders.get(tokenReference(token)) != null) { - this.viewContext.errors.push(new ProviderError(`Cannot instantiate cyclic dependency! ${tokenName(token)}`, this._sourceSpan)); - return null; - } - this._seenProviders.set(tokenReference(token), true); - const transformedProviders = resolvedProvider.providers.map((provider) => { - let transformedUseValue = provider.useValue; - let transformedUseExisting = provider.useExisting; - let transformedDeps = undefined; - if (provider.useExisting != null) { - const existingDiDep = this._getDependency(resolvedProvider.providerType, { token: provider.useExisting }, eager); - if (existingDiDep.token != null) { - transformedUseExisting = existingDiDep.token; - } - else { - transformedUseExisting = null; - transformedUseValue = existingDiDep.value; - } - } - else if (provider.useFactory) { - const deps = provider.deps || provider.useFactory.diDeps; - transformedDeps = - deps.map((dep) => this._getDependency(resolvedProvider.providerType, dep, eager)); - } - else if (provider.useClass) { - const deps = provider.deps || provider.useClass.diDeps; - transformedDeps = - deps.map((dep) => this._getDependency(resolvedProvider.providerType, dep, eager)); - } - return _transformProvider(provider, { - useExisting: transformedUseExisting, - useValue: transformedUseValue, - deps: transformedDeps - }); - }); - transformedProviderAst = - _transformProviderAst(resolvedProvider, { eager: eager, providers: transformedProviders }); - this._transformedProviders.set(tokenReference(token), transformedProviderAst); - return transformedProviderAst; - } - _getLocalDependency(requestingProviderType, dep, eager = false) { - if (dep.isAttribute) { - const attrValue = this._attrs[dep.token.value]; - return { isValue: true, value: attrValue == null ? null : attrValue }; - } - if (dep.token != null) { - // access builtints - if ((requestingProviderType === ProviderAstType.Directive || - requestingProviderType === ProviderAstType.Component)) { - if (tokenReference(dep.token) === - this.viewContext.reflector.resolveExternalReference(Identifiers.Renderer) || - tokenReference(dep.token) === - this.viewContext.reflector.resolveExternalReference(Identifiers.ElementRef) || - tokenReference(dep.token) === - this.viewContext.reflector.resolveExternalReference(Identifiers.ChangeDetectorRef) || - tokenReference(dep.token) === - this.viewContext.reflector.resolveExternalReference(Identifiers.TemplateRef)) { - return dep; - } - if (tokenReference(dep.token) === - this.viewContext.reflector.resolveExternalReference(Identifiers.ViewContainerRef)) { - this.transformedHasViewContainer = true; - } - } - // access the injector - if (tokenReference(dep.token) === - this.viewContext.reflector.resolveExternalReference(Identifiers.Injector)) { - return dep; - } - // access providers - if (this._getOrCreateLocalProvider(requestingProviderType, dep.token, eager) != null) { - return dep; - } - } - return null; - } - _getDependency(requestingProviderType, dep, eager = false) { - let currElement = this; - let currEager = eager; - let result = null; - if (!dep.isSkipSelf) { - result = this._getLocalDependency(requestingProviderType, dep, eager); - } - if (dep.isSelf) { - if (!result && dep.isOptional) { - result = { isValue: true, value: null }; - } - } - else { - // check parent elements - while (!result && currElement._parent) { - const prevElement = currElement; - currElement = currElement._parent; - if (prevElement._isViewRoot) { - currEager = false; - } - result = currElement._getLocalDependency(ProviderAstType.PublicService, dep, currEager); - } - // check @Host restriction - if (!result) { - if (!dep.isHost || this.viewContext.component.isHost || - this.viewContext.component.type.reference === tokenReference(dep.token) || - this.viewContext.viewProviders.get(tokenReference(dep.token)) != null) { - result = dep; - } - else { - result = dep.isOptional ? { isValue: true, value: null } : null; - } - } - } - if (!result) { - this.viewContext.errors.push(new ProviderError(`No provider for ${tokenName(dep.token)}`, this._sourceSpan)); - } - return result; - } -} -class NgModuleProviderAnalyzer { - constructor(reflector, ngModule, extraProviders, sourceSpan) { - this.reflector = reflector; - this._transformedProviders = new Map(); - this._seenProviders = new Map(); - this._errors = []; - this._allProviders = new Map(); - ngModule.transitiveModule.modules.forEach((ngModuleType) => { - const ngModuleProvider = { token: { identifier: ngModuleType }, useClass: ngModuleType }; - _resolveProviders([ngModuleProvider], ProviderAstType.PublicService, true, sourceSpan, this._errors, this._allProviders, /* isModule */ true); - }); - _resolveProviders(ngModule.transitiveModule.providers.map(entry => entry.provider).concat(extraProviders), ProviderAstType.PublicService, false, sourceSpan, this._errors, this._allProviders, - /* isModule */ false); - } - parse() { - Array.from(this._allProviders.values()).forEach((provider) => { - this._getOrCreateLocalProvider(provider.token, provider.eager); - }); - if (this._errors.length > 0) { - const errorString = this._errors.join('\n'); - throw new Error(`Provider parse errors:\n${errorString}`); - } - // Note: Maps keep their insertion order. - const lazyProviders = []; - const eagerProviders = []; - this._transformedProviders.forEach(provider => { - if (provider.eager) { - eagerProviders.push(provider); - } - else { - lazyProviders.push(provider); - } - }); - return lazyProviders.concat(eagerProviders); - } - _getOrCreateLocalProvider(token, eager) { - const resolvedProvider = this._allProviders.get(tokenReference(token)); - if (!resolvedProvider) { - return null; - } - let transformedProviderAst = this._transformedProviders.get(tokenReference(token)); - if (transformedProviderAst) { - return transformedProviderAst; - } - if (this._seenProviders.get(tokenReference(token)) != null) { - this._errors.push(new ProviderError(`Cannot instantiate cyclic dependency! ${tokenName(token)}`, resolvedProvider.sourceSpan)); - return null; - } - this._seenProviders.set(tokenReference(token), true); - const transformedProviders = resolvedProvider.providers.map((provider) => { - let transformedUseValue = provider.useValue; - let transformedUseExisting = provider.useExisting; - let transformedDeps = undefined; - if (provider.useExisting != null) { - const existingDiDep = this._getDependency({ token: provider.useExisting }, eager, resolvedProvider.sourceSpan); - if (existingDiDep.token != null) { - transformedUseExisting = existingDiDep.token; - } - else { - transformedUseExisting = null; - transformedUseValue = existingDiDep.value; - } - } - else if (provider.useFactory) { - const deps = provider.deps || provider.useFactory.diDeps; - transformedDeps = - deps.map((dep) => this._getDependency(dep, eager, resolvedProvider.sourceSpan)); - } - else if (provider.useClass) { - const deps = provider.deps || provider.useClass.diDeps; - transformedDeps = - deps.map((dep) => this._getDependency(dep, eager, resolvedProvider.sourceSpan)); - } - return _transformProvider(provider, { - useExisting: transformedUseExisting, - useValue: transformedUseValue, - deps: transformedDeps - }); - }); - transformedProviderAst = - _transformProviderAst(resolvedProvider, { eager: eager, providers: transformedProviders }); - this._transformedProviders.set(tokenReference(token), transformedProviderAst); - return transformedProviderAst; - } - _getDependency(dep, eager = false, requestorSourceSpan) { - let foundLocal = false; - if (!dep.isSkipSelf && dep.token != null) { - // access the injector - if (tokenReference(dep.token) === - this.reflector.resolveExternalReference(Identifiers.Injector) || - tokenReference(dep.token) === - this.reflector.resolveExternalReference(Identifiers.ComponentFactoryResolver)) { - foundLocal = true; - // access providers - } - else if (this._getOrCreateLocalProvider(dep.token, eager) != null) { - foundLocal = true; - } - } - return dep; - } -} -function _transformProvider(provider, { useExisting, useValue, deps }) { - return { - token: provider.token, - useClass: provider.useClass, - useExisting: useExisting, - useFactory: provider.useFactory, - useValue: useValue, - deps: deps, - multi: provider.multi - }; -} -function _transformProviderAst(provider, { eager, providers }) { - return new ProviderAst(provider.token, provider.multiProvider, provider.eager || eager, providers, provider.providerType, provider.lifecycleHooks, provider.sourceSpan, provider.isModule); -} -function _resolveProvidersFromDirectives(directives, sourceSpan, targetErrors) { - const providersByToken = new Map(); - directives.forEach((directive) => { - const dirProvider = { token: { identifier: directive.type }, useClass: directive.type }; - _resolveProviders([dirProvider], directive.isComponent ? ProviderAstType.Component : ProviderAstType.Directive, true, sourceSpan, targetErrors, providersByToken, /* isModule */ false); - }); - // Note: directives need to be able to overwrite providers of a component! - const directivesWithComponentFirst = directives.filter(dir => dir.isComponent).concat(directives.filter(dir => !dir.isComponent)); - directivesWithComponentFirst.forEach((directive) => { - _resolveProviders(directive.providers, ProviderAstType.PublicService, false, sourceSpan, targetErrors, providersByToken, /* isModule */ false); - _resolveProviders(directive.viewProviders, ProviderAstType.PrivateService, false, sourceSpan, targetErrors, providersByToken, /* isModule */ false); - }); - return providersByToken; -} -function _resolveProviders(providers, providerType, eager, sourceSpan, targetErrors, targetProvidersByToken, isModule) { - providers.forEach((provider) => { - let resolvedProvider = targetProvidersByToken.get(tokenReference(provider.token)); - if (resolvedProvider != null && !!resolvedProvider.multiProvider !== !!provider.multi) { - targetErrors.push(new ProviderError(`Mixing multi and non multi provider is not possible for token ${tokenName(resolvedProvider.token)}`, sourceSpan)); - } - if (!resolvedProvider) { - const lifecycleHooks = provider.token.identifier && - provider.token.identifier.lifecycleHooks ? - provider.token.identifier.lifecycleHooks : - []; - const isUseValue = !(provider.useClass || provider.useExisting || provider.useFactory); - resolvedProvider = new ProviderAst(provider.token, !!provider.multi, eager || isUseValue, [provider], providerType, lifecycleHooks, sourceSpan, isModule); - targetProvidersByToken.set(tokenReference(provider.token), resolvedProvider); - } - else { - if (!provider.multi) { - resolvedProvider.providers.length = 0; - } - resolvedProvider.providers.push(provider); - } - }); -} -function _getViewQueries(component) { - // Note: queries start with id 1 so we can use the number in a Bloom filter! - let viewQueryId = 1; - const viewQueries = new Map(); - if (component.viewQueries) { - component.viewQueries.forEach((query) => _addQueryToTokenMap(viewQueries, { meta: query, queryId: viewQueryId++ })); - } - return viewQueries; -} -function _getContentQueries(contentQueryStartId, directives) { - let contentQueryId = contentQueryStartId; - const contentQueries = new Map(); - directives.forEach((directive, directiveIndex) => { - if (directive.queries) { - directive.queries.forEach((query) => _addQueryToTokenMap(contentQueries, { meta: query, queryId: contentQueryId++ })); - } - }); - return contentQueries; -} -function _addQueryToTokenMap(map, query) { - query.meta.selectors.forEach((token) => { - let entry = map.get(tokenReference(token)); - if (!entry) { - entry = []; - map.set(tokenReference(token), entry); - } - entry.push(query); - }); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -class StyleWithImports { - constructor(style, styleUrls) { - this.style = style; - this.styleUrls = styleUrls; - } -} -function isStyleUrlResolvable(url) { - if (url == null || url.length === 0 || url[0] == '/') - return false; - const schemeMatch = url.match(URL_WITH_SCHEMA_REGEXP); - return schemeMatch === null || schemeMatch[1] == 'package' || schemeMatch[1] == 'asset'; -} -/** - * Rewrites stylesheets by resolving and removing the @import urls that - * are either relative or don't have a `package:` scheme - */ -function extractStyleUrls(resolver, baseUrl, cssText) { - const foundUrls = []; - const modifiedCssText = cssText.replace(CSS_STRIPPABLE_COMMENT_REGEXP, '') - .replace(CSS_IMPORT_REGEXP, (...m) => { - const url = m[1] || m[2]; - if (!isStyleUrlResolvable(url)) { - // Do not attempt to resolve non-package absolute URLs with URI - // scheme - return m[0]; - } - foundUrls.push(resolver.resolve(baseUrl, url)); - return ''; - }); - return new StyleWithImports(modifiedCssText, foundUrls); -} -const CSS_IMPORT_REGEXP = /@import\s+(?:url\()?\s*(?:(?:['"]([^'"]*))|([^;\)\s]*))[^;]*;?/g; -const CSS_STRIPPABLE_COMMENT_REGEXP = /\/\*(?!#\s*(?:sourceURL|sourceMappingURL)=)[\s\S]+?\*\//g; -const URL_WITH_SCHEMA_REGEXP = /^([^:/?#]+):/; - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -const PROPERTY_PARTS_SEPARATOR = '.'; -const ATTRIBUTE_PREFIX = 'attr'; -const CLASS_PREFIX = 'class'; -const STYLE_PREFIX = 'style'; -const TEMPLATE_ATTR_PREFIX = '*'; -const ANIMATE_PROP_PREFIX = 'animate-'; -/** - * Parses bindings in templates and in the directive host area. - */ -class BindingParser { - constructor(_exprParser, _interpolationConfig, _schemaRegistry, pipes, errors) { - this._exprParser = _exprParser; - this._interpolationConfig = _interpolationConfig; - this._schemaRegistry = _schemaRegistry; - this.errors = errors; - this.pipesByName = null; - this._usedPipes = new Map(); - // When the `pipes` parameter is `null`, do not check for used pipes - // This is used in IVY when we might not know the available pipes at compile time - if (pipes) { - const pipesByName = new Map(); - pipes.forEach(pipe => pipesByName.set(pipe.name, pipe)); - this.pipesByName = pipesByName; - } - } - get interpolationConfig() { - return this._interpolationConfig; - } - getUsedPipes() { - return Array.from(this._usedPipes.values()); - } - createBoundHostProperties(dirMeta, sourceSpan) { - if (dirMeta.hostProperties) { - const boundProps = []; - Object.keys(dirMeta.hostProperties).forEach(propName => { - const expression = dirMeta.hostProperties[propName]; - if (typeof expression === 'string') { - this.parsePropertyBinding(propName, expression, true, sourceSpan, sourceSpan.start.offset, undefined, [], boundProps); - } - else { - this._reportError(`Value of the host property binding "${propName}" needs to be a string representing an expression but got "${expression}" (${typeof expression})`, sourceSpan); - } - }); - return boundProps; - } - return null; - } - createDirectiveHostPropertyAsts(dirMeta, elementSelector, sourceSpan) { - const boundProps = this.createBoundHostProperties(dirMeta, sourceSpan); - return boundProps && - boundProps.map((prop) => this.createBoundElementProperty(elementSelector, prop)); - } - createDirectiveHostEventAsts(dirMeta, sourceSpan) { - if (dirMeta.hostListeners) { - const targetEvents = []; - Object.keys(dirMeta.hostListeners).forEach(propName => { - const expression = dirMeta.hostListeners[propName]; - if (typeof expression === 'string') { - // TODO: pass a more accurate handlerSpan for this event. - this.parseEvent(propName, expression, sourceSpan, sourceSpan, [], targetEvents); - } - else { - this._reportError(`Value of the host listener "${propName}" needs to be a string representing an expression but got "${expression}" (${typeof expression})`, sourceSpan); - } - }); - return targetEvents; - } - return null; - } - parseInterpolation(value, sourceSpan) { - const sourceInfo = sourceSpan.start.toString(); - try { - const ast = this._exprParser.parseInterpolation(value, sourceInfo, sourceSpan.start.offset, this._interpolationConfig); - if (ast) - this._reportExpressionParserErrors(ast.errors, sourceSpan); - this._checkPipes(ast, sourceSpan); - return ast; - } - catch (e) { - this._reportError(`${e}`, sourceSpan); - return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, sourceSpan.start.offset); - } - } - /** - * Parses the bindings in a microsyntax expression, and converts them to - * `ParsedProperty` or `ParsedVariable`. - * - * @param tplKey template binding name - * @param tplValue template binding value - * @param sourceSpan span of template binding relative to entire the template - * @param absoluteValueOffset start of the tplValue relative to the entire template - * @param targetMatchableAttrs potential attributes to match in the template - * @param targetProps target property bindings in the template - * @param targetVars target variables in the template - */ - parseInlineTemplateBinding(tplKey, tplValue, sourceSpan, absoluteValueOffset, targetMatchableAttrs, targetProps, targetVars) { - const absoluteKeyOffset = sourceSpan.start.offset + TEMPLATE_ATTR_PREFIX.length; - const bindings = this._parseTemplateBindings(tplKey, tplValue, sourceSpan, absoluteKeyOffset, absoluteValueOffset); - for (const binding of bindings) { - // sourceSpan is for the entire HTML attribute. bindingSpan is for a particular - // binding within the microsyntax expression so it's more narrow than sourceSpan. - const bindingSpan = moveParseSourceSpan(sourceSpan, binding.sourceSpan); - const key = binding.key.source; - const keySpan = moveParseSourceSpan(sourceSpan, binding.key.span); - if (binding instanceof VariableBinding) { - const value = binding.value ? binding.value.source : '$implicit'; - const valueSpan = binding.value ? moveParseSourceSpan(sourceSpan, binding.value.span) : undefined; - targetVars.push(new ParsedVariable(key, value, bindingSpan, keySpan, valueSpan)); - } - else if (binding.value) { - const valueSpan = moveParseSourceSpan(sourceSpan, binding.value.ast.sourceSpan); - this._parsePropertyAst(key, binding.value, sourceSpan, valueSpan, targetMatchableAttrs, targetProps); - } - else { - targetMatchableAttrs.push([key, '']); - this.parseLiteralAttr(key, null, sourceSpan, absoluteValueOffset, undefined, targetMatchableAttrs, targetProps); - } - } - } - /** - * Parses the bindings in a microsyntax expression, e.g. - * ``` - * - * ``` - * - * @param tplKey template binding name - * @param tplValue template binding value - * @param sourceSpan span of template binding relative to entire the template - * @param absoluteKeyOffset start of the `tplKey` - * @param absoluteValueOffset start of the `tplValue` - */ - _parseTemplateBindings(tplKey, tplValue, sourceSpan, absoluteKeyOffset, absoluteValueOffset) { - const sourceInfo = sourceSpan.start.toString(); - try { - const bindingsResult = this._exprParser.parseTemplateBindings(tplKey, tplValue, sourceInfo, absoluteKeyOffset, absoluteValueOffset); - this._reportExpressionParserErrors(bindingsResult.errors, sourceSpan); - bindingsResult.templateBindings.forEach((binding) => { - if (binding.value instanceof ASTWithSource) { - this._checkPipes(binding.value, sourceSpan); - } - }); - bindingsResult.warnings.forEach((warning) => { - this._reportError(warning, sourceSpan, ParseErrorLevel.WARNING); - }); - return bindingsResult.templateBindings; - } - catch (e) { - this._reportError(`${e}`, sourceSpan); - return []; - } - } - parseLiteralAttr(name, value, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps) { - if (isAnimationLabel(name)) { - name = name.substring(1); - if (value) { - this._reportError(`Assigning animation triggers via @prop="exp" attributes with an expression is invalid.` + - ` Use property bindings (e.g. [@prop]="exp") or use an attribute without a value (e.g. @prop) instead.`, sourceSpan, ParseErrorLevel.ERROR); - } - this._parseAnimation(name, value, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps); - } - else { - targetProps.push(new ParsedProperty(name, this._exprParser.wrapLiteralPrimitive(value, '', absoluteOffset), ParsedPropertyType.LITERAL_ATTR, sourceSpan, valueSpan)); - } - } - parsePropertyBinding(name, expression, isHost, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps) { - if (name.length === 0) { - this._reportError(`Property name is missing in binding`, sourceSpan); - } - let isAnimationProp = false; - if (name.startsWith(ANIMATE_PROP_PREFIX)) { - isAnimationProp = true; - name = name.substring(ANIMATE_PROP_PREFIX.length); - } - else if (isAnimationLabel(name)) { - isAnimationProp = true; - name = name.substring(1); - } - if (isAnimationProp) { - this._parseAnimation(name, expression, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps); - } - else { - this._parsePropertyAst(name, this._parseBinding(expression, isHost, valueSpan || sourceSpan, absoluteOffset), sourceSpan, valueSpan, targetMatchableAttrs, targetProps); - } - } - parsePropertyInterpolation(name, value, sourceSpan, valueSpan, targetMatchableAttrs, targetProps) { - const expr = this.parseInterpolation(value, valueSpan || sourceSpan); - if (expr) { - this._parsePropertyAst(name, expr, sourceSpan, valueSpan, targetMatchableAttrs, targetProps); - return true; - } - return false; - } - _parsePropertyAst(name, ast, sourceSpan, valueSpan, targetMatchableAttrs, targetProps) { - targetMatchableAttrs.push([name, ast.source]); - targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.DEFAULT, sourceSpan, valueSpan)); - } - _parseAnimation(name, expression, sourceSpan, absoluteOffset, valueSpan, targetMatchableAttrs, targetProps) { - if (name.length === 0) { - this._reportError('Animation trigger is missing', sourceSpan); - } - // This will occur when a @trigger is not paired with an expression. - // For animations it is valid to not have an expression since */void - // states will be applied by angular when the element is attached/detached - const ast = this._parseBinding(expression || 'undefined', false, valueSpan || sourceSpan, absoluteOffset); - targetMatchableAttrs.push([name, ast.source]); - targetProps.push(new ParsedProperty(name, ast, ParsedPropertyType.ANIMATION, sourceSpan, valueSpan)); - } - _parseBinding(value, isHostBinding, sourceSpan, absoluteOffset) { - const sourceInfo = (sourceSpan && sourceSpan.start || '(unknown)').toString(); - try { - const ast = isHostBinding ? - this._exprParser.parseSimpleBinding(value, sourceInfo, absoluteOffset, this._interpolationConfig) : - this._exprParser.parseBinding(value, sourceInfo, absoluteOffset, this._interpolationConfig); - if (ast) - this._reportExpressionParserErrors(ast.errors, sourceSpan); - this._checkPipes(ast, sourceSpan); - return ast; - } - catch (e) { - this._reportError(`${e}`, sourceSpan); - return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset); - } - } - createBoundElementProperty(elementSelector, boundProp, skipValidation = false, mapPropertyName = true) { - if (boundProp.isAnimation) { - return new BoundElementProperty(boundProp.name, 4 /* Animation */, SecurityContext.NONE, boundProp.expression, null, boundProp.sourceSpan, boundProp.valueSpan); - } - let unit = null; - let bindingType = undefined; - let boundPropertyName = null; - const parts = boundProp.name.split(PROPERTY_PARTS_SEPARATOR); - let securityContexts = undefined; - // Check for special cases (prefix style, attr, class) - if (parts.length > 1) { - if (parts[0] == ATTRIBUTE_PREFIX) { - boundPropertyName = parts.slice(1).join(PROPERTY_PARTS_SEPARATOR); - if (!skipValidation) { - this._validatePropertyOrAttributeName(boundPropertyName, boundProp.sourceSpan, true); - } - securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, boundPropertyName, true); - const nsSeparatorIdx = boundPropertyName.indexOf(':'); - if (nsSeparatorIdx > -1) { - const ns = boundPropertyName.substring(0, nsSeparatorIdx); - const name = boundPropertyName.substring(nsSeparatorIdx + 1); - boundPropertyName = mergeNsAndName(ns, name); - } - bindingType = 1 /* Attribute */; - } - else if (parts[0] == CLASS_PREFIX) { - boundPropertyName = parts[1]; - bindingType = 2 /* Class */; - securityContexts = [SecurityContext.NONE]; - } - else if (parts[0] == STYLE_PREFIX) { - unit = parts.length > 2 ? parts[2] : null; - boundPropertyName = parts[1]; - bindingType = 3 /* Style */; - securityContexts = [SecurityContext.STYLE]; - } - } - // If not a special case, use the full property name - if (boundPropertyName === null) { - const mappedPropName = this._schemaRegistry.getMappedPropName(boundProp.name); - boundPropertyName = mapPropertyName ? mappedPropName : boundProp.name; - securityContexts = calcPossibleSecurityContexts(this._schemaRegistry, elementSelector, mappedPropName, false); - bindingType = 0 /* Property */; - if (!skipValidation) { - this._validatePropertyOrAttributeName(mappedPropName, boundProp.sourceSpan, false); - } - } - return new BoundElementProperty(boundPropertyName, bindingType, securityContexts[0], boundProp.expression, unit, boundProp.sourceSpan, boundProp.valueSpan); - } - parseEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents) { - if (name.length === 0) { - this._reportError(`Event name is missing in binding`, sourceSpan); - } - if (isAnimationLabel(name)) { - name = name.substr(1); - this._parseAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents); - } - else { - this._parseRegularEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents); - } - } - calcPossibleSecurityContexts(selector, propName, isAttribute) { - const prop = this._schemaRegistry.getMappedPropName(propName); - return calcPossibleSecurityContexts(this._schemaRegistry, selector, prop, isAttribute); - } - _parseAnimationEvent(name, expression, sourceSpan, handlerSpan, targetEvents) { - const matches = splitAtPeriod(name, [name, '']); - const eventName = matches[0]; - const phase = matches[1].toLowerCase(); - if (phase) { - switch (phase) { - case 'start': - case 'done': - const ast = this._parseAction(expression, handlerSpan); - targetEvents.push(new ParsedEvent(eventName, phase, 1 /* Animation */, ast, sourceSpan, handlerSpan)); - break; - default: - this._reportError(`The provided animation output phase value "${phase}" for "@${eventName}" is not supported (use start or done)`, sourceSpan); - break; - } - } - else { - this._reportError(`The animation trigger output event (@${eventName}) is missing its phase value name (start or done are currently supported)`, sourceSpan); - } - } - _parseRegularEvent(name, expression, sourceSpan, handlerSpan, targetMatchableAttrs, targetEvents) { - // long format: 'target: eventName' - const [target, eventName] = splitAtColon(name, [null, name]); - const ast = this._parseAction(expression, handlerSpan); - targetMatchableAttrs.push([name, ast.source]); - targetEvents.push(new ParsedEvent(eventName, target, 0 /* Regular */, ast, sourceSpan, handlerSpan)); - // Don't detect directives for event names for now, - // so don't add the event name to the matchableAttrs - } - _parseAction(value, sourceSpan) { - const sourceInfo = (sourceSpan && sourceSpan.start || '(unknown').toString(); - const absoluteOffset = (sourceSpan && sourceSpan.start) ? sourceSpan.start.offset : 0; - try { - const ast = this._exprParser.parseAction(value, sourceInfo, absoluteOffset, this._interpolationConfig); - if (ast) { - this._reportExpressionParserErrors(ast.errors, sourceSpan); - } - if (!ast || ast.ast instanceof EmptyExpr) { - this._reportError(`Empty expressions are not allowed`, sourceSpan); - return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset); - } - this._checkPipes(ast, sourceSpan); - return ast; - } - catch (e) { - this._reportError(`${e}`, sourceSpan); - return this._exprParser.wrapLiteralPrimitive('ERROR', sourceInfo, absoluteOffset); - } - } - _reportError(message, sourceSpan, level = ParseErrorLevel.ERROR) { - this.errors.push(new ParseError(sourceSpan, message, level)); - } - _reportExpressionParserErrors(errors, sourceSpan) { - for (const error of errors) { - this._reportError(error.message, sourceSpan); - } - } - // Make sure all the used pipes are known in `this.pipesByName` - _checkPipes(ast, sourceSpan) { - if (ast && this.pipesByName) { - const collector = new PipeCollector(); - ast.visit(collector); - collector.pipes.forEach((ast, pipeName) => { - const pipeMeta = this.pipesByName.get(pipeName); - if (!pipeMeta) { - this._reportError(`The pipe '${pipeName}' could not be found`, new ParseSourceSpan(sourceSpan.start.moveBy(ast.span.start), sourceSpan.start.moveBy(ast.span.end))); - } - else { - this._usedPipes.set(pipeName, pipeMeta); - } - }); - } - } - /** - * @param propName the name of the property / attribute - * @param sourceSpan - * @param isAttr true when binding to an attribute - */ - _validatePropertyOrAttributeName(propName, sourceSpan, isAttr) { - const report = isAttr ? this._schemaRegistry.validateAttribute(propName) : - this._schemaRegistry.validateProperty(propName); - if (report.error) { - this._reportError(report.msg, sourceSpan, ParseErrorLevel.ERROR); - } - } -} -class PipeCollector extends RecursiveAstVisitor$1 { - constructor() { - super(...arguments); - this.pipes = new Map(); - } - visitPipe(ast, context) { - this.pipes.set(ast.name, ast); - ast.exp.visit(this); - this.visitAll(ast.args, context); - return null; - } -} -function isAnimationLabel(name) { - return name[0] == '@'; -} -function calcPossibleSecurityContexts(registry, selector, propName, isAttribute) { - const ctxs = []; - CssSelector.parse(selector).forEach((selector) => { - const elementNames = selector.element ? [selector.element] : registry.allKnownElementNames(); - const notElementNames = new Set(selector.notSelectors.filter(selector => selector.isElementSelector()) - .map((selector) => selector.element)); - const possibleElementNames = elementNames.filter(elementName => !notElementNames.has(elementName)); - ctxs.push(...possibleElementNames.map(elementName => registry.securityContext(elementName, propName, isAttribute))); - }); - return ctxs.length === 0 ? [SecurityContext.NONE] : Array.from(new Set(ctxs)).sort(); -} -/** - * Compute a new ParseSourceSpan based off an original `sourceSpan` by using - * absolute offsets from the specified `absoluteSpan`. - * - * @param sourceSpan original source span - * @param absoluteSpan absolute source span to move to - */ -function moveParseSourceSpan(sourceSpan, absoluteSpan) { - // The difference of two absolute offsets provide the relative offset - const startDiff = absoluteSpan.start - sourceSpan.start.offset; - const endDiff = absoluteSpan.end - sourceSpan.end.offset; - return new ParseSourceSpan(sourceSpan.start.moveBy(startDiff), sourceSpan.end.moveBy(endDiff)); -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -const NG_CONTENT_SELECT_ATTR = 'select'; -const LINK_ELEMENT = 'link'; -const LINK_STYLE_REL_ATTR = 'rel'; -const LINK_STYLE_HREF_ATTR = 'href'; -const LINK_STYLE_REL_VALUE = 'stylesheet'; -const STYLE_ELEMENT = 'style'; -const SCRIPT_ELEMENT = 'script'; -const NG_NON_BINDABLE_ATTR = 'ngNonBindable'; -const NG_PROJECT_AS = 'ngProjectAs'; -function preparseElement(ast) { - let selectAttr = null; - let hrefAttr = null; - let relAttr = null; - let nonBindable = false; - let projectAs = ''; - ast.attrs.forEach(attr => { - const lcAttrName = attr.name.toLowerCase(); - if (lcAttrName == NG_CONTENT_SELECT_ATTR) { - selectAttr = attr.value; - } - else if (lcAttrName == LINK_STYLE_HREF_ATTR) { - hrefAttr = attr.value; - } - else if (lcAttrName == LINK_STYLE_REL_ATTR) { - relAttr = attr.value; - } - else if (attr.name == NG_NON_BINDABLE_ATTR) { - nonBindable = true; - } - else if (attr.name == NG_PROJECT_AS) { - if (attr.value.length > 0) { - projectAs = attr.value; - } - } - }); - selectAttr = normalizeNgContentSelect(selectAttr); - const nodeName = ast.name.toLowerCase(); - let type = PreparsedElementType.OTHER; - if (isNgContent(nodeName)) { - type = PreparsedElementType.NG_CONTENT; - } - else if (nodeName == STYLE_ELEMENT) { - type = PreparsedElementType.STYLE; - } - else if (nodeName == SCRIPT_ELEMENT) { - type = PreparsedElementType.SCRIPT; - } - else if (nodeName == LINK_ELEMENT && relAttr == LINK_STYLE_REL_VALUE) { - type = PreparsedElementType.STYLESHEET; - } - return new PreparsedElement(type, selectAttr, hrefAttr, nonBindable, projectAs); -} -var PreparsedElementType; -(function (PreparsedElementType) { - PreparsedElementType[PreparsedElementType["NG_CONTENT"] = 0] = "NG_CONTENT"; - PreparsedElementType[PreparsedElementType["STYLE"] = 1] = "STYLE"; - PreparsedElementType[PreparsedElementType["STYLESHEET"] = 2] = "STYLESHEET"; - PreparsedElementType[PreparsedElementType["SCRIPT"] = 3] = "SCRIPT"; - PreparsedElementType[PreparsedElementType["OTHER"] = 4] = "OTHER"; -})(PreparsedElementType || (PreparsedElementType = {})); -class PreparsedElement { - constructor(type, selectAttr, hrefAttr, nonBindable, projectAs) { - this.type = type; - this.selectAttr = selectAttr; - this.hrefAttr = hrefAttr; - this.nonBindable = nonBindable; - this.projectAs = projectAs; - } -} -function normalizeNgContentSelect(selectAttr) { - if (selectAttr === null || selectAttr.length === 0) { - return '*'; - } - return selectAttr; -} - -/** - * @license - * Copyright Google Inc. All Rights Reserved. - * - * Use of this source code is governed by an MIT-style license that can be - * found in the LICENSE file at https://angular.io/license - */ -const BIND_NAME_REGEXP = /^(?:(?:(?:(bind-)|(let-)|(ref-|#)|(on-)|(bindon-)|(@))(.*))|\[\(([^\)]+)\)\]|\[([^\]]+)\]|\(([^\)]+)\))$/; -// Group 1 = "bind-" -const KW_BIND_IDX = 1; -// Group 2 = "let-" -const KW_LET_IDX = 2; -// Group 3 = "ref-/#" -const KW_REF_IDX = 3; -// Group 4 = "on-" -const KW_ON_IDX = 4; -// Group 5 = "bindon-" -const KW_BINDON_IDX = 5; -// Group 6 = "@" -const KW_AT_IDX = 6; -// Group 7 = the identifier after "bind-", "let-", "ref-/#", "on-", "bindon-" or "@" -const IDENT_KW_IDX = 7; -// Group 8 = identifier inside [()] -const IDENT_BANANA_BOX_IDX = 8; -// Group 9 = identifier inside [] -const IDENT_PROPERTY_IDX = 9; -// Group 10 = identifier inside () -const IDENT_EVENT_IDX = 10; -const TEMPLATE_ATTR_PREFIX$1 = '*'; -const CLASS_ATTR = 'class'; -let _TEXT_CSS_SELECTOR; -function TEXT_CSS_SELECTOR() { - if (!_TEXT_CSS_SELECTOR) { - _TEXT_CSS_SELECTOR = CssSelector.parse('*')[0]; - } - return _TEXT_CSS_SELECTOR; -} -class TemplateParseError extends ParseError { - constructor(message, span, level) { - super(span, message, level); - } -} -class TemplateParseResult { - constructor(templateAst, usedPipes, errors) { - this.templateAst = templateAst; - this.usedPipes = usedPipes; - this.errors = errors; - } -} -class TemplateParser { - constructor(_config, _reflector, _exprParser, _schemaRegistry, _htmlParser, _console, transforms) { - this._config = _config; - this._reflector = _reflector; - this._exprParser = _exprParser; - this._schemaRegistry = _schemaRegistry; - this._htmlParser = _htmlParser; - this._console = _console; - this.transforms = transforms; - } - get expressionParser() { - return this._exprParser; - } - parse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces) { - const result = this.tryParse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces); - const warnings = result.errors.filter(error => error.level === ParseErrorLevel.WARNING); - const errors = result.errors.filter(error => error.level === ParseErrorLevel.ERROR); - if (warnings.length > 0) { - this._console.warn(`Template parse warnings:\n${warnings.join('\n')}`); - } - if (errors.length > 0) { - const errorString = errors.join('\n'); - throw syntaxError(`Template parse errors:\n${errorString}`, errors); - } - return { template: result.templateAst, pipes: result.usedPipes }; - } - tryParse(component, template, directives, pipes, schemas, templateUrl, preserveWhitespaces) { - let htmlParseResult = typeof template === 'string' ? - this._htmlParser.parse(template, templateUrl, { - tokenizeExpansionForms: true, - interpolationConfig: this.getInterpolationConfig(component) - }) : - template; - if (!preserveWhitespaces) { - htmlParseResult = removeWhitespaces(htmlParseResult); - } - return this.tryParseHtml(this.expandHtml(htmlParseResult), component, directives, pipes, schemas); - } - tryParseHtml(htmlAstWithErrors, component, directives, pipes, schemas) { - let result; - const errors = htmlAstWithErrors.errors; - const usedPipes = []; - if (htmlAstWithErrors.rootNodes.length > 0) { - const uniqDirectives = removeSummaryDuplicates(directives); - const uniqPipes = removeSummaryDuplicates(pipes); - const providerViewContext = new ProviderViewContext(this._reflector, component); - let interpolationConfig = undefined; - if (component.template && component.template.interpolation) { - interpolationConfig = { - start: component.template.interpolation[0], - end: component.template.interpolation[1] - }; - } - const bindingParser = new BindingParser(this._exprParser, interpolationConfig, this._schemaRegistry, uniqPipes, errors); - const parseVisitor = new TemplateParseVisitor(this._reflector, this._config, providerViewContext, uniqDirectives, bindingParser, this._schemaRegistry, schemas, errors); - result = visitAll$1(parseVisitor, htmlAstWithErrors.rootNodes, EMPTY_ELEMENT_CONTEXT); - errors.push(...providerViewContext.errors); - usedPipes.push(...bindingParser.getUsedPipes()); - } - else { - result = []; - } - this._assertNoReferenceDuplicationOnTemplate(result, errors); - if (errors.length > 0) { - return new TemplateParseResult(result, usedPipes, errors); - } - if (this.transforms) { - this.transforms.forEach((transform) => { - result = templateVisitAll(transform, result); - }); - } - return new TemplateParseResult(result, usedPipes, errors); - } - expandHtml(htmlAstWithErrors, forced = false) { - const errors = htmlAstWithErrors.errors; - if (errors.length == 0 || forced) { - // Transform ICU messages to angular directives - const expandedHtmlAst = expandNodes(htmlAstWithErrors.rootNodes); - errors.push(...expandedHtmlAst.errors); - htmlAstWithErrors = new ParseTreeResult(expandedHtmlAst.nodes, errors); - } - return htmlAstWithErrors; - } - getInterpolationConfig(component) { - if (component.template) { - return InterpolationConfig.fromArray(component.template.interpolation); - } - return undefined; - } - /** @internal */ - _assertNoReferenceDuplicationOnTemplate(result, errors) { - const existingReferences = []; - result.filter(element => !!element.references) - .forEach(element => element.references.forEach((reference) => { - const name = reference.name; - if (existingReferences.indexOf(name) < 0) { - existingReferences.push(name); - } - else { - const error = new TemplateParseError(`Reference "#${name}" is defined several times`, reference.sourceSpan, ParseErrorLevel.ERROR); - errors.push(error); - } - })); - } -} -class TemplateParseVisitor { - constructor(reflector, config, providerViewContext, directives, _bindingParser, _schemaRegistry, _schemas, _targetErrors) { - this.reflector = reflector; - this.config = config; - this.providerViewContext = providerViewContext; - this._bindingParser = _bindingParser; - this._schemaRegistry = _schemaRegistry; - this._schemas = _schemas; - this._targetErrors = _targetErrors; - this.selectorMatcher = new SelectorMatcher(); - this.directivesIndex = new Map(); - this.ngContentCount = 0; - // Note: queries start with id 1 so we can use the number in a Bloom filter! - this.contentQueryStartId = providerViewContext.component.viewQueries.length + 1; - directives.forEach((directive, index) => { - const selector = CssSelector.parse(directive.selector); - this.selectorMatcher.addSelectables(selector, directive); - this.directivesIndex.set(directive, index); - }); - } - visitExpansion(expansion, context) { - return null; - } - visitExpansionCase(expansionCase, context) { - return null; - } - visitText(text, parent) { - const ngContentIndex = parent.findNgContentIndex(TEXT_CSS_SELECTOR()); - const valueNoNgsp = replaceNgsp(text.value); - const expr = this._bindingParser.parseInterpolation(valueNoNgsp, text.sourceSpan); - return expr ? new BoundTextAst(expr, ngContentIndex, text.sourceSpan) : - new TextAst(valueNoNgsp, ngContentIndex, text.sourceSpan); - } - visitAttribute(attribute, context) { - return new AttrAst(attribute.name, attribute.value, attribute.sourceSpan); - } - visitComment(comment, context) { - return null; - } - visitElement(element, parent) { - const queryStartIndex = this.contentQueryStartId; - const elName = element.name; - const preparsedElement = preparseElement(element); - if (preparsedElement.type === PreparsedElementType.SCRIPT || - preparsedElement.type === PreparsedElementType.STYLE) { - // Skipping - - - diff --git a/src/assets/tinyMCE/plugins/accordion/plugin.min.js b/src/assets/tinyMCE/plugins/accordion/plugin.min.js deleted file mode 100644 index 10ad7713d..000000000 --- a/src/assets/tinyMCE/plugins/accordion/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const o=e=>t=>typeof t===e,n=e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(o=n=e,(r=String).prototype.isPrototypeOf(o)||(null===(s=n.constructor)||void 0===s?void 0:s.name)===r.name)?"string":t;var o,n,r,s})(e),r=o("boolean"),s=e=>null==e,i=e=>!s(e),a=o("function"),d=o("number"),l=e=>()=>e,c=(e,t)=>e===t,m=l(!1);class u{constructor(e,t){this.tag=e,this.value=t}static some(e){return new u(!0,e)}static none(){return u.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?u.some(e(this.value)):u.none()}bind(e){return this.tag?e(this.value):u.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:u.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return i(e)?u.some(e):u.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}u.singletonNone=new u(!1);const p=Array.prototype.indexOf,g=(e,t)=>{return o=e,n=t,p.call(o,n)>-1;var o,n},h=(e,t)=>{const o=e.length,n=new Array(o);for(let r=0;r{for(let o=0,n=e.length;oe.dom.nodeName.toLowerCase(),w=e=>e.dom.nodeType,b=e=>t=>w(t)===e,N=b(1),T=b(3),A=b(9),C=b(11),S=(e,t,o)=>{if(!(n(o)||r(o)||d(o)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",o,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,o+"")},x=(e,t)=>{const o=e.dom.getAttribute(t);return null===o?void 0:o},D=(e,t)=>u.from(x(e,t)),E=(e,t)=>{e.dom.removeAttribute(t)},M=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},P={fromHtml:(e,t)=>{const o=(t||document).createElement("div");if(o.innerHTML=e,!o.hasChildNodes()||o.childNodes.length>1){const t="HTML does not have a single root node";throw console.error(t,e),new Error(t)}return M(o.childNodes[0])},fromTag:(e,t)=>{const o=(t||document).createElement(e);return M(o)},fromText:(e,t)=>{const o=(t||document).createTextNode(e);return M(o)},fromDom:M,fromPoint:(e,t,o)=>u.from(e.dom.elementFromPoint(t,o)).map(M)},k=(e,t)=>{const o=e.dom;if(1!==o.nodeType)return!1;{const e=o;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},B=e=>1!==e.nodeType&&9!==e.nodeType&&11!==e.nodeType||0===e.childElementCount,O=k,$=(L=/^\s+|\s+$/g,e=>e.replace(L,""));var L;const R=e=>void 0!==e.style&&a(e.style.getPropertyValue),I=e=>A(e)?e:P.fromDom(e.dom.ownerDocument),V=e=>u.from(e.dom.parentNode).map(P.fromDom),j=e=>u.from(e.dom.nextSibling).map(P.fromDom),q=e=>h(e.dom.childNodes,P.fromDom),F=a(Element.prototype.attachShadow)&&a(Node.prototype.getRootNode)?e=>P.fromDom(e.dom.getRootNode()):I,H=e=>P.fromDom(e.dom.host),z=e=>{const t=T(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const o=t.ownerDocument;return(e=>{const t=F(e);return C(o=t)&&i(o.dom.host)?u.some(t):u.none();var o})(P.fromDom(t)).fold((()=>o.body.contains(t)),(n=z,r=H,e=>n(r(e))));var n,r},K=(e,t)=>R(e)?e.style.getPropertyValue(t):"",U=(e,t)=>{V(e).each((o=>{o.dom.insertBefore(t.dom,e.dom)}))},Y=(e,t)=>{j(e).fold((()=>{V(e).each((e=>{_(e,t)}))}),(e=>{U(e,t)}))},_=(e,t)=>{e.dom.appendChild(t.dom)},G=(e,t)=>{f(t,((o,n)=>{const r=0===n?e:t[n-1];Y(r,o)}))},J=(e,t)=>{let o=[];return f(q(e),(e=>{t(e)&&(o=o.concat([e])),o=o.concat(J(e,t))})),o},Q=(e,t,o)=>{let n=e.dom;const r=a(o)?o:m;for(;n.parentNode;){n=n.parentNode;const e=P.fromDom(n);if(t(e))return u.some(e);if(r(e))break}return u.none()},W=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)},X=(e,t,o)=>Q(e,(e=>k(e,t)),o),Z=(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return B(o)?u.none():u.from(o.querySelector(e)).map(P.fromDom)})(t,e),ee=((e,t)=>{const o=t=>e(t)?u.from(t.dom.nodeValue):u.none();return{get:t=>{if(!e(t))throw new Error("Can only get text value of a text node");return o(t).getOr("")},getOption:o,set:(t,o)=>{if(!e(t))throw new Error("Can only set raw text value of a text node");t.dom.nodeValue=o}}})(T);var te=["body","p","div","article","aside","figcaption","figure","footer","header","nav","section","ol","ul","li","table","thead","tbody","tfoot","caption","tr","td","th","h1","h2","h3","h4","h5","h6","blockquote","pre","address"];const oe=(e,t)=>({element:e,offset:t}),ne=(e,t,o)=>e.property().isText(t)&&0===e.property().getText(t).trim().length||e.property().isComment(t)?o(t).bind((t=>ne(e,t,o).orThunk((()=>u.some(t))))):u.none(),re=(e,t)=>e.property().isText(t)?e.property().getText(t).length:e.property().children(t).length,se=(e,t)=>{const o=ne(e,t,e.query().prevSibling).getOr(t);if(e.property().isText(o))return oe(o,re(e,o));const n=e.property().children(o);return n.length>0?se(e,n[n.length-1]):oe(o,re(e,o))},ie=se,ae={up:l({selector:X,closest:(e,t,o)=>((e,t,o,n,r)=>((e,t)=>k(e,t))(o,n)?u.some(o):a(r)&&r(o)?u.none():t(o,n,r))(0,X,e,t,o),predicate:Q,all:(e,t)=>{const o=a(t)?t:m;let n=e.dom;const r=[];for(;null!==n.parentNode&&void 0!==n.parentNode;){const e=n.parentNode,t=P.fromDom(e);if(r.push(t),!0===o(t))break;n=e}return r}}),down:l({selector:(e,t)=>((e,t)=>{const o=void 0===t?document:t.dom;return B(o)?[]:h(o.querySelectorAll(e),P.fromDom)})(t,e),predicate:J}),styles:l({get:(e,t)=>{const o=e.dom,n=window.getComputedStyle(o).getPropertyValue(t);return""!==n||z(e)?n:K(o,t)},getRaw:(e,t)=>{const o=e.dom,n=K(o,t);return u.from(n).filter((e=>e.length>0))},set:(e,t,o)=>{((e,t,o)=>{if(!n(o))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",o,":: Element ",e),new Error("CSS value must be a string: "+o);R(e)&&e.style.setProperty(t,o)})(e.dom,t,o)},remove:(e,t)=>{((e,t)=>{R(e)&&e.style.removeProperty(t)})(e.dom,t),((e,t,o=c)=>e.exists((e=>o(e,t))))(D(e,"style").map($),"")&&E(e,"style")}}),attrs:l({get:x,set:(e,t,o)=>{S(e.dom,t,o)},remove:E,copyTo:(e,t)=>{const o=(n=e.dom.attributes,r=(e,t)=>(e[t.name]=t.value,e),s={},f(n,((e,t)=>{s=r(s,e)})),s);var n,r,s;((e,t)=>{const o=e.dom;((e,t)=>{const o=y(e);for(let n=0,r=o.length;n{S(o,t,e)}))})(t,o)}}),insert:l({before:U,after:Y,afterAll:G,append:_,appendAll:(e,t)=>{f(t,(t=>{_(e,t)}))},prepend:(e,t)=>{(e=>((e,t)=>{const o=e.dom.childNodes;return u.from(o[0]).map(P.fromDom)})(e))(e).fold((()=>{_(e,t)}),(o=>{e.dom.insertBefore(t.dom,o.dom)}))},wrap:(e,t)=>{U(e,t),_(t,e)}}),remove:l({unwrap:e=>{const t=q(e);t.length>0&&G(e,t),W(e)},remove:W}),create:l({nu:P.fromTag,clone:e=>P.fromDom(e.dom.cloneNode(!1)),text:P.fromText}),query:l({comparePosition:(e,t)=>e.dom.compareDocumentPosition(t.dom),prevSibling:e=>u.from(e.dom.previousSibling).map(P.fromDom),nextSibling:j}),property:l({children:q,name:v,parent:V,document:e=>I(e).dom,isText:T,isComment:e=>8===w(e)||"#comment"===v(e),isElement:N,isSpecial:e=>{const t=v(e);return g(["script","noscript","iframe","noframes","noembed","title","style","textarea","xmp"],t)},getLanguage:e=>N(e)?D(e,"lang"):u.none(),getText:e=>ee.get(e),setText:(e,t)=>ee.set(e,t),isBoundary:e=>!!N(e)&&("body"===v(e)||g(te,v(e))),isEmptyTag:e=>!!N(e)&&g(["br","img","hr","input"],v(e)),isNonEditable:e=>N(e)&&"false"===x(e,"contenteditable")}),eq:(e,t)=>e.dom===t.dom,is:O},de="details",le="mce-accordion",ce="mce-accordion-summary",me="mce-accordion-body",ue="div";var pe=tinymce.util.Tools.resolve("tinymce.util.Tools");const ge=e=>"SUMMARY"===(null==e?void 0:e.nodeName),he=e=>"DETAILS"===(null==e?void 0:e.nodeName),fe=e=>e.hasAttribute("open"),ye=e=>{const t=e.selection.getNode();return ge(t)||Boolean(e.dom.getParent(t,ge))},ve=e=>!ye(e)&&e.dom.isEditable(e.selection.getNode()),we=e=>u.from(e.dom.getParent(e.selection.getNode(),he)),be=e=>(e.innerHTML='
',e),Ne=e=>be(e.dom.create("p")),Te=e=>t=>{((e,t)=>{if(ge(null==t?void 0:t.lastChild)){const o=Ne(e);t.appendChild(o),e.selection.setCursorLocation(o,0)}})(e,t),((e,t)=>{if(!ge(null==t?void 0:t.firstChild)){const o=(e=>be(e.dom.create("summary")))(e);t.prepend(o),e.selection.setCursorLocation(o,0)}})(e,t)},Ae=(e,t)=>{const o=null!=t?t:!fe(e);return o?e.setAttribute("open","open"):e.removeAttribute("open"),o},Ce=e=>{e.addCommand("InsertAccordion",(()=>(e=>{if(!ve(e))return;const o=P.fromDom(e.getBody()),n=(e=>{const o=(new Date).getTime(),n=Math.floor(1e9*Math.random());return t++,"acc_"+n+t+String(o)})(),r=e.dom.encode(e.selection.getRng().toString()||e.translate("Accordion summary...")),s=e.dom.encode(e.translate("Accordion body...")),i=`${r}`,a=`<${ue} class="${me}">

${s}

`;e.undoManager.transact((()=>{e.insertContent([`
`,i,a,"
"].join("")),Z(o,`[data-mce-id="${n}"]`).each((t=>{E(t,"data-mce-id"),Z(t,"summary").each((t=>{const o=e.dom.createRng(),n=ie(ae,t);o.setStart(n.element.dom,n.offset),o.setEnd(n.element.dom,n.offset),e.selection.setRng(o)}))}))}))})(e))),e.addCommand("ToggleAccordion",((t,o)=>((e,t)=>{we(e).each((o=>{((e,t,o)=>{e.dispatch("ToggledAccordion",{element:t,state:o})})(e,o,Ae(o,t))}))})(e,o))),e.addCommand("ToggleAllAccordions",((t,o)=>((e,t)=>{const o=Array.from(e.getBody().querySelectorAll("details"));0!==o.length&&(f(o,(e=>Ae(e,null!=t?t:!fe(e)))),((e,t,o)=>{e.dispatch("ToggledAllAccordions",{elements:t,state:o})})(e,o,t))})(e,o))),e.addCommand("RemoveAccordion",(()=>(e=>{we(e).each((t=>{const{nextSibling:o}=t;o?(e.selection.select(o,!0),e.selection.collapse(!0)):((e,t)=>{const o=Ne(e);t.insertAdjacentElement("afterend",o),e.selection.setCursorLocation(o,0)})(e,t),t.remove()}))})(e)))};var Se=tinymce.util.Tools.resolve("tinymce.html.Node");const xe=e=>{var t,o;return null!==(o=null===(t=e.attr("class"))||void 0===t?void 0:t.split(" "))&&void 0!==o?o:[]},De=(e,t)=>{const o=new Set([...xe(e),...t]),n=Array.from(o);n.length>0&&e.attr("class",n.join(" "))},Ee=(e,t)=>{const o=((e,o)=>{const n=[];for(let o=0,s=e.length;o0?o.join(" "):null)},Me=e=>e.name===de&&g(xe(e),le),Pe=e=>{const t=e.children();let o,n;const r=[];for(let e=0;e{const t=new Se("br",1);t.attr("data-mce-bogus","1"),e.empty(),e.append(t)};var Be=tinymce.util.Tools.resolve("tinymce.util.VK");const Oe=e=>t=>{const o=()=>t.setEnabled(ve(e));return e.on("NodeChange",o),()=>e.off("NodeChange",o)};e.add("accordion",(e=>{(e=>{const t=()=>e.execCommand("InsertAccordion");e.ui.registry.addButton("accordion",{icon:"accordion",tooltip:"Insert accordion",onSetup:Oe(e),onAction:t}),e.ui.registry.addMenuItem("accordion",{icon:"accordion",text:"Accordion",onSetup:Oe(e),onAction:t}),e.ui.registry.addToggleButton("accordiontoggle",{icon:"accordion-toggle",tooltip:"Toggle accordion",onAction:()=>e.execCommand("ToggleAccordion")}),e.ui.registry.addToggleButton("accordionremove",{icon:"remove",tooltip:"Delete accordion",onAction:()=>e.execCommand("RemoveAccordion")}),e.ui.registry.addContextToolbar("accordion",{predicate:t=>e.dom.is(t,"details")&&e.getBody().contains(t)&&e.dom.isEditable(t.parentNode),items:"accordiontoggle accordionremove",scope:"node",position:"node"})})(e),Ce(e),(e=>{(e=>{e.on("keydown",(t=>{!t.shiftKey&&t.keyCode===Be.ENTER&&ye(e)&&(t.preventDefault(),e.execCommand("ToggleAccordion"))}))})(e),e.on("ExecCommand",(t=>{const o=t.command.toLowerCase();"delete"!==o&&"forwarddelete"!==o||!(e=>we(e).isSome())(e)||(e=>{pe.each(pe.grep(e.dom.select("details",e.getBody())),Te(e))})(e)}))})(e),(e=>{e.on("PreInit",(()=>{const{serializer:t,parser:o}=e;o.addNodeFilter(de,(e=>{for(let t=0;t0)for(let e=0;e{const t=new Set([ce]);for(let o=0;o{const r="UL"===e?"InsertUnorderedList":"InsertOrderedList";t.execCommand(r,!1,!1===s?null:{"list-style-type":s})},s=t=>e=>e.options.get(t),r=s("advlist_number_styles"),n=s("advlist_bullet_styles"),i=t=>null==t,l=t=>!i(t);var o=tinymce.util.Tools.resolve("tinymce.util.Tools");class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return l(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=t=>e=>l(e)&&t.test(e.nodeName),d=u(/^(OL|UL|DL)$/),g=u(/^(TH|TD)$/),c=t=>i(t)||"default"===t?"":t,h=(t,e)=>s=>((t,e)=>{const s=t.selection.getNode();return e({parents:t.dom.getParents(s),element:s}),t.on("NodeChange",e),()=>t.off("NodeChange",e)})(t,(r=>((t,r)=>{const n=t.selection.getStart(!0);s.setActive(((t,e,s)=>((t,e,s)=>{for(let e=0,n=t.length;ee.nodeName===s&&((t,e)=>t.dom.isChildOf(e,t.getBody()))(t,e))))(t,r,e)),s.setEnabled(!((t,e)=>{const s=t.dom.getParent(e,"ol,ul,dl");return((t,e)=>null!==e&&!t.dom.isEditable(e))(t,s)&&t.selection.isEditable()})(t,n)&&t.selection.isEditable())})(t,r.parents))),m=(t,s,r,n,i,l)=>{l.length>1?((t,s,r,n,i,l)=>{t.ui.registry.addSplitButton(s,{tooltip:r,icon:"OL"===i?"ordered-list":"unordered-list",presets:"listpreview",columns:3,fetch:t=>{t(o.map(l,(t=>{const e="OL"===i?"num":"bull",s="disc"===t||"decimal"===t?"default":t,r=c(t),n=(t=>t.replace(/\-/g," ").replace(/\b\w/g,(t=>t.toUpperCase())))(t);return{type:"choiceitem",value:r,icon:"list-"+e+"-"+s,text:n}})))},onAction:()=>t.execCommand(n),onItemAction:(s,r)=>{e(t,i,r)},select:e=>{const s=(t=>{const e=t.dom.getParent(t.selection.getNode(),"ol,ul"),s=t.dom.getStyle(e,"listStyleType");return a.from(s)})(t);return s.map((t=>e===t)).getOr(!1)},onSetup:h(t,i)})})(t,s,r,n,i,l):((t,s,r,n,i,l)=>{t.ui.registry.addToggleButton(s,{active:!1,tooltip:r,icon:"OL"===i?"ordered-list":"unordered-list",onSetup:h(t,i),onAction:()=>t.queryCommandState(n)||""===l?t.execCommand(n):e(t,i,l)})})(t,s,r,n,i,c(l[0]))};t.add("advlist",(t=>{t.hasPlugin("lists")?((t=>{const e=t.options.register;e("advlist_number_styles",{processor:"string[]",default:"default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman".split(",")}),e("advlist_bullet_styles",{processor:"string[]",default:"default,circle,square".split(",")})})(t),(t=>{m(t,"numlist","Numbered list","InsertOrderedList","OL",r(t)),m(t,"bullist","Bullet list","InsertUnorderedList","UL",n(t))})(t),(t=>{t.addCommand("ApplyUnorderedListStyle",((s,r)=>{e(t,"UL",r["list-style-type"])})),t.addCommand("ApplyOrderedListStyle",((s,r)=>{e(t,"OL",r["list-style-type"])}))})(t)):console.error("Please use the Lists plugin together with the Advanced List plugin.")}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/anchor/plugin.min.js b/src/assets/tinyMCE/plugins/anchor/plugin.min.js deleted file mode 100644 index 075af45c3..000000000 --- a/src/assets/tinyMCE/plugins/anchor/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),o=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=("allow_html_in_named_anchor",e=>e.options.get("allow_html_in_named_anchor"));const a="a:not([href])",r=e=>!e,i=e=>e.getAttribute("id")||e.getAttribute("name")||"",l=e=>(e=>"a"===e.nodeName.toLowerCase())(e)&&!e.getAttribute("href")&&""!==i(e),s=e=>e.dom.getParent(e.selection.getStart(),a),d=(e,a)=>{const r=s(e);r?((e,t,o)=>{o.removeAttribute("name"),o.id=t,e.addVisual(),e.undoManager.add()})(e,a,r):((e,a)=>{e.undoManager.transact((()=>{n(e)||e.selection.collapse(!0),e.selection.isCollapsed()?e.insertContent(e.dom.createHTML("a",{id:a})):((e=>{const n=e.dom;t(n).walk(e.selection.getRng(),(e=>{o.each(e,(e=>{var t;l(t=e)&&!t.firstChild&&n.remove(e,!1)}))}))})(e),e.formatter.remove("namedAnchor",void 0,void 0,!0),e.formatter.apply("namedAnchor",{value:a}),e.addVisual())}))})(e,a),e.focus()},c=e=>(e=>r(e.attr("href"))&&!r(e.attr("id")||e.attr("name")))(e)&&!e.firstChild,m=e=>t=>{for(let o=0;ot=>{const o=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",o),o(),()=>{e.off("NodeChange",o)}};e.add("anchor",(e=>{(e=>{(0,e.options.register)("allow_html_in_named_anchor",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreInit",(()=>{e.parser.addNodeFilter("a",m("false")),e.serializer.addNodeFilter("a",m(null))}))})(e),(e=>{e.addCommand("mceAnchor",(()=>{(e=>{const t=(e=>{const t=s(e);return t?i(t):""})(e);e.windowManager.open({title:"Anchor",size:"normal",body:{type:"panel",items:[{name:"id",type:"input",label:"ID",placeholder:"example"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{id:t},onSubmit:t=>{((e,t)=>/^[A-Za-z][A-Za-z0-9\-:._]*$/.test(t)?(d(e,t),!0):(e.windowManager.alert("ID should start with a letter, followed only by letters, numbers, dashes, dots, colons or underscores."),!1))(e,t.getData().id)&&t.close()}})})(e)}))})(e),(e=>{const t=()=>e.execCommand("mceAnchor");e.ui.registry.addToggleButton("anchor",{icon:"bookmark",tooltip:"Anchor",onAction:t,onSetup:t=>{const o=e.selection.selectorChangedWithUnbind("a:not([href])",t.setActive).unbind,n=u(e)(t);return()=>{o(),n()}}}),e.ui.registry.addMenuItem("anchor",{icon:"bookmark",text:"Anchor...",onAction:t,onSetup:u(e)})})(e),e.on("PreInit",(()=>{(e=>{e.formatter.register("namedAnchor",{inline:"a",selector:a,remove:"all",split:!0,deep:!0,attributes:{id:"%value"},onmatch:(e,t,o)=>l(e)})})(e)}))}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/autolink/plugin.min.js b/src/assets/tinyMCE/plugins/autolink/plugin.min.js deleted file mode 100644 index bd176be4f..000000000 --- a/src/assets/tinyMCE/plugins/autolink/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),n=t("autolink_pattern"),o=t("link_default_target"),r=t("link_default_protocol"),a=t("allow_unsafe_link_target"),s=("string",e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(a=o.constructor)||void 0===a?void 0:a.name)===r.name)?"string":t;var n,o,r,a})(e));const l=(void 0,e=>undefined===e);const i=e=>!(e=>null==e)(e),c=Object.hasOwnProperty,d=e=>"\ufeff"===e;var u=tinymce.util.Tools.resolve("tinymce.dom.TextSeeker");const f=e=>/^[(\[{ \u00a0]$/.test(e),g=(e,t,n)=>{for(let o=t-1;o>=0;o--){const t=e.charAt(o);if(!d(t)&&n(t))return o}return-1},m=(e,t)=>{var o;const a=e.schema.getVoidElements(),s=n(e),{dom:i,selection:d}=e;if(null!==i.getParent(d.getNode(),"a[href]"))return null;const m=d.getRng(),k=u(i,(e=>{return i.isBlock(e)||(t=a,n=e.nodeName.toLowerCase(),c.call(t,n))||"false"===i.getContentEditable(e);var t,n})),{container:p,offset:y}=((e,t)=>{let n=e,o=t;for(;1===n.nodeType&&n.childNodes[o];)n=n.childNodes[o],o=3===n.nodeType?n.data.length:n.childNodes.length;return{container:n,offset:o}})(m.endContainer,m.endOffset),w=null!==(o=i.getParent(p,i.isBlock))&&void 0!==o?o:i.getRoot(),h=k.backwards(p,y+t,((e,t)=>{const n=e.data,o=g(n,t,(r=f,e=>!r(e)));var r,a;return-1===o||(a=n[o],/[?!,.;:]/.test(a))?o:o+1}),w);if(!h)return null;let v=h.container;const _=k.backwards(h.container,h.offset,((e,t)=>{v=e;const n=g(e.data,t,f);return-1===n?n:n+1}),w),A=i.createRng();_?A.setStart(_.container,_.offset):A.setStart(v,0),A.setEnd(h.container,h.offset);const C=A.toString().replace(/\uFEFF/g,"").match(s);if(C){let t=C[0];return $="www.",(b=t).length>=4&&b.substr(0,4)===$?t=r(e)+"://"+t:((e,t,n=0,o)=>{const r=e.indexOf(t,n);return-1!==r&&(!!l(o)||r+t.length<=o)})(t,"@")&&!(e=>/^([A-Za-z][A-Za-z\d.+-]*:\/\/)|mailto:/.test(e))(t)&&(t="mailto:"+t),{rng:A,url:t}}var b,$;return null},k=(e,t)=>{const{dom:n,selection:r}=e,{rng:l,url:i}=t,c=r.getBookmark();r.setRng(l);const d="createlink",u={command:d,ui:!1,value:i};if(!e.dispatch("BeforeExecCommand",u).isDefaultPrevented()){e.getDoc().execCommand(d,!1,i),e.dispatch("ExecCommand",u);const t=o(e);if(s(t)){const o=r.getNode();n.setAttrib(o,"target",t),"_blank"!==t||a(e)||n.setAttrib(o,"rel","noopener")}}r.moveToBookmark(c),e.nodeChanged()},p=e=>{const t=m(e,-1);i(t)&&k(e,t)},y=p;e.add("autolink",(e=>{(e=>{const t=e.options.register;t("autolink_pattern",{processor:"regexp",default:new RegExp("^"+/(?:[A-Za-z][A-Za-z\d.+-]{0,14}:\/\/(?:[-.~*+=!&;:'%@?^${}(),\w]+@)?|www\.|[-;:&=+$,.\w]+@)[A-Za-z\d-]+(?:\.[A-Za-z\d-]+)*(?::\d+)?(?:\/(?:[-.~*+=!;:'%@$(),\/\w]*[-~*+=%@$()\/\w])?)?(?:\?(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?(?:#(?:[-.~*+=!&;:'%@?^${}(),\/\w]+))?/g.source+"$","i")}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"})})(e),(e=>{e.on("keydown",(t=>{13!==t.keyCode||t.isDefaultPrevented()||(e=>{const t=m(e,0);i(t)&&k(e,t)})(e)})),e.on("keyup",(t=>{32===t.keyCode?p(e):(48===t.keyCode&&t.shiftKey||221===t.keyCode)&&y(e)}))})(e)}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/autoresize/plugin.min.js b/src/assets/tinyMCE/plugins/autoresize/plugin.min.js deleted file mode 100644 index c5e5ca891..000000000 --- a/src/assets/tinyMCE/plugins/autoresize/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager"),t=tinymce.util.Tools.resolve("tinymce.Env");const o=e=>t=>t.options.get(e),s=o("min_height"),i=o("max_height"),n=o("autoresize_overflow_padding"),r=o("autoresize_bottom_margin"),l=(e,t)=>{const o=e.getBody();o&&(o.style.overflowY=t?"":"hidden",t||(o.scrollTop=0))},g=(e,t,o,s)=>{var i;const n=parseInt(null!==(i=e.getStyle(t,o,s))&&void 0!==i?i:"",10);return isNaN(n)?0:n},a=(e,o,r,c)=>{var d;const f=e.dom,u=e.getDoc();if(!u)return;if((e=>e.plugins.fullscreen&&e.plugins.fullscreen.isFullscreen())(e))return void l(e,!0);const m=u.documentElement,h=c?c():n(e),p=null!==(d=s(e))&&void 0!==d?d:e.getElement().offsetHeight;let y=p;const S=g(f,m,"margin-top",!0),v=g(f,m,"margin-bottom",!0);let C=m.offsetHeight+S+v+h;C<0&&(C=0);const b=e.getContainer().offsetHeight-e.getContentAreaContainer().offsetHeight;C+b>p&&(y=C+b);const w=i(e);if(w&&y>w?(y=w,l(e,!0)):l(e,!1),y!==o.get()){const s=y-o.get();if(f.setStyle(e.getContainer(),"height",y+"px"),o.set(y),(e=>{e.dispatch("ResizeEditor")})(e),t.browser.isSafari()&&(t.os.isMacOS()||t.os.isiOS())){const t=e.getWin();t.scrollTo(t.pageXOffset,t.pageYOffset)}e.hasFocus()&&(e=>{if("setcontent"===(null==e?void 0:e.type.toLowerCase())){const t=e;return!0===t.selection||!0===t.paste}return!1})(r)&&e.selection.scrollIntoView(),(t.browser.isSafari()||t.browser.isChromium())&&s<0&&a(e,o,r,c)}};e.add("autoresize",(e=>{if((e=>{const t=e.options.register;t("autoresize_overflow_padding",{processor:"number",default:1}),t("autoresize_bottom_margin",{processor:"number",default:50})})(e),e.options.isSet("resize")||e.options.set("resize",!1),!e.inline){const o=(e=>{let t=0;return{get:()=>t,set:e=>{t=e}}})();((e,t)=>{e.addCommand("mceAutoResize",(()=>{a(e,t)}))})(e,o),((e,o)=>{let s,i,l=()=>r(e);e.on("init",(i=>{s=0;const r=n(e),g=e.dom;g.setStyles(e.getDoc().documentElement,{height:"auto"}),t.browser.isEdge()||t.browser.isIE()?g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r,"min-height":0}):g.setStyles(e.getBody(),{paddingLeft:r,paddingRight:r}),a(e,o,i,l),s+=1})),e.on("NodeChange SetContent keyup FullscreenStateChanged ResizeContent",(t=>{if(1===s)i=e.getContainer().offsetHeight,a(e,o,t,l),s+=1;else if(2===s){const t=i0):l,s+=1}else a(e,o,t,l)}))})(e,o)}}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/autosave/plugin.min.js b/src/assets/tinyMCE/plugins/autosave/plugin.min.js deleted file mode 100644 index 6acfa5e8a..000000000 --- a/src/assets/tinyMCE/plugins/autosave/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=("string",t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(r=o=t,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":e;var r,o,a,s})(t));const r=(void 0,t=>undefined===t);var o=tinymce.util.Tools.resolve("tinymce.util.Delay"),a=tinymce.util.Tools.resolve("tinymce.util.LocalStorage"),s=tinymce.util.Tools.resolve("tinymce.util.Tools");const n=t=>{const e=/^(\d+)([ms]?)$/.exec(t);return(e&&e[2]?{s:1e3,m:6e4}[e[2]]:1)*parseInt(t,10)},i=t=>e=>e.options.get(t),u=i("autosave_ask_before_unload"),l=i("autosave_restore_when_empty"),c=i("autosave_interval"),d=i("autosave_retention"),m=t=>{const e=document.location;return t.options.get("autosave_prefix").replace(/{path}/g,e.pathname).replace(/{query}/g,e.search).replace(/{hash}/g,e.hash).replace(/{id}/g,t.id)},v=(t,e)=>{if(r(e))return t.dom.isEmpty(t.getBody());{const r=s.trim(e);if(""===r)return!0;{const e=(new DOMParser).parseFromString(r,"text/html");return t.dom.isEmpty(e)}}},f=t=>{var e;const r=parseInt(null!==(e=a.getItem(m(t)+"time"))&&void 0!==e?e:"0",10)||0;return!((new Date).getTime()-r>d(t)&&(p(t,!1),1))},p=(t,e)=>{const r=m(t);a.removeItem(r+"draft"),a.removeItem(r+"time"),!1!==e&&(t=>{t.dispatch("RemoveDraft")})(t)},g=t=>{const e=m(t);!v(t)&&t.isDirty()&&(a.setItem(e+"draft",t.getContent({format:"raw",no_events:!0})),a.setItem(e+"time",(new Date).getTime().toString()),(t=>{t.dispatch("StoreDraft")})(t))},y=t=>{var e;const r=m(t);f(t)&&(t.setContent(null!==(e=a.getItem(r+"draft"))&&void 0!==e?e:"",{format:"raw"}),(t=>{t.dispatch("RestoreDraft")})(t))};var D=tinymce.util.Tools.resolve("tinymce.EditorManager");const h=t=>e=>{e.setEnabled(f(t));const r=()=>e.setEnabled(f(t));return t.on("StoreDraft RestoreDraft RemoveDraft",r),()=>t.off("StoreDraft RestoreDraft RemoveDraft",r)};t.add("autosave",(t=>((t=>{const r=t.options.register,o=t=>{const r=e(t);return r?{value:n(t),valid:r}:{valid:!1,message:"Must be a string."}};r("autosave_ask_before_unload",{processor:"boolean",default:!0}),r("autosave_prefix",{processor:"string",default:"tinymce-autosave-{path}{query}{hash}-{id}-"}),r("autosave_restore_when_empty",{processor:"boolean",default:!1}),r("autosave_interval",{processor:o,default:"30s"}),r("autosave_retention",{processor:o,default:"20m"})})(t),(t=>{t.editorManager.on("BeforeUnload",(t=>{let e;s.each(D.get(),(t=>{t.plugins.autosave&&t.plugins.autosave.storeDraft(),!e&&t.isDirty()&&u(t)&&(e=t.translate("You have unsaved changes are you sure you want to navigate away?"))})),e&&(t.preventDefault(),t.returnValue=e)}))})(t),(t=>{(t=>{const e=c(t);o.setEditorInterval(t,(()=>{g(t)}),e)})(t);const e=()=>{(t=>{t.undoManager.transact((()=>{y(t),p(t)})),t.focus()})(t)};t.ui.registry.addButton("restoredraft",{tooltip:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)}),t.ui.registry.addMenuItem("restoredraft",{text:"Restore last draft",icon:"restore-draft",onAction:e,onSetup:h(t)})})(t),t.on("init",(()=>{l(t)&&t.dom.isEmpty(t.getBody())&&y(t)})),(t=>({hasDraft:()=>f(t),storeDraft:()=>g(t),restoreDraft:()=>y(t),removeDraft:e=>p(t,e),isEmpty:e=>v(t,e)}))(t))))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/charmap/plugin.min.js b/src/assets/tinyMCE/plugins/charmap/plugin.min.js deleted file mode 100644 index 520b1e817..000000000 --- a/src/assets/tinyMCE/plugins/charmap/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=(e,t)=>{const r=((e,t)=>e.dispatch("insertCustomChar",{chr:t}))(e,t).chr;e.execCommand("mceInsertContent",!1,r)},r=e=>t=>e===t,a=("array",e=>"array"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=a=e,(n=String).prototype.isPrototypeOf(r)||(null===(i=a.constructor)||void 0===i?void 0:i.name)===n.name)?"string":t;var r,a,n,i})(e));const n=r(null),i=r(void 0),o=e=>"function"==typeof e,s=(!1,()=>false);class l{constructor(e,t){this.tag=e,this.value=t}static some(e){return new l(!0,e)}static none(){return l.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?l.some(e(this.value)):l.none()}bind(e){return this.tag?e(this.value):l.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:l.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?l.none():l.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}l.singletonNone=new l(!1);const c=Array.prototype.push,u=(e,t)=>{const r=e.length,a=new Array(r);for(let n=0;nt=>t.options.get(e),m=h("charmap"),p=h("charmap_append"),d=g.isArray,f="User Defined",y=e=>{return d(e)?(t=e,g.grep(t,(e=>d(e)&&2===e.length))):"function"==typeof e?e():[];var t},b=e=>{const t=((e,t)=>{const r=m(e);r&&(t=[{name:f,characters:y(r)}]);const a=p(e);if(a){const e=g.grep(t,(e=>e.name===f));return e.length?(e[0].characters=[...e[0].characters,...y(a)],t):t.concat({name:f,characters:y(a)})}return t})(e,[{name:"Currency",characters:[[36,"dollar sign"],[162,"cent sign"],[8364,"euro sign"],[163,"pound sign"],[165,"yen sign"],[164,"currency sign"],[8352,"euro-currency sign"],[8353,"colon sign"],[8354,"cruzeiro sign"],[8355,"french franc sign"],[8356,"lira sign"],[8357,"mill sign"],[8358,"naira sign"],[8359,"peseta sign"],[8360,"rupee sign"],[8361,"won sign"],[8362,"new sheqel sign"],[8363,"dong sign"],[8365,"kip sign"],[8366,"tugrik sign"],[8367,"drachma sign"],[8368,"german penny symbol"],[8369,"peso sign"],[8370,"guarani sign"],[8371,"austral sign"],[8372,"hryvnia sign"],[8373,"cedi sign"],[8374,"livre tournois sign"],[8375,"spesmilo sign"],[8376,"tenge sign"],[8377,"indian rupee sign"],[8378,"turkish lira sign"],[8379,"nordic mark sign"],[8380,"manat sign"],[8381,"ruble sign"],[20870,"yen character"],[20803,"yuan character"],[22291,"yuan character, in hong kong and taiwan"],[22278,"yen/yuan character variant one"]]},{name:"Text",characters:[[169,"copyright sign"],[174,"registered sign"],[8482,"trade mark sign"],[8240,"per mille sign"],[181,"micro sign"],[183,"middle dot"],[8226,"bullet"],[8230,"three dot leader"],[8242,"minutes / feet"],[8243,"seconds / inches"],[167,"section sign"],[182,"paragraph sign"],[223,"sharp s / ess-zed"]]},{name:"Quotations",characters:[[8249,"single left-pointing angle quotation mark"],[8250,"single right-pointing angle quotation mark"],[171,"left pointing guillemet"],[187,"right pointing guillemet"],[8216,"left single quotation mark"],[8217,"right single quotation mark"],[8220,"left double quotation mark"],[8221,"right double quotation mark"],[8218,"single low-9 quotation mark"],[8222,"double low-9 quotation mark"],[60,"less-than sign"],[62,"greater-than sign"],[8804,"less-than or equal to"],[8805,"greater-than or equal to"],[8211,"en dash"],[8212,"em dash"],[175,"macron"],[8254,"overline"],[164,"currency sign"],[166,"broken bar"],[168,"diaeresis"],[161,"inverted exclamation mark"],[191,"turned question mark"],[710,"circumflex accent"],[732,"small tilde"],[176,"degree sign"],[8722,"minus sign"],[177,"plus-minus sign"],[247,"division sign"],[8260,"fraction slash"],[215,"multiplication sign"],[185,"superscript one"],[178,"superscript two"],[179,"superscript three"],[188,"fraction one quarter"],[189,"fraction one half"],[190,"fraction three quarters"]]},{name:"Mathematical",characters:[[402,"function / florin"],[8747,"integral"],[8721,"n-ary sumation"],[8734,"infinity"],[8730,"square root"],[8764,"similar to"],[8773,"approximately equal to"],[8776,"almost equal to"],[8800,"not equal to"],[8801,"identical to"],[8712,"element of"],[8713,"not an element of"],[8715,"contains as member"],[8719,"n-ary product"],[8743,"logical and"],[8744,"logical or"],[172,"not sign"],[8745,"intersection"],[8746,"union"],[8706,"partial differential"],[8704,"for all"],[8707,"there exists"],[8709,"diameter"],[8711,"backward difference"],[8727,"asterisk operator"],[8733,"proportional to"],[8736,"angle"]]},{name:"Extended Latin",characters:[[192,"A - grave"],[193,"A - acute"],[194,"A - circumflex"],[195,"A - tilde"],[196,"A - diaeresis"],[197,"A - ring above"],[256,"A - macron"],[198,"ligature AE"],[199,"C - cedilla"],[200,"E - grave"],[201,"E - acute"],[202,"E - circumflex"],[203,"E - diaeresis"],[274,"E - macron"],[204,"I - grave"],[205,"I - acute"],[206,"I - circumflex"],[207,"I - diaeresis"],[298,"I - macron"],[208,"ETH"],[209,"N - tilde"],[210,"O - grave"],[211,"O - acute"],[212,"O - circumflex"],[213,"O - tilde"],[214,"O - diaeresis"],[216,"O - slash"],[332,"O - macron"],[338,"ligature OE"],[352,"S - caron"],[217,"U - grave"],[218,"U - acute"],[219,"U - circumflex"],[220,"U - diaeresis"],[362,"U - macron"],[221,"Y - acute"],[376,"Y - diaeresis"],[562,"Y - macron"],[222,"THORN"],[224,"a - grave"],[225,"a - acute"],[226,"a - circumflex"],[227,"a - tilde"],[228,"a - diaeresis"],[229,"a - ring above"],[257,"a - macron"],[230,"ligature ae"],[231,"c - cedilla"],[232,"e - grave"],[233,"e - acute"],[234,"e - circumflex"],[235,"e - diaeresis"],[275,"e - macron"],[236,"i - grave"],[237,"i - acute"],[238,"i - circumflex"],[239,"i - diaeresis"],[299,"i - macron"],[240,"eth"],[241,"n - tilde"],[242,"o - grave"],[243,"o - acute"],[244,"o - circumflex"],[245,"o - tilde"],[246,"o - diaeresis"],[248,"o slash"],[333,"o macron"],[339,"ligature oe"],[353,"s - caron"],[249,"u - grave"],[250,"u - acute"],[251,"u - circumflex"],[252,"u - diaeresis"],[363,"u - macron"],[253,"y - acute"],[254,"thorn"],[255,"y - diaeresis"],[563,"y - macron"],[913,"Alpha"],[914,"Beta"],[915,"Gamma"],[916,"Delta"],[917,"Epsilon"],[918,"Zeta"],[919,"Eta"],[920,"Theta"],[921,"Iota"],[922,"Kappa"],[923,"Lambda"],[924,"Mu"],[925,"Nu"],[926,"Xi"],[927,"Omicron"],[928,"Pi"],[929,"Rho"],[931,"Sigma"],[932,"Tau"],[933,"Upsilon"],[934,"Phi"],[935,"Chi"],[936,"Psi"],[937,"Omega"],[945,"alpha"],[946,"beta"],[947,"gamma"],[948,"delta"],[949,"epsilon"],[950,"zeta"],[951,"eta"],[952,"theta"],[953,"iota"],[954,"kappa"],[955,"lambda"],[956,"mu"],[957,"nu"],[958,"xi"],[959,"omicron"],[960,"pi"],[961,"rho"],[962,"final sigma"],[963,"sigma"],[964,"tau"],[965,"upsilon"],[966,"phi"],[967,"chi"],[968,"psi"],[969,"omega"]]},{name:"Symbols",characters:[[8501,"alef symbol"],[982,"pi symbol"],[8476,"real part symbol"],[978,"upsilon - hook symbol"],[8472,"Weierstrass p"],[8465,"imaginary part"]]},{name:"Arrows",characters:[[8592,"leftwards arrow"],[8593,"upwards arrow"],[8594,"rightwards arrow"],[8595,"downwards arrow"],[8596,"left right arrow"],[8629,"carriage return"],[8656,"leftwards double arrow"],[8657,"upwards double arrow"],[8658,"rightwards double arrow"],[8659,"downwards double arrow"],[8660,"left right double arrow"],[8756,"therefore"],[8834,"subset of"],[8835,"superset of"],[8836,"not a subset of"],[8838,"subset of or equal to"],[8839,"superset of or equal to"],[8853,"circled plus"],[8855,"circled times"],[8869,"perpendicular"],[8901,"dot operator"],[8968,"left ceiling"],[8969,"right ceiling"],[8970,"left floor"],[8971,"right floor"],[9001,"left-pointing angle bracket"],[9002,"right-pointing angle bracket"],[9674,"lozenge"],[9824,"black spade suit"],[9827,"black club suit"],[9829,"black heart suit"],[9830,"black diamond suit"],[8194,"en space"],[8195,"em space"],[8201,"thin space"],[8204,"zero width non-joiner"],[8205,"zero width joiner"],[8206,"left-to-right mark"],[8207,"right-to-left mark"]]}]);return t.length>1?[{name:"All",characters:(r=t,n=e=>e.characters,(e=>{const t=[];for(let r=0,n=e.length;r{let t=e;return{get:()=>t,set:e=>{t=e}}},v=(e,t,r=0,a)=>{const n=e.indexOf(t,r);return-1!==n&&(!!i(a)||n+t.length<=a)},k=String.fromCodePoint,C=(e,t)=>{const r=[],a=t.toLowerCase();return((e,t)=>{for(let t=0,i=e.length;t!!v(k(e).toLowerCase(),r)||v(t.toLowerCase(),r)||v(t.toLowerCase().replace(/\s+/g,""),r))((n=e[t])[0],n[1],a)&&r.push(n);var n})(e.characters),u(r,(e=>({text:e[1],value:k(e[0]),icon:k(e[0])})))},x="pattern",A=(e,r)=>{const a=()=>[{label:"Search",type:"input",name:x},{type:"collection",name:"results"}],i=1===r.length?w(f):w("All"),o=((e,t)=>{let r=null;const a=()=>{n(r)||(clearTimeout(r),r=null)};return{cancel:a,throttle:(...t)=>{a(),r=setTimeout((()=>{r=null,e.apply(null,t)}),40)}}})((e=>{const t=e.getData().pattern;((e,t)=>{var a,n;(a=r,n=e=>e.name===i.get(),((e,t,r)=>{for(let a=0,n=e.length;a{const a=C(r,t);e.setData({results:a})}))})(e,t)})),c={title:"Special Character",size:"normal",body:1===r.length?{type:"panel",items:a()}:{type:"tabpanel",tabs:u(r,(e=>({title:e.name,name:e.name,items:a()})))},buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{pattern:"",results:C(r[0],"")},onAction:(r,a)=>{"results"===a.name&&(t(e,a.value),r.close())},onTabChange:(e,t)=>{i.set(t.newTabName),o.throttle(e)},onChange:(e,t)=>{t.name===x&&o.throttle(e)}};e.windowManager.open(c).focus(x)},q=e=>t=>{const r=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",r),r(),()=>{e.off("NodeChange",r)}};e.add("charmap",(e=>{(e=>{const t=e.options.register,r=e=>o(e)||a(e);t("charmap",{processor:r}),t("charmap_append",{processor:r})})(e);const r=b(e);return((e,t)=>{e.addCommand("mceShowCharmap",(()=>{A(e,t)}))})(e,r),(e=>{const t=()=>e.execCommand("mceShowCharmap");e.ui.registry.addButton("charmap",{icon:"insert-character",tooltip:"Special character",onAction:t,onSetup:q(e)}),e.ui.registry.addMenuItem("charmap",{icon:"insert-character",text:"Special character...",onAction:t,onSetup:q(e)})})(e),((e,t)=>{e.ui.registry.addAutocompleter("charmap",{trigger:":",columns:"auto",minChars:2,fetch:(e,r)=>new Promise(((r,a)=>{r(C(t,e))})),onAction:(t,r,a)=>{e.selection.setRng(r),e.insertContent(a),t.hide()}})})(e,r[0]),(e=>({getCharMap:()=>b(e),insertChar:r=>{t(e,r)}}))(e)}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/code/plugin.min.js b/src/assets/tinyMCE/plugins/code/plugin.min.js deleted file mode 100644 index edee77ec1..000000000 --- a/src/assets/tinyMCE/plugins/code/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";tinymce.util.Tools.resolve("tinymce.PluginManager").add("code",(e=>((e=>{e.addCommand("mceCodeEditor",(()=>{(e=>{const o=(e=>e.getContent({source_view:!0}))(e);e.windowManager.open({title:"Source Code",size:"large",body:{type:"panel",items:[{type:"textarea",name:"code"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{code:o},onSubmit:o=>{((e,o)=>{e.focus(),e.undoManager.transact((()=>{e.setContent(o)})),e.selection.setCursorLocation(),e.nodeChanged()})(e,o.getData().code),o.close()}})})(e)}))})(e),(e=>{const o=()=>e.execCommand("mceCodeEditor");e.ui.registry.addButton("code",{icon:"sourcecode",tooltip:"Source code",onAction:o}),e.ui.registry.addMenuItem("code",{icon:"sourcecode",text:"Source code",onAction:o})})(e),{})))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/codesample/plugin.min.js b/src/assets/tinyMCE/plugins/codesample/plugin.min.js deleted file mode 100644 index d89494717..000000000 --- a/src/assets/tinyMCE/plugins/codesample/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>!(e=>null==e)(e),n=()=>{};class a{constructor(e,t){this.tag=e,this.value=t}static some(e){return new a(!0,e)}static none(){return a.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?a.some(e(this.value)):a.none()}bind(e){return this.tag?e(this.value):a.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:a.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return t(e)?a.some(e):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);var s=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils");const r="undefined"!=typeof window?window:Function("return this;")(),i=function(e,t,n){const a=window.Prism;window.Prism={manual:!0};var s=function(e){var t=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,n=0,a={},s={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(t){return t instanceof r?new r(t.type,e(t.content),t.alias):Array.isArray(t)?t.map(e):t.replace(/&/g,"&").replace(/=d.reach);x+=_.value.length,_=_.next){var F=_.value;if(t.length>e.length)return;if(!(F instanceof r)){var A,S=1;if(y){if(!(A=i(v,x,e,m))||A.index>=e.length)break;var $=A.index,z=A.index+A[0].length,E=x;for(E+=_.value.length;$>=E;)E+=(_=_.next).value.length;if(x=E-=_.value.length,_.value instanceof r)continue;for(var C=_;C!==t.tail&&(Ed.reach&&(d.reach=O);var P=_.prev;if(B&&(P=u(t,P,B),x+=B.length),c(t,P,S),_=u(t,P,new r(g,f?s.tokenize(j,f):j,w,j)),T&&u(t,_,T),S>1){var N={cause:g+","+b,reach:O};o(e,t,n,_.prev,x,N),d&&N.reach>d.reach&&(d.reach=N.reach)}}}}}}function l(){var e={value:null,prev:null,next:null},t={value:null,prev:e,next:null};e.next=t,this.head=e,this.tail=t,this.length=0}function u(e,t,n){var a=t.next,s={value:n,prev:t,next:a};return t.next=s,a.prev=s,e.length++,s}function c(e,t,n){for(var a=t.next,s=0;s"+r.content+""},!e.document)return e.addEventListener?(s.disableWorkerMessageHandler||e.addEventListener("message",(function(t){var n=JSON.parse(t.data),a=n.language,r=n.code,i=n.immediateClose;e.postMessage(s.highlight(r,s.languages[a],a)),i&&e.close()}),!1),s):s;var d=s.util.currentScript();function g(){s.manual||s.highlightAll()}if(d&&(s.filename=d.src,d.hasAttribute("data-manual")&&(s.manual=!0)),!s.manual){var p=document.readyState;"loading"===p||"interactive"===p&&d&&d.defer?document.addEventListener("DOMContentLoaded",g):window.requestAnimationFrame?window.requestAnimationFrame(g):window.setTimeout(g,16)}return s}("undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{});return s.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/},function(e){function t(e,t){return"___"+e.toUpperCase()+t+"___"}Object.defineProperties(e.languages["markup-templating"]={},{buildPlaceholders:{value:function(n,a,s,r){if(n.language===a){var i=n.tokenStack=[];n.code=n.code.replace(s,(function(e){if("function"==typeof r&&!r(e))return e;for(var s,o=i.length;-1!==n.code.indexOf(s=t(a,o));)++o;return i[o]=e,s})),n.grammar=e.languages.markup}}},tokenizePlaceholders:{value:function(n,a){if(n.language===a&&n.tokenStack){n.grammar=e.languages[a];var s=0,r=Object.keys(n.tokenStack);!function i(o){for(var l=0;l=r.length);l++){var u=o[l];if("string"==typeof u||u.content&&"string"==typeof u.content){var c=r[s],d=n.tokenStack[c],g="string"==typeof u?u:u.content,p=t(a,c),b=g.indexOf(p);if(b>-1){++s;var h=g.substring(0,b),f=new e.Token(a,e.tokenize(d,n.grammar),"language-"+a,d),m=g.substring(b+p.length),y=[];h&&y.push.apply(y,i([h])),y.push(f),m&&y.push.apply(y,i([m])),"string"==typeof u?o.splice.apply(o,[l,1].concat(y)):u.content=y}}else u.content&&i(u.content)}return o}(n.tokens)}}}})}(s),s.languages.c=s.languages.extend("clike",{comment:{pattern:/\/\/(?:[^\r\n\\]|\\(?:\r\n?|\n|(?![\r\n])))*|\/\*[\s\S]*?(?:\*\/|$)/,greedy:!0},string:{pattern:/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,greedy:!0},"class-name":{pattern:/(\b(?:enum|struct)\s+(?:__attribute__\s*\(\([\s\S]*?\)\)\s*)?)\w+|\b[a-z]\w*_t\b/,lookbehind:!0},keyword:/\b(?:_Alignas|_Alignof|_Atomic|_Bool|_Complex|_Generic|_Imaginary|_Noreturn|_Static_assert|_Thread_local|__attribute__|asm|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|inline|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|typeof|union|unsigned|void|volatile|while)\b/,function:/\b[a-z_]\w*(?=\s*\()/i,number:/(?:\b0x(?:[\da-f]+(?:\.[\da-f]*)?|\.[\da-f]+)(?:p[+-]?\d+)?|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?)[ful]{0,4}/i,operator:/>>=?|<<=?|->|([-+&|:])\1|[?:~]|[-+*/%&|^!=<>]=?/}),s.languages.insertBefore("c","string",{char:{pattern:/'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n]){0,32}'/,greedy:!0}}),s.languages.insertBefore("c","string",{macro:{pattern:/(^[\t ]*)#\s*[a-z](?:[^\r\n\\/]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|\\(?:\r\n|[\s\S]))*/im,lookbehind:!0,greedy:!0,alias:"property",inside:{string:[{pattern:/^(#\s*include\s*)<[^>]+>/,lookbehind:!0},s.languages.c.string],char:s.languages.c.char,comment:s.languages.c.comment,"macro-name":[{pattern:/(^#\s*define\s+)\w+\b(?!\()/i,lookbehind:!0},{pattern:/(^#\s*define\s+)\w+\b(?=\()/i,lookbehind:!0,alias:"function"}],directive:{pattern:/^(#\s*)[a-z]+/,lookbehind:!0,alias:"keyword"},"directive-hash":/^#/,punctuation:/##|\\(?=[\r\n])/,expression:{pattern:/\S[\s\S]*/,inside:s.languages.c}}}}),s.languages.insertBefore("c","function",{constant:/\b(?:EOF|NULL|SEEK_CUR|SEEK_END|SEEK_SET|__DATE__|__FILE__|__LINE__|__TIMESTAMP__|__TIME__|__func__|stderr|stdin|stdout)\b/}),delete s.languages.c.boolean,function(e){var t=/\b(?:alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|char8_t|class|co_await|co_return|co_yield|compl|concept|const|const_cast|consteval|constexpr|constinit|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|final|float|for|friend|goto|if|import|inline|int|int16_t|int32_t|int64_t|int8_t|long|module|mutable|namespace|new|noexcept|nullptr|operator|override|private|protected|public|register|reinterpret_cast|requires|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|uint16_t|uint32_t|uint64_t|uint8_t|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,n=/\b(?!)\w+(?:\s*\.\s*\w+)*\b/.source.replace(//g,(function(){return t.source}));e.languages.cpp=e.languages.extend("c",{"class-name":[{pattern:RegExp(/(\b(?:class|concept|enum|struct|typename)\s+)(?!)\w+/.source.replace(//g,(function(){return t.source}))),lookbehind:!0},/\b[A-Z]\w*(?=\s*::\s*\w+\s*\()/,/\b[A-Z_]\w*(?=\s*::\s*~\w+\s*\()/i,/\b\w+(?=\s*<(?:[^<>]|<(?:[^<>]|<[^<>]*>)*>)*>\s*::\s*\w+\s*\()/],keyword:t,number:{pattern:/(?:\b0b[01']+|\b0x(?:[\da-f']+(?:\.[\da-f']*)?|\.[\da-f']+)(?:p[+-]?[\d']+)?|(?:\b[\d']+(?:\.[\d']*)?|\B\.[\d']+)(?:e[+-]?[\d']+)?)[ful]{0,4}/i,greedy:!0},operator:/>>=?|<<=?|->|--|\+\+|&&|\|\||[?:~]|<=>|[-+*/%&|^!=<>]=?|\b(?:and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/,boolean:/\b(?:false|true)\b/}),e.languages.insertBefore("cpp","string",{module:{pattern:RegExp(/(\b(?:import|module)\s+)/.source+"(?:"+/"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|<[^<>\r\n]*>/.source+"|"+/(?:\s*:\s*)?|:\s*/.source.replace(//g,(function(){return n}))+")"),lookbehind:!0,greedy:!0,inside:{string:/^[<"][\s\S]+/,operator:/:/,punctuation:/\./}},"raw-string":{pattern:/R"([^()\\ ]{0,16})\([\s\S]*?\)\1"/,alias:"string",greedy:!0}}),e.languages.insertBefore("cpp","keyword",{"generic-function":{pattern:/\b(?!operator\b)[a-z_]\w*\s*<(?:[^<>]|<[^<>]*>)*>(?=\s*\()/i,inside:{function:/^\w+/,generic:{pattern:/<[\s\S]+/,alias:"class-name",inside:e.languages.cpp}}}}),e.languages.insertBefore("cpp","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}}),e.languages.insertBefore("cpp","class-name",{"base-clause":{pattern:/(\b(?:class|struct)\s+\w+\s*:\s*)[^;{}"'\s]+(?:\s+[^;{}"'\s]+)*(?=\s*[;{])/,lookbehind:!0,greedy:!0,inside:e.languages.extend("cpp",{})}}),e.languages.insertBefore("inside","double-colon",{"class-name":/\b[a-z_]\w*\b(?!\s*::)/i},e.languages.cpp["base-clause"])}(s),function(e){function t(e,t){return e.replace(/<<(\d+)>>/g,(function(e,n){return"(?:"+t[+n]+")"}))}function n(e,n,a){return RegExp(t(e,n),a||"")}function a(e,t){for(var n=0;n>/g,(function(){return"(?:"+e+")"}));return e.replace(/<>/g,"[^\\s\\S]")}var s="bool byte char decimal double dynamic float int long object sbyte short string uint ulong ushort var void",r="class enum interface record struct",i="add alias and ascending async await by descending from(?=\\s*(?:\\w|$)) get global group into init(?=\\s*;) join let nameof not notnull on or orderby partial remove select set unmanaged value when where with(?=\\s*{)",o="abstract as base break case catch checked const continue default delegate do else event explicit extern finally fixed for foreach goto if implicit in internal is lock namespace new null operator out override params private protected public readonly ref return sealed sizeof stackalloc static switch this throw try typeof unchecked unsafe using virtual volatile while yield";function l(e){return"\\b(?:"+e.trim().replace(/ /g,"|")+")\\b"}var u=l(r),c=RegExp(l(s+" "+r+" "+i+" "+o)),d=l(r+" "+i+" "+o),g=l(s+" "+r+" "+o),p=a(/<(?:[^<>;=+\-*/%&|^]|<>)*>/.source,2),b=a(/\((?:[^()]|<>)*\)/.source,2),h=/@?\b[A-Za-z_]\w*\b/.source,f=t(/<<0>>(?:\s*<<1>>)?/.source,[h,p]),m=t(/(?!<<0>>)<<1>>(?:\s*\.\s*<<1>>)*/.source,[d,f]),y=/\[\s*(?:,\s*)*\]/.source,w=t(/<<0>>(?:\s*(?:\?\s*)?<<1>>)*(?:\s*\?)?/.source,[m,y]),k=t(/[^,()<>[\];=+\-*/%&|^]|<<0>>|<<1>>|<<2>>/.source,[p,b,y]),v=t(/\(<<0>>+(?:,<<0>>+)+\)/.source,[k]),_=t(/(?:<<0>>|<<1>>)(?:\s*(?:\?\s*)?<<2>>)*(?:\s*\?)?/.source,[v,m,y]),x={keyword:c,punctuation:/[<>()?,.:[\]]/},F=/'(?:[^\r\n'\\]|\\.|\\[Uux][\da-fA-F]{1,8})'/.source,A=/"(?:\\.|[^\\"\r\n])*"/.source,S=/@"(?:""|\\[\s\S]|[^\\"])*"(?!")/.source;e.languages.csharp=e.languages.extend("clike",{string:[{pattern:n(/(^|[^$\\])<<0>>/.source,[S]),lookbehind:!0,greedy:!0},{pattern:n(/(^|[^@$\\])<<0>>/.source,[A]),lookbehind:!0,greedy:!0}],"class-name":[{pattern:n(/(\busing\s+static\s+)<<0>>(?=\s*;)/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+<<0>>\s*=\s*)<<1>>(?=\s*;)/.source,[h,_]),lookbehind:!0,inside:x},{pattern:n(/(\busing\s+)<<0>>(?=\s*=)/.source,[h]),lookbehind:!0},{pattern:n(/(\b<<0>>\s+)<<1>>/.source,[u,f]),lookbehind:!0,inside:x},{pattern:n(/(\bcatch\s*\(\s*)<<0>>/.source,[m]),lookbehind:!0,inside:x},{pattern:n(/(\bwhere\s+)<<0>>/.source,[h]),lookbehind:!0},{pattern:n(/(\b(?:is(?:\s+not)?|as)\s+)<<0>>/.source,[w]),lookbehind:!0,inside:x},{pattern:n(/\b<<0>>(?=\s+(?!<<1>>|with\s*\{)<<2>>(?:\s*[=,;:{)\]]|\s+(?:in|when)\b))/.source,[_,g,h]),inside:x}],keyword:c,number:/(?:\b0(?:x[\da-f_]*[\da-f]|b[01_]*[01])|(?:\B\.\d+(?:_+\d+)*|\b\d+(?:_+\d+)*(?:\.\d+(?:_+\d+)*)?)(?:e[-+]?\d+(?:_+\d+)*)?)(?:[dflmu]|lu|ul)?\b/i,operator:/>>=?|<<=?|[-=]>|([-+&|])\1|~|\?\?=?|[-+*/%&|^!=<>]=?/,punctuation:/\?\.?|::|[{}[\];(),.:]/}),e.languages.insertBefore("csharp","number",{range:{pattern:/\.\./,alias:"operator"}}),e.languages.insertBefore("csharp","punctuation",{"named-parameter":{pattern:n(/([(,]\s*)<<0>>(?=\s*:)/.source,[h]),lookbehind:!0,alias:"punctuation"}}),e.languages.insertBefore("csharp","class-name",{namespace:{pattern:n(/(\b(?:namespace|using)\s+)<<0>>(?:\s*\.\s*<<0>>)*(?=\s*[;{])/.source,[h]),lookbehind:!0,inside:{punctuation:/\./}},"type-expression":{pattern:n(/(\b(?:default|sizeof|typeof)\s*\(\s*(?!\s))(?:[^()\s]|\s(?!\s)|<<0>>)*(?=\s*\))/.source,[b]),lookbehind:!0,alias:"class-name",inside:x},"return-type":{pattern:n(/<<0>>(?=\s+(?:<<1>>\s*(?:=>|[({]|\.\s*this\s*\[)|this\s*\[))/.source,[_,m]),inside:x,alias:"class-name"},"constructor-invocation":{pattern:n(/(\bnew\s+)<<0>>(?=\s*[[({])/.source,[_]),lookbehind:!0,inside:x,alias:"class-name"},"generic-method":{pattern:n(/<<0>>\s*<<1>>(?=\s*\()/.source,[h,p]),inside:{function:n(/^<<0>>/.source,[h]),generic:{pattern:RegExp(p),alias:"class-name",inside:x}}},"type-list":{pattern:n(/\b((?:<<0>>\s+<<1>>|record\s+<<1>>\s*<<5>>|where\s+<<2>>)\s*:\s*)(?:<<3>>|<<4>>|<<1>>\s*<<5>>|<<6>>)(?:\s*,\s*(?:<<3>>|<<4>>|<<6>>))*(?=\s*(?:where|[{;]|=>|$))/.source,[u,f,h,_,c.source,b,/\bnew\s*\(\s*\)/.source]),lookbehind:!0,inside:{"record-arguments":{pattern:n(/(^(?!new\s*\()<<0>>\s*)<<1>>/.source,[f,b]),lookbehind:!0,greedy:!0,inside:e.languages.csharp},keyword:c,"class-name":{pattern:RegExp(_),greedy:!0,inside:x},punctuation:/[,()]/}},preprocessor:{pattern:/(^[\t ]*)#.*/m,lookbehind:!0,alias:"property",inside:{directive:{pattern:/(#)\b(?:define|elif|else|endif|endregion|error|if|line|nullable|pragma|region|undef|warning)\b/,lookbehind:!0,alias:"keyword"}}}});var $=A+"|"+F,z=t(/\/(?![*/])|\/\/[^\r\n]*[\r\n]|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>/.source,[$]),E=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),C=/\b(?:assembly|event|field|method|module|param|property|return|type)\b/.source,j=t(/<<0>>(?:\s*\(<<1>>*\))?/.source,[m,E]);e.languages.insertBefore("csharp","class-name",{attribute:{pattern:n(/((?:^|[^\s\w>)?])\s*\[\s*)(?:<<0>>\s*:\s*)?<<1>>(?:\s*,\s*<<1>>)*(?=\s*\])/.source,[C,j]),lookbehind:!0,greedy:!0,inside:{target:{pattern:n(/^<<0>>(?=\s*:)/.source,[C]),alias:"keyword"},"attribute-arguments":{pattern:n(/\(<<0>>*\)/.source,[E]),inside:e.languages.csharp},"class-name":{pattern:RegExp(m),inside:{punctuation:/\./}},punctuation:/[:,]/}}});var B=/:[^}\r\n]+/.source,T=a(t(/[^"'/()]|<<0>>|\(<>*\)/.source,[z]),2),O=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[T,B]),P=a(t(/[^"'/()]|\/(?!\*)|\/\*(?:[^*]|\*(?!\/))*\*\/|<<0>>|\(<>*\)/.source,[$]),2),N=t(/\{(?!\{)(?:(?![}:])<<0>>)*<<1>>?\}/.source,[P,B]);function R(t,a){return{interpolation:{pattern:n(/((?:^|[^{])(?:\{\{)*)<<0>>/.source,[t]),lookbehind:!0,inside:{"format-string":{pattern:n(/(^\{(?:(?![}:])<<0>>)*)<<1>>(?=\}$)/.source,[a,B]),lookbehind:!0,inside:{punctuation:/^:/}},punctuation:/^\{|\}$/,expression:{pattern:/[\s\S]+/,alias:"language-csharp",inside:e.languages.csharp}}},string:/[\s\S]+/}}e.languages.insertBefore("csharp","string",{"interpolation-string":[{pattern:n(/(^|[^\\])(?:\$@|@\$)"(?:""|\\[\s\S]|\{\{|<<0>>|[^\\{"])*"/.source,[O]),lookbehind:!0,greedy:!0,inside:R(O,T)},{pattern:n(/(^|[^@\\])\$"(?:\\.|\{\{|<<0>>|[^\\"{])*"/.source,[N]),lookbehind:!0,greedy:!0,inside:R(N,P)}],char:{pattern:RegExp(F),greedy:!0}}),e.languages.dotnet=e.languages.cs=e.languages.csharp}(s),function(e){var t=/(?:"(?:\\(?:\r\n|[\s\S])|[^"\\\r\n])*"|'(?:\\(?:\r\n|[\s\S])|[^'\\\r\n])*')/;e.languages.css={comment:/\/\*[\s\S]*?\*\//,atrule:{pattern:RegExp("@[\\w-](?:"+/[^;{\s"']|\s+(?!\s)/.source+"|"+t.source+")*?"+/(?:;|(?=\s*\{))/.source),inside:{rule:/^@[\w-]+/,"selector-function-argument":{pattern:/(\bselector\s*\(\s*(?![\s)]))(?:[^()\s]|\s+(?![\s)])|\((?:[^()]|\([^()]*\))*\))+(?=\s*\))/,lookbehind:!0,alias:"selector"},keyword:{pattern:/(^|[^\w-])(?:and|not|only|or)(?![\w-])/,lookbehind:!0}}},url:{pattern:RegExp("\\burl\\((?:"+t.source+"|"+/(?:[^\\\r\n()"']|\\[\s\S])*/.source+")\\)","i"),greedy:!0,inside:{function:/^url/i,punctuation:/^\(|\)$/,string:{pattern:RegExp("^"+t.source+"$"),alias:"url"}}},selector:{pattern:RegExp("(^|[{}\\s])[^{}\\s](?:[^{};\"'\\s]|\\s+(?![\\s{])|"+t.source+")*(?=\\s*\\{)"),lookbehind:!0},string:{pattern:t,greedy:!0},property:{pattern:/(^|[^-\w\xA0-\uFFFF])(?!\s)[-_a-z\xA0-\uFFFF](?:(?!\s)[-\w\xA0-\uFFFF])*(?=\s*:)/i,lookbehind:!0},important:/!important\b/i,function:{pattern:/(^|[^-a-z0-9])[-a-z0-9]+(?=\()/i,lookbehind:!0},punctuation:/[(){};:,]/},e.languages.css.atrule.inside.rest=e.languages.css;var n=e.languages.markup;n&&(n.tag.addInlined("style","css"),n.tag.addAttribute("style","css"))}(s),function(e){var t=/\b(?:abstract|assert|boolean|break|byte|case|catch|char|class|const|continue|default|do|double|else|enum|exports|extends|final|finally|float|for|goto|if|implements|import|instanceof|int|interface|long|module|native|new|non-sealed|null|open|opens|package|permits|private|protected|provides|public|record(?!\s*[(){}[\]<>=%~.:,;?+\-*/&|^])|requires|return|sealed|short|static|strictfp|super|switch|synchronized|this|throw|throws|to|transient|transitive|try|uses|var|void|volatile|while|with|yield)\b/,n=/(?:[a-z]\w*\s*\.\s*)*(?:[A-Z]\w*\s*\.\s*)*/.source,a={pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z](?:[\d_A-Z]*[a-z]\w*)?\b/.source),lookbehind:!0,inside:{namespace:{pattern:/^[a-z]\w*(?:\s*\.\s*[a-z]\w*)*(?:\s*\.)?/,inside:{punctuation:/\./}},punctuation:/\./}};e.languages.java=e.languages.extend("clike",{string:{pattern:/(^|[^\\])"(?:\\.|[^"\\\r\n])*"/,lookbehind:!0,greedy:!0},"class-name":[a,{pattern:RegExp(/(^|[^\w.])/.source+n+/[A-Z]\w*(?=\s+\w+\s*[;,=()]|\s*(?:\[[\s,]*\]\s*)?::\s*new\b)/.source),lookbehind:!0,inside:a.inside},{pattern:RegExp(/(\b(?:class|enum|extends|implements|instanceof|interface|new|record|throws)\s+)/.source+n+/[A-Z]\w*\b/.source),lookbehind:!0,inside:a.inside}],keyword:t,function:[e.languages.clike.function,{pattern:/(::\s*)[a-z_]\w*/,lookbehind:!0}],number:/\b0b[01][01_]*L?\b|\b0x(?:\.[\da-f_p+-]+|[\da-f_]+(?:\.[\da-f_p+-]+)?)\b|(?:\b\d[\d_]*(?:\.[\d_]*)?|\B\.\d[\d_]*)(?:e[+-]?\d[\d_]*)?[dfl]?/i,operator:{pattern:/(^|[^.])(?:<<=?|>>>?=?|->|--|\+\+|&&|\|\||::|[?:~]|[-+*/%&|^!=<>]=?)/m,lookbehind:!0},constant:/\b[A-Z][A-Z_\d]+\b/}),e.languages.insertBefore("java","string",{"triple-quoted-string":{pattern:/"""[ \t]*[\r\n](?:(?:"|"")?(?:\\.|[^"\\]))*"""/,greedy:!0,alias:"string"},char:{pattern:/'(?:\\.|[^'\\\r\n]){1,6}'/,greedy:!0}}),e.languages.insertBefore("java","class-name",{annotation:{pattern:/(^|[^.])@\w+(?:\s*\.\s*\w+)*/,lookbehind:!0,alias:"punctuation"},generics:{pattern:/<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&)|<(?:[\w\s,.?]|&(?!&))*>)*>)*>)*>/,inside:{"class-name":a,keyword:t,punctuation:/[<>(),.:]/,operator:/[?&|]/}},import:[{pattern:RegExp(/(\bimport\s+)/.source+n+/(?:[A-Z]\w*|\*)(?=\s*;)/.source),lookbehind:!0,inside:{namespace:a.inside.namespace,punctuation:/\./,operator:/\*/,"class-name":/\w+/}},{pattern:RegExp(/(\bimport\s+static\s+)/.source+n+/(?:\w+|\*)(?=\s*;)/.source),lookbehind:!0,alias:"static",inside:{namespace:a.inside.namespace,static:/\b\w+$/,punctuation:/\./,operator:/\*/,"class-name":/\w+/}}],namespace:{pattern:RegExp(/(\b(?:exports|import(?:\s+static)?|module|open|opens|package|provides|requires|to|transitive|uses|with)\s+)(?!)[a-z]\w*(?:\.[a-z]\w*)*\.?/.source.replace(//g,(function(){return t.source}))),lookbehind:!0,inside:{punctuation:/\./}}})}(s),s.languages.javascript=s.languages.extend("clike",{"class-name":[s.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp(/(^|[^\w$])/.source+"(?:"+/NaN|Infinity/.source+"|"+/0[bB][01]+(?:_[01]+)*n?/.source+"|"+/0[oO][0-7]+(?:_[0-7]+)*n?/.source+"|"+/0[xX][\dA-Fa-f]+(?:_[\dA-Fa-f]+)*n?/.source+"|"+/\d+(?:_\d+)*n/.source+"|"+/(?:\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\.\d+(?:_\d+)*)(?:[Ee][+-]?\d+(?:_\d+)*)?/.source+")"+/(?![\w$])/.source),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),s.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,s.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp(/((?:^|[^$\w\xA0-\uFFFF."'\])\s]|\b(?:return|yield))\s*)/.source+/\//.source+"(?:"+/(?:\[(?:[^\]\\\r\n]|\\.)*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}/.source+"|"+/(?:\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.|\[(?:[^[\]\\\r\n]|\\.)*\])*\])*\]|\\.|[^/\\\[\r\n])+\/[dgimyus]{0,7}v[dgimyus]{0,7}/.source+")"+/(?=(?:\s|\/\*(?:[^*]|\*(?!\/))*\*\/)*(?:$|[\r\n,.;:})\]]|\/\/))/.source),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:s.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:s.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:s.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:s.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:s.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),s.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:s.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),s.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),s.languages.markup&&(s.languages.markup.tag.addInlined("script","javascript"),s.languages.markup.tag.addAttribute(/on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)/.source,"javascript")),s.languages.js=s.languages.javascript,s.languages.markup={comment:{pattern://,greedy:!0},prolog:{pattern:/<\?[\s\S]+?\?>/,greedy:!0},doctype:{pattern:/"'[\]]|"[^"]*"|'[^']*')+(?:\[(?:[^<"'\]]|"[^"]*"|'[^']*'|<(?!!--)|)*\]\s*)?>/i,greedy:!0,inside:{"internal-subset":{pattern:/(^[^\[]*\[)[\s\S]+(?=\]>$)/,lookbehind:!0,greedy:!0,inside:null},string:{pattern:/"[^"]*"|'[^']*'/,greedy:!0},punctuation:/^$|[[\]]/,"doctype-tag":/^DOCTYPE/i,name:/[^\s<>'"]+/}},cdata:{pattern://i,greedy:!0},tag:{pattern:/<\/?(?!\d)[^\s>\/=$<%]+(?:\s(?:\s*[^\s>\/=]+(?:\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))|(?=[\s/>])))+)?\s*\/?>/,greedy:!0,inside:{tag:{pattern:/^<\/?[^\s>\/]+/,inside:{punctuation:/^<\/?/,namespace:/^[^\s>\/:]+:/}},"special-attr":[],"attr-value":{pattern:/=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+)/,inside:{punctuation:[{pattern:/^=/,alias:"attr-equals"},{pattern:/^(\s*)["']|["']$/,lookbehind:!0}]}},punctuation:/\/?>/,"attr-name":{pattern:/[^\s>\/]+/,inside:{namespace:/^[^\s>\/:]+:/}}}},entity:[{pattern:/&[\da-z]{1,8};/i,alias:"named-entity"},/&#x?[\da-f]{1,8};/i]},s.languages.markup.tag.inside["attr-value"].inside.entity=s.languages.markup.entity,s.languages.markup.doctype.inside["internal-subset"].inside=s.languages.markup,s.hooks.add("wrap",(function(e){"entity"===e.type&&(e.attributes.title=e.content.replace(/&/,"&"))})),Object.defineProperty(s.languages.markup.tag,"addInlined",{value:function(e,t){var n={};n["language-"+t]={pattern:/(^$)/i,lookbehind:!0,inside:s.languages[t]},n.cdata=/^$/i;var a={"included-cdata":{pattern://i,inside:n}};a["language-"+t]={pattern:/[\s\S]+/,inside:s.languages[t]};var r={};r[e]={pattern:RegExp(/(<__[^>]*>)(?:))*\]\]>|(?!)/.source.replace(/__/g,(function(){return e})),"i"),lookbehind:!0,greedy:!0,inside:a},s.languages.insertBefore("markup","cdata",r)}}),Object.defineProperty(s.languages.markup.tag,"addAttribute",{value:function(e,t){s.languages.markup.tag.inside["special-attr"].push({pattern:RegExp(/(^|["'\s])/.source+"(?:"+e+")"+/\s*=\s*(?:"[^"]*"|'[^']*'|[^\s'">=]+(?=[\s>]))/.source,"i"),lookbehind:!0,inside:{"attr-name":/^[^\s=]+/,"attr-value":{pattern:/=[\s\S]+/,inside:{value:{pattern:/(^=\s*(["']|(?!["'])))\S[\s\S]*(?=\2$)/,lookbehind:!0,alias:[t,"language-"+t],inside:s.languages[t]},punctuation:[{pattern:/^=/,alias:"attr-equals"},/"|'/]}}}})}}),s.languages.html=s.languages.markup,s.languages.mathml=s.languages.markup,s.languages.svg=s.languages.markup,s.languages.xml=s.languages.extend("markup",{}),s.languages.ssml=s.languages.xml,s.languages.atom=s.languages.xml,s.languages.rss=s.languages.xml,function(e){var t=/\/\*[\s\S]*?\*\/|\/\/.*|#(?!\[).*/,n=[{pattern:/\b(?:false|true)\b/i,alias:"boolean"},{pattern:/(::\s*)\b[a-z_]\w*\b(?!\s*\()/i,greedy:!0,lookbehind:!0},{pattern:/(\b(?:case|const)\s+)\b[a-z_]\w*(?=\s*[;=])/i,greedy:!0,lookbehind:!0},/\b(?:null)\b/i,/\b[A-Z_][A-Z0-9_]*\b(?!\s*\()/],a=/\b0b[01]+(?:_[01]+)*\b|\b0o[0-7]+(?:_[0-7]+)*\b|\b0x[\da-f]+(?:_[\da-f]+)*\b|(?:\b\d+(?:_\d+)*\.?(?:\d+(?:_\d+)*)?|\B\.\d+)(?:e[+-]?\d+)?/i,s=/|\?\?=?|\.{3}|\??->|[!=]=?=?|::|\*\*=?|--|\+\+|&&|\|\||<<|>>|[?~]|[/^|%*&<>.+-]=?/,r=/[{}\[\](),:;]/;e.languages.php={delimiter:{pattern:/\?>$|^<\?(?:php(?=\s)|=)?/i,alias:"important"},comment:t,variable:/\$+(?:\w+\b|(?=\{))/,package:{pattern:/(namespace\s+|use\s+(?:function\s+)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,lookbehind:!0,inside:{punctuation:/\\/}},"class-name-definition":{pattern:/(\b(?:class|enum|interface|trait)\s+)\b[a-z_]\w*(?!\\)\b/i,lookbehind:!0,alias:"class-name"},"function-definition":{pattern:/(\bfunction\s+)[a-z_]\w*(?=\s*\()/i,lookbehind:!0,alias:"function"},keyword:[{pattern:/(\(\s*)\b(?:array|bool|boolean|float|int|integer|object|string)\b(?=\s*\))/i,alias:"type-casting",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|object|self|static|string)\b(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b(?:array(?!\s*\()|bool|callable|(?:false|null)(?=\s*\|)|float|int|iterable|mixed|never|object|self|static|string|void)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/\b(?:array(?!\s*\()|bool|float|int|iterable|mixed|object|string|void)\b/i,alias:"type-declaration",greedy:!0},{pattern:/(\|\s*)(?:false|null)\b|\b(?:false|null)(?=\s*\|)/i,alias:"type-declaration",greedy:!0,lookbehind:!0},{pattern:/\b(?:parent|self|static)(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(\byield\s+)from\b/i,lookbehind:!0},/\bclass\b/i,{pattern:/((?:^|[^\s>:]|(?:^|[^-])>|(?:^|[^:]):)\s*)\b(?:abstract|and|array|as|break|callable|case|catch|clone|const|continue|declare|default|die|do|echo|else|elseif|empty|enddeclare|endfor|endforeach|endif|endswitch|endwhile|enum|eval|exit|extends|final|finally|fn|for|foreach|function|global|goto|if|implements|include|include_once|instanceof|insteadof|interface|isset|list|match|namespace|never|new|or|parent|print|private|protected|public|readonly|require|require_once|return|self|static|switch|throw|trait|try|unset|use|var|while|xor|yield|__halt_compiler)\b/i,lookbehind:!0}],"argument-name":{pattern:/([(,]\s*)\b[a-z_]\w*(?=\s*:(?!:))/i,lookbehind:!0},"class-name":[{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self|\s+static))\s+|\bcatch\s*\()\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/(\|\s*)\b[a-z_]\w*(?!\\)\b/i,greedy:!0,lookbehind:!0},{pattern:/\b[a-z_]\w*(?!\\)\b(?=\s*\|)/i,greedy:!0},{pattern:/(\|\s*)(?:\\?\b[a-z_]\w*)+\b/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(?:\\?\b[a-z_]\w*)+\b(?=\s*\|)/i,alias:"class-name-fully-qualified",greedy:!0,inside:{punctuation:/\\/}},{pattern:/(\b(?:extends|implements|instanceof|new(?!\s+self\b|\s+static\b))\s+|\bcatch\s*\()(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:"class-name-fully-qualified",greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*\$)/i,alias:"type-declaration",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-declaration"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/\b[a-z_]\w*(?=\s*::)/i,alias:"static-context",greedy:!0},{pattern:/(?:\\?\b[a-z_]\w*)+(?=\s*::)/i,alias:["class-name-fully-qualified","static-context"],greedy:!0,inside:{punctuation:/\\/}},{pattern:/([(,?]\s*)[a-z_]\w*(?=\s*\$)/i,alias:"type-hint",greedy:!0,lookbehind:!0},{pattern:/([(,?]\s*)(?:\\?\b[a-z_]\w*)+(?=\s*\$)/i,alias:["class-name-fully-qualified","type-hint"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}},{pattern:/(\)\s*:\s*(?:\?\s*)?)\b[a-z_]\w*(?!\\)\b/i,alias:"return-type",greedy:!0,lookbehind:!0},{pattern:/(\)\s*:\s*(?:\?\s*)?)(?:\\?\b[a-z_]\w*)+\b(?!\\)/i,alias:["class-name-fully-qualified","return-type"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,function:{pattern:/(^|[^\\\w])\\?[a-z_](?:[\w\\]*\w)?(?=\s*\()/i,lookbehind:!0,inside:{punctuation:/\\/}},property:{pattern:/(->\s*)\w+/,lookbehind:!0},number:a,operator:s,punctuation:r};var i={pattern:/\{\$(?:\{(?:\{[^{}]+\}|[^{}]+)\}|[^{}])+\}|(^|[^\\{])\$+(?:\w+(?:\[[^\r\n\[\]]+\]|->\w+)?)/,lookbehind:!0,inside:e.languages.php},o=[{pattern:/<<<'([^']+)'[\r\n](?:.*[\r\n])*?\1;/,alias:"nowdoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<'[^']+'|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<'?|[';]$/}}}},{pattern:/<<<(?:"([^"]+)"[\r\n](?:.*[\r\n])*?\1;|([a-z_]\w*)[\r\n](?:.*[\r\n])*?\2;)/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<<(?:"[^"]+"|[a-z_]\w*)|[a-z_]\w*;$/i,alias:"symbol",inside:{punctuation:/^<<<"?|[";]$/}},interpolation:i}},{pattern:/`(?:\\[\s\S]|[^\\`])*`/,alias:"backtick-quoted-string",greedy:!0},{pattern:/'(?:\\[\s\S]|[^\\'])*'/,alias:"single-quoted-string",greedy:!0},{pattern:/"(?:\\[\s\S]|[^\\"])*"/,alias:"double-quoted-string",greedy:!0,inside:{interpolation:i}}];e.languages.insertBefore("php","variable",{string:o,attribute:{pattern:/#\[(?:[^"'\/#]|\/(?![*/])|\/\/.*$|#(?!\[).*$|\/\*(?:[^*]|\*(?!\/))*\*\/|"(?:\\[\s\S]|[^\\"])*"|'(?:\\[\s\S]|[^\\'])*')+\](?=\s*[a-z$#])/im,greedy:!0,inside:{"attribute-content":{pattern:/^(#\[)[\s\S]+(?=\]$)/,lookbehind:!0,inside:{comment:t,string:o,"attribute-class-name":[{pattern:/([^:]|^)\b[a-z_]\w*(?!\\)\b/i,alias:"class-name",greedy:!0,lookbehind:!0},{pattern:/([^:]|^)(?:\\?\b[a-z_]\w*)+/i,alias:["class-name","class-name-fully-qualified"],greedy:!0,lookbehind:!0,inside:{punctuation:/\\/}}],constant:n,number:a,operator:s,punctuation:r}},delimiter:{pattern:/^#\[|\]$/,alias:"punctuation"}}}}),e.hooks.add("before-tokenize",(function(t){/<\?/.test(t.code)&&e.languages["markup-templating"].buildPlaceholders(t,"php",/<\?(?:[^"'/#]|\/(?![*/])|("|')(?:\\[\s\S]|(?!\1)[^\\])*\1|(?:\/\/|#(?!\[))(?:[^?\n\r]|\?(?!>))*(?=$|\?>|[\r\n])|#\[|\/\*(?:[^*]|\*(?!\/))*(?:\*\/|$))*?(?:\?>|$)/g)})),e.hooks.add("after-tokenize",(function(t){e.languages["markup-templating"].tokenizePlaceholders(t,"php")}))}(s),s.languages.python={comment:{pattern:/(^|[^\\])#.*/,lookbehind:!0,greedy:!0},"string-interpolation":{pattern:/(?:f|fr|rf)(?:("""|''')[\s\S]*?\1|("|')(?:\\.|(?!\2)[^\\\r\n])*\2)/i,greedy:!0,inside:{interpolation:{pattern:/((?:^|[^{])(?:\{\{)*)\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}]|\{(?!\{)(?:[^{}])+\})+\})+\}/,lookbehind:!0,inside:{"format-spec":{pattern:/(:)[^:(){}]+(?=\}$)/,lookbehind:!0},"conversion-option":{pattern:/![sra](?=[:}]$)/,alias:"punctuation"},rest:null}},string:/[\s\S]+/}},"triple-quoted-string":{pattern:/(?:[rub]|br|rb)?("""|''')[\s\S]*?\1/i,greedy:!0,alias:"string"},string:{pattern:/(?:[rub]|br|rb)?("|')(?:\\.|(?!\1)[^\\\r\n])*\1/i,greedy:!0},function:{pattern:/((?:^|\s)def[ \t]+)[a-zA-Z_]\w*(?=\s*\()/g,lookbehind:!0},"class-name":{pattern:/(\bclass\s+)\w+/i,lookbehind:!0},decorator:{pattern:/(^[\t ]*)@\w+(?:\.\w+)*/m,lookbehind:!0,alias:["annotation","punctuation"],inside:{punctuation:/\./}},keyword:/\b(?:_(?=\s*:)|and|as|assert|async|await|break|case|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|match|nonlocal|not|or|pass|print|raise|return|try|while|with|yield)\b/,builtin:/\b(?:__import__|abs|all|any|apply|ascii|basestring|bin|bool|buffer|bytearray|bytes|callable|chr|classmethod|cmp|coerce|compile|complex|delattr|dict|dir|divmod|enumerate|eval|execfile|file|filter|float|format|frozenset|getattr|globals|hasattr|hash|help|hex|id|input|int|intern|isinstance|issubclass|iter|len|list|locals|long|map|max|memoryview|min|next|object|oct|open|ord|pow|property|range|raw_input|reduce|reload|repr|reversed|round|set|setattr|slice|sorted|staticmethod|str|sum|super|tuple|type|unichr|unicode|vars|xrange|zip)\b/,boolean:/\b(?:False|None|True)\b/,number:/\b0(?:b(?:_?[01])+|o(?:_?[0-7])+|x(?:_?[a-f0-9])+)\b|(?:\b\d+(?:_\d+)*(?:\.(?:\d+(?:_\d+)*)?)?|\B\.\d+(?:_\d+)*)(?:e[+-]?\d+(?:_\d+)*)?j?(?!\w)/i,operator:/[-+%=]=?|!=|:=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]/,punctuation:/[{}[\];(),.:]/},s.languages.python["string-interpolation"].inside.interpolation.inside.rest=s.languages.python,s.languages.py=s.languages.python,function(e){e.languages.ruby=e.languages.extend("clike",{comment:{pattern:/#.*|^=begin\s[\s\S]*?^=end/m,greedy:!0},"class-name":{pattern:/(\b(?:class|module)\s+|\bcatch\s+\()[\w.\\]+|\b[A-Z_]\w*(?=\s*\.\s*new\b)/,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:BEGIN|END|alias|and|begin|break|case|class|def|define_method|defined|do|each|else|elsif|end|ensure|extend|for|if|in|include|module|new|next|nil|not|or|prepend|private|protected|public|raise|redo|require|rescue|retry|return|self|super|then|throw|undef|unless|until|when|while|yield)\b/,operator:/\.{2,3}|&\.|===||[!=]?~|(?:&&|\|\||<<|>>|\*\*|[+\-*/%<>!^&|=])=?|[?:]/,punctuation:/[(){}[\].,;]/}),e.languages.insertBefore("ruby","operator",{"double-colon":{pattern:/::/,alias:"punctuation"}});var t={pattern:/((?:^|[^\\])(?:\\{2})*)#\{(?:[^{}]|\{[^{}]*\})*\}/,lookbehind:!0,inside:{content:{pattern:/^(#\{)[\s\S]+(?=\}$)/,lookbehind:!0,inside:e.languages.ruby},delimiter:{pattern:/^#\{|\}$/,alias:"punctuation"}}};delete e.languages.ruby.function;var n="(?:"+[/([^a-zA-Z0-9\s{(\[<=])(?:(?!\1)[^\\]|\\[\s\S])*\1/.source,/\((?:[^()\\]|\\[\s\S]|\((?:[^()\\]|\\[\s\S])*\))*\)/.source,/\{(?:[^{}\\]|\\[\s\S]|\{(?:[^{}\\]|\\[\s\S])*\})*\}/.source,/\[(?:[^\[\]\\]|\\[\s\S]|\[(?:[^\[\]\\]|\\[\s\S])*\])*\]/.source,/<(?:[^<>\\]|\\[\s\S]|<(?:[^<>\\]|\\[\s\S])*>)*>/.source].join("|")+")",a=/(?:"(?:\\.|[^"\\\r\n])*"|(?:\b[a-zA-Z_]\w*|[^\s\0-\x7F]+)[?!]?|\$.)/.source;e.languages.insertBefore("ruby","keyword",{"regex-literal":[{pattern:RegExp(/%r/.source+n+/[egimnosux]{0,6}/.source),greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}},{pattern:/(^|[^/])\/(?!\/)(?:\[[^\r\n\]]+\]|\\.|[^[/\\\r\n])+\/[egimnosux]{0,6}(?=\s*(?:$|[\r\n,.;})#]))/,lookbehind:!0,greedy:!0,inside:{interpolation:t,regex:/[\s\S]+/}}],variable:/[@$]+[a-zA-Z_]\w*(?:[?!]|\b)/,symbol:[{pattern:RegExp(/(^|[^:]):/.source+a),lookbehind:!0,greedy:!0},{pattern:RegExp(/([\r\n{(,][ \t]*)/.source+a+/(?=:(?!:))/.source),lookbehind:!0,greedy:!0}],"method-definition":{pattern:/(\bdef\s+)\w+(?:\s*\.\s*\w+)?/,lookbehind:!0,inside:{function:/\b\w+$/,keyword:/^self\b/,"class-name":/^\w+/,punctuation:/\./}}}),e.languages.insertBefore("ruby","string",{"string-literal":[{pattern:RegExp(/%[qQiIwWs]?/.source+n),greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/("|')(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|(?!\1)[^\\#\r\n])*\1/,greedy:!0,inside:{interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?([a-z_]\w*)[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?[a-z_]\w*|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?/}},interpolation:t,string:/[\s\S]+/}},{pattern:/<<[-~]?'([a-z_]\w*)'[\r\n](?:.*[\r\n])*?[\t ]*\1/i,alias:"heredoc-string",greedy:!0,inside:{delimiter:{pattern:/^<<[-~]?'[a-z_]\w*'|\b[a-z_]\w*$/i,inside:{symbol:/\b\w+/,punctuation:/^<<[-~]?'|'$/}},string:/[\s\S]+/}}],"command-literal":[{pattern:RegExp(/%x/.source+n),greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}},{pattern:/`(?:#\{[^}]+\}|#(?!\{)|\\(?:\r\n|[\s\S])|[^\\`#\r\n])*`/,greedy:!0,inside:{interpolation:t,command:{pattern:/[\s\S]+/,alias:"string"}}}]}),delete e.languages.ruby.string,e.languages.insertBefore("ruby","number",{builtin:/\b(?:Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Fixnum|Float|Hash|IO|Integer|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|Stat|String|Struct|Symbol|TMS|Thread|ThreadGroup|Time|TrueClass)\b/,constant:/\b[A-Z][A-Z0-9_]*(?:[?!]|\b)/}),e.languages.rb=e.languages.ruby}(s),window.Prism=a,s}(),o=e=>t=>t.options.get(e),l=o("codesample_languages"),u=o("codesample_global_prismjs"),c=e=>r.Prism&&u(e)?r.Prism:i,d=e=>t(e)&&"PRE"===e.nodeName&&-1!==e.className.indexOf("language-"),g=e=>{const t=e.selection?e.selection.getNode():null;return d(t)?a.some(t):a.none()},p=e=>{const t=(e=>l(e)||[{text:"HTML/XML",value:"markup"},{text:"JavaScript",value:"javascript"},{text:"CSS",value:"css"},{text:"PHP",value:"php"},{text:"Ruby",value:"ruby"},{text:"Python",value:"python"},{text:"Java",value:"java"},{text:"C",value:"c"},{text:"C#",value:"csharp"},{text:"C++",value:"cpp"}])(e),n=(r=t,((e,t)=>0""),(e=>e.value));var r;const i=((e,t)=>g(e).fold((()=>t),(e=>{const n=e.className.match(/language-(\w+)/);return n?n[1]:t})))(e,n),o=(e=>g(e).bind((e=>a.from(e.textContent))).getOr(""))(e);e.windowManager.open({title:"Insert/Edit Code Sample",size:"large",body:{type:"panel",items:[{type:"listbox",name:"language",label:"Language",items:t},{type:"textarea",name:"code",label:"Code view"}]},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:{language:i,code:o},onSubmit:t=>{const n=t.getData();((e,t,n)=>{const a=e.dom;e.undoManager.transact((()=>{const r=g(e);return n=s.DOM.encode(n),r.fold((()=>{e.insertContent('
'+n+"
");const s=a.select("#__new")[0];a.setAttrib(s,"id",null),e.selection.select(s)}),(s=>{a.setAttrib(s,"class","language-"+t),s.innerHTML=n,c(e).highlightElement(s),e.selection.select(s)}))}))})(e,n.language,n.code),t.close()}})},b=(h=/^\s+|\s+$/g,e=>e.replace(h,""));var h,f=tinymce.util.Tools.resolve("tinymce.util.Tools");const m=(e,t=n)=>n=>{const a=()=>{n.setEnabled(e.selection.isEditable()),t(n)};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("codesample",(e=>{(e=>{const t=e.options.register;t("codesample_languages",{processor:"object[]"}),t("codesample_global_prismjs",{processor:"boolean",default:!1})})(e),(e=>{e.on("PreProcess",(t=>{const n=e.dom,a=n.select("pre[contenteditable=false]",t.node);f.each(f.grep(a,d),(e=>{const t=e.textContent;let a;for(n.setAttrib(e,"class",b(n.getAttrib(e,"class"))),n.setAttrib(e,"contentEditable",null),n.setAttrib(e,"data-mce-highlighted",null);a=e.firstChild;)e.removeChild(a);n.add(e,"code").textContent=t}))})),e.on("SetContent",(()=>{const t=e.dom,n=f.grep(t.select("pre"),(e=>d(e)&&"true"!==t.getAttrib(e,"data-mce-highlighted")));n.length&&e.undoManager.transact((()=>{f.each(n,(n=>{var a;f.each(t.select("br",n),(n=>{t.replace(e.getDoc().createTextNode("\n"),n)})),n.innerHTML=t.encode(null!==(a=n.textContent)&&void 0!==a?a:""),c(e).highlightElement(n),t.setAttrib(n,"data-mce-highlighted",!0),n.className=b(n.className)}))}))})),e.on("PreInit",(()=>{e.parser.addNodeFilter("pre",(e=>{var t;for(let n=0,a=e.length;n{const t=()=>e.execCommand("codesample");e.ui.registry.addToggleButton("codesample",{icon:"code-sample",tooltip:"Insert/edit code sample",onAction:t,onSetup:m(e,(t=>{t.setActive((e=>{const t=e.selection.getStart();return e.dom.is(t,'pre[class*="language-"]')})(e))}))}),e.ui.registry.addMenuItem("codesample",{text:"Code sample...",icon:"code-sample",onAction:t,onSetup:m(e)})})(e),(e=>{e.addCommand("codesample",(()=>{const t=e.selection.getNode();e.selection.isCollapsed()||d(t)?p(e):e.formatter.toggle("code")}))})(e),e.on("dblclick",(t=>{d(t.target)&&p(e)}))}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/directionality/plugin.min.js b/src/assets/tinyMCE/plugins/directionality/plugin.min.js deleted file mode 100644 index 19dee3a51..000000000 --- a/src/assets/tinyMCE/plugins/directionality/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>typeof e===t,o=t=>"string"===(t=>{const e=typeof t;return null===t?"null":"object"===e&&Array.isArray(t)?"array":"object"===e&&(o=r=t,(n=String).prototype.isPrototypeOf(o)||(null===(i=r.constructor)||void 0===i?void 0:i.name)===n.name)?"string":e;var o,r,n,i})(t),r=e("boolean"),n=t=>!(t=>null==t)(t),i=e("function"),s=e("number"),l=(!1,()=>false);class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return n(t)?a.some(t):a.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const u=(t,e)=>{for(let o=0,r=t.length;o{if(null==t)throw new Error("Node cannot be null or undefined");return{dom:t}},d=c,h=(t,e)=>{const o=t.dom;if(1!==o.nodeType)return!1;{const t=o;if(void 0!==t.matches)return t.matches(e);if(void 0!==t.msMatchesSelector)return t.msMatchesSelector(e);if(void 0!==t.webkitMatchesSelector)return t.webkitMatchesSelector(e);if(void 0!==t.mozMatchesSelector)return t.mozMatchesSelector(e);throw new Error("Browser lacks native selectors")}};"undefined"!=typeof window?window:Function("return this;")();const m=t=>e=>(t=>t.dom.nodeType)(e)===t,g=m(1),f=m(3),v=m(9),y=m(11),p=(t,e)=>{t.dom.removeAttribute(e)},w=i(Element.prototype.attachShadow)&&i(Node.prototype.getRootNode)?t=>d(t.dom.getRootNode()):t=>v(t)?t:d(t.dom.ownerDocument),b=t=>d(t.dom.host),N=t=>{const e=f(t)?t.dom.parentNode:t.dom;if(null==e||null===e.ownerDocument)return!1;const o=e.ownerDocument;return(t=>{const e=w(t);return y(o=e)&&n(o.dom.host)?a.some(e):a.none();var o})(d(e)).fold((()=>o.body.contains(e)),(r=N,i=b,t=>r(i(t))));var r,i},S=t=>"rtl"===((t,e)=>{const o=t.dom,r=window.getComputedStyle(o).getPropertyValue(e);return""!==r||N(t)?r:((t,e)=>(t=>void 0!==t.style&&i(t.style.getPropertyValue))(t)?t.style.getPropertyValue(e):"")(o,e)})(t,"direction")?"rtl":"ltr",A=(t,e)=>((t,o)=>((t,e)=>{const o=[];for(let r=0,n=t.length;r{const o=t.length,r=new Array(o);for(let n=0;nh(t,e))))(t),E=("li",t=>g(t)&&"li"===t.dom.nodeName.toLowerCase());const T=(t,e,n)=>{u(e,(e=>{const c=d(e),m=E(c),f=((t,e)=>{return(e?(o=t,r="ol,ul",((t,e,o)=>{let n=t.dom;const s=i(o)?o:l;for(;n.parentNode;){n=n.parentNode;const t=d(n);if(h(t,r))return a.some(t);if(s(t))break}return a.none()})(o,0,n)):a.some(t)).getOr(t);var o,r,n})(c,m);var v;(v=f,(t=>a.from(t.dom.parentNode).map(d))(v).filter(g)).each((e=>{if(t.setStyle(f.dom,"direction",null),S(e)===n?p(f,"dir"):((t,e,n)=>{((t,e,n)=>{if(!(o(n)||r(n)||s(n)))throw console.error("Invalid call to Attribute.set. Key ",e,":: Value ",n,":: Element ",t),new Error("Attribute value was not simple");t.setAttribute(e,n+"")})(t.dom,e,n)})(f,"dir",n),S(f)!==n&&t.setStyle(f.dom,"direction",n),m){const e=A(f,"li[dir],li[style]");u(e,(e=>{p(e,"dir"),t.setStyle(e.dom,"direction",null)}))}}))}))},C=(t,e)=>{t.selection.isEditable()&&(T(t.dom,t.selection.getSelectedBlocks(),e),t.nodeChanged())},D=(t,e)=>o=>{const r=r=>{const n=d(r.element);o.setActive(S(n)===e),o.setEnabled(t.selection.isEditable())};return t.on("NodeChange",r),o.setEnabled(t.selection.isEditable()),()=>t.off("NodeChange",r)};t.add("directionality",(t=>{(t=>{t.addCommand("mceDirectionLTR",(()=>{C(t,"ltr")})),t.addCommand("mceDirectionRTL",(()=>{C(t,"rtl")}))})(t),(t=>{t.ui.registry.addToggleButton("ltr",{tooltip:"Left to right",icon:"ltr",onAction:()=>t.execCommand("mceDirectionLTR"),onSetup:D(t,"ltr")}),t.ui.registry.addToggleButton("rtl",{tooltip:"Right to left",icon:"rtl",onAction:()=>t.execCommand("mceDirectionRTL"),onSetup:D(t,"rtl")})})(t)}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/emoticons/js/emojiimages.js b/src/assets/tinyMCE/plugins/emoticons/js/emojiimages.js deleted file mode 100644 index 6fcec717a..000000000 --- a/src/assets/tinyMCE/plugins/emoticons/js/emojiimages.js +++ /dev/null @@ -1 +0,0 @@ -window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'💯',fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'🔢',fitzpatrick_scale:false,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'😀',fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'😬',fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'😁',fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'😂',fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'🤣',fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'🥳',fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'😃',fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'😄',fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'😅',fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'😆',fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'😇',fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'😉',fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'😊',fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'🙂',fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'🙃',fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'☺️',fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'😋',fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'😌',fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'😍',fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'🥰',fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😘',fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'😗',fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'😙',fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'😚',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'😜',fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'🤪',fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'🤨',fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'🧐',fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'😝',fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'😛',fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'🤑',fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'🤓',fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'😎',fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'🤩',fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:'🤡',fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'🤠',fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:'🤗',fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'😏',fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'😶',fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'😐',fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'😑',fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'😒',fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'🙄',fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'🤔',fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'🤥',fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'🤭',fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'🤫',fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'🤬',fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'🤯',fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'😳',fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'😞',fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'😟',fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'😠',fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'😡',fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'😔',fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'😕',fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'🙁',fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'☹',fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'😣',fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'😖',fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'😫',fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'😩',fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'🥺',fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'😤',fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'😮',fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'😱',fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'😨',fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'😰',fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:'😯',fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:'😦',fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'😧',fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'😢',fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'😥',fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:'🤤',fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'😪',fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'😓',fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'🥵',fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'🥶',fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'😭',fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'😵',fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'😲',fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'🤐',fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'🤢',fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'🤧',fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:'🤮',fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'😷',fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'🤒',fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'🤕',fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'🥴',fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'😴',fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'💤',fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'💩',fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'😈',fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:'👿',fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'👹',fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'👺',fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'💀',fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'👻',fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'👽',fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:'🤖',fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'😺',fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'😸',fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'😹',fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'😻',fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'😼',fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'😽',fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'🙀',fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'😿',fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'😾',fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'🤲',fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'🙌',fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'👏',fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'👋',fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'🤙',fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'👍',fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'👎',fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'👊',fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'✊',fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'🤛',fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'🤜',fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'✌',fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'👌',fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'✋',fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'🤚',fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'👐',fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'💪',fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'🙏',fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:'🦶',fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:'🦵',fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:'🤝',fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'☝',fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'👆',fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'👇',fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'👈',fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'👉',fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'🖕',fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'🖐',fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'🤟',fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'🤘',fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'🤞',fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'🖖',fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'✍',fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:'🤳',fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'💅',fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:'👄',fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:'🦷',fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:'👅',fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'👂',fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:'👃',fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'👁',fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'👀',fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:'🧠',fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'👤',fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'👥',fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'🗣',fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'👶',fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:'🧒',fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'👦',fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:'👧',fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:'🧑',fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'👨',fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:'👩',fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'👱‍♀️',fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'👱',fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'🧔',fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'🧓',fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'👴',fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'👵',fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'👲',fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'🧕',fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'👳‍♀️',fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'👳',fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'👮‍♀️',fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'👮',fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'👷‍♀️',fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'👷',fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'💂‍♀️',fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'💂',fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'🕵️‍♀️',fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'🕵',fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'👩‍⚕️',fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'👨‍⚕️',fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'👩‍🌾',fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'👨‍🌾',fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'👩‍🍳',fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:'👨‍🍳',fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'👩‍🎓',fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:'👨‍🎓',fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'👩‍🎤',fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'👨‍🎤',fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'👩‍🏫',fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'👨‍🏫',fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'👩‍🏭',fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'👨‍🏭',fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'👩‍💻',fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'👨‍💻',fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'👩‍💼',fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'👨‍💼',fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'👩‍🔧',fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'👨‍🔧',fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'👩‍🔬',fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'👨‍🔬',fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'👩‍🎨',fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:'👨‍🎨',fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'👩‍🚒',fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'👨‍🚒',fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'👩‍✈️',fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'👨‍✈️',fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'👩‍🚀',fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'👨‍🚀',fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'👩‍⚖️',fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'👨‍⚖️',fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'🦸‍♀️',fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'🦸‍♂️',fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'🦹‍♀️',fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'🦹‍♂️',fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'🤶',fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'🎅',fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'🧙‍♀️',fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'🧙‍♂️',fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:'🧝‍♀️',fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:'🧝‍♂️',fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:'🧛‍♀️',fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'🧛‍♂️',fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'🧟‍♀️',fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'🧟‍♂️',fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:'🧞‍♀️',fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:'🧞‍♂️',fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'🧜‍♀️',fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:'🧜‍♂️',fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:'🧚‍♀️',fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:'🧚‍♂️',fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'👼',fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:'🤰',fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'🤱',fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'👸',fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'🤴',fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'👰',fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'🤵',fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'🏃‍♀️',fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'🏃',fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'🚶‍♀️',fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'🚶',fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'💃',fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'🕺',fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'👯',fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'👯‍♂️',fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'👫',fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'👬',fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'👭',fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'🙇‍♀️',fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'🙇',fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'🤦‍♂️',fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'🤦‍♀️',fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'🤷',fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'🤷‍♂️',fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'💁',fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'💁‍♂️',fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'🙅',fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'🙅‍♂️',fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'🙆',fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'🙆‍♂️',fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'🙋',fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'🙋‍♂️',fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'🙎',fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'🙎‍♂️',fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'🙍',fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'🙍‍♂️',fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'💇',fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'💇‍♂️',fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'💆',fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'💆‍♂️',fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'🧖‍♀️',fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'🧖‍♂️',fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'💑',fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👩‍❤️‍👩',fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'👨‍❤️‍👨',fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'💏',fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👩‍❤️‍💋‍👩',fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'👨‍❤️‍💋‍👨',fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'👪',fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'👨‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'👩‍👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'👨‍👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'👩‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'👩‍👧',fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'👩‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'👩‍👧‍👧',fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'👨‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'👨‍👧',fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👦',fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'👨‍👦‍👦',fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'👨‍👧‍👧',fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'🧶',fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'🧵',fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:'🧥',fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'🥼',fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'👚',fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'👕',fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:'👖',fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'👔',fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'👗',fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'👙',fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'👘',fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'💄',fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'💋',fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'👣',fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'🥿',fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'👠',fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'👡',fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:'👢',fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'👞',fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'👟',fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'🥾',fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:'🧦',fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'🧤',fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'🧣',fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'👒',fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'🎩',fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'🧢',fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'⛑',fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'🎓',fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'👑',fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'🎒',fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:'🧳',fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'👝',fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'👛',fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'👜',fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'💼',fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'👓',fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'🕶',fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'🥽',fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'💍',fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'🌂',fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'🐶',fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'🐱',fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'🐭',fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'🐹',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'🐰',fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'🦊',fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'🐻',fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'🐼',fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'🐨',fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'🐯',fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'🦁',fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐮',fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'🐷',fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'🐽',fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'🐸',fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'🦑',fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'🐙',fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'🦐',fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'🐵',fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'🦍',fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'🙈',fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'🙉',fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'🙊',fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'🐒',fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'🐔',fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'🐧',fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'🐦',fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'🐤',fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'🐣',fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'🐥',fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'🦆',fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'🦅',fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'🦉',fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'🦇',fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'🐺',fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'🐗',fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'🐴',fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'🦄',fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'🐝',fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'🐛',fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'🦋',fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'🐌',fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'🐞',fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'🐜',fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'🦗',fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'🕷',fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'🦂',fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'🦀',fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'🐍',fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'🦎',fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'🦖',fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'🦕',fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'🐢',fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'🐠',fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'🐟',fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'🐡',fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'🐬',fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'🦈',fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'🐳',fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'🐋',fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'🐊',fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'🐆',fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'🦓',fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'🐅',fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'🐃',fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'🐂',fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'🐄',fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'🦌',fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'🐪',fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'🐫',fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'🦒',fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'🐘',fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'🦏',fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'🐐',fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'🐏',fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'🐑',fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'🐎',fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'🐖',fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'🐀',fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'🐁',fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'🐓',fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'🦃',fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'🕊',fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'🐕',fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'🐩',fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'🐈',fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'🐇',fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'🐿',fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'🦔',fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'🦝',fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'🦙',fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'🦛',fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'🦘',fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'🦡',fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'🦢',fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'🦚',fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'🦜',fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'🦞',fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'🦟',fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'🐾',fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'🐉',fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'🐲',fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'🌵',fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'🎄',fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'🌲',fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'🌳',fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'🌴',fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'🌱',fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'🌿',fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'☘',fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'🍀',fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'🎍',fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'🎋',fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'🍃',fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'🍂',fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'🍁',fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'🌾',fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'🌺',fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'🌻',fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'🌹',fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'🥀',fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'🌷',fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'🌼',fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'🌸',fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'💐',fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'🍄',fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'🌰',fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'🎃',fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'🐚',fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'🕸',fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'🌎',fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'🌍',fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'🌏',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'🌕',fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'🌖',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌗',fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌘',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌑',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌒',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌓',fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'🌔',fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌚',fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌝',fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌛',fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'🌜',fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'🌞',fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'🌙',fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'⭐',fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'🌟',fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'💫',fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'✨',fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:'☄',fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'☀️',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'🌤',fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'⛅',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'🌥',fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'🌦',fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'☁️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'🌧',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'⛈',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'🌩',fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'⚡',fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'🔥',fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'💥',fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'❄️',fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'🌨',fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'⛄',fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'☃',fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'🌬',fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'💨',fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'🌪',fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:'🌫',fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'☂',fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'☔',fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'💧',fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'💦',fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'🌊',fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'🍏',fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'🍎',fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'🍐',fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'🍊',fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'🍋',fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'🍌',fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'🍉',fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'🍇',fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'🍓',fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'🍈',fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'🍒',fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'🍑',fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'🍍',fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'🥥',fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'🥝',fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'🥭',fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'🥑',fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'🥦',fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'🍅',fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'🍆',fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'🥒',fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'🥕',fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'🌶',fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'🥔',fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'🌽',fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'🥬',fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'🍠',fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'🥜',fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'🍯',fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'🥐',fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'🍞',fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'🥖',fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'🥯',fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'🥨',fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'🧀',fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'🥚',fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'🥓',fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'🥩',fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'🥞',fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'🍗',fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'🍖',fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'🦴',fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'🍤',fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'🍳',fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'🍔',fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'🍟',fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'🥙',fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'🌭',fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'🍕',fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'🥪',fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'🥫',fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'🍝',fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'🌮',fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'🌯',fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'🥗',fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'🥘',fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'🍜',fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'🍲',fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'🍥',fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'🥠',fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'🍣',fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'🍱',fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'🍛',fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'🍙',fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'🍚',fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'🍘',fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'🍢',fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'🍡',fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'🍧',fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'🍨',fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'🍦',fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'🥧',fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'🍰',fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'🧁',fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'🥮',fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'🎂',fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'🍮',fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'🍬',fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'🍭',fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'🍫',fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'🍿',fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'🥟',fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'🍩',fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'🍪',fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'🥛',fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍺',fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'🍻',fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'🥂',fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'🍷',fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'🥃',fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'🍸',fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'🍹',fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'🍾',fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'🍶',fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'🍵',fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'🥤',fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'☕',fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'🍼',fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'🧂',fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'🥄',fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'🍴',fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'🍽',fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'🥣',fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'🥡',fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'🥢',fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'⚽',fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'🏀',fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'🏈',fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:'⚾',fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:'🥎',fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'🎾',fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:'🏐',fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:'🏉',fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'🥏',fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'🎱',fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'⛳',fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'🏌️‍♀️',fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:'🏌',fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'🏓',fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:'🏸',fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:'🥅',fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:'🏒',fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:'🏑',fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'🥍',fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:'🏏',fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'🎿',fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'⛷',fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'🏂',fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'🤺',fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♀️',fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'🤼‍♂️',fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♀️',fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'🤸‍♂️',fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'🤾‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:'🤾‍♂️',fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:'⛸',fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:'🥌',fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:'🛹',fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'🛷',fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'🏹',fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'🎣',fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'🥊',fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'🥋',fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'🚣‍♀️',fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'🚣',fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'🧗‍♀️',fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'🧗‍♂️',fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'🏊‍♀️',fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'🏊',fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♀️',fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'🤽‍♂️',fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♀️',fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'🧘‍♂️',fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'🏄‍♀️',fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'🏄',fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'🛀',fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'⛹️‍♀️',fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:'⛹',fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'🏋️‍♀️',fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'🏋',fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'🚴‍♀️',fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'🚴',fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'🚵‍♀️',fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'🚵',fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'🏇',fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'🕴',fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'🏆',fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'🎽',fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:'🏅',fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'🎖',fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'🥇',fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'🥈',fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'🥉',fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'🎗',fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'🏵',fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'🎫',fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'🎟',fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'🎭',fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'🎨',fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'🎪',fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♀️',fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'🤹‍♂️',fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'🎤',fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'🎧',fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'🎼',fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'🎹',fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'🥁',fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'🎷',fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:'🎺',fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:'🎸',fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'🎻',fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:'🎬',fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'🎮',fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'👾',fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'🎯',fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'🎲',fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'🎰',fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'🧩',fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'🎳',fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'🚗',fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'🚕',fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'🚙',fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'🚌',fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'🚎',fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'🏎',fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'🚓',fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'🚑',fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'🚒',fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'🚐',fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'🚚',fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'🚛',fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'🚜',fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'🛴',fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'🏍',fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'🚲',fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'🛵',fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'🚨',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'🚔',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'🚍',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'🚘',fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'🚖',fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'🚡',fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'🚠',fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'🚟',fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'🚃',fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'🚋',fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'🚝',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'🚄',fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'🚅',fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'🚈',fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'🚞',fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'🚂',fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'🚆',fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'🚇',fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'🚊',fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'🚉',fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'🛸',fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'🚁',fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'🛩',fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'✈️',fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'🛫',fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'🛬',fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'⛵',fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'🛥',fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'🚤',fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'⛴',fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'🛳',fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'🚀',fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'🛰',fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'💺',fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'🛶',fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'⚓',fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'🚧',fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'⛽',fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'🚏',fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'🚦',fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'🚥',fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'🏁',fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'🚢',fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'🎡',fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'🎢',fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'🎠',fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'🏗',fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'🌁',fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'🗼',fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'🏭',fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'⛲',fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'🎑',fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'⛰',fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'🏔',fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'🗻',fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'🌋',fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'🗾',fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'🏕',fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'⛺',fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'🏞',fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'🛣',fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'🛤',fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'🌅',fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'🌄',fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'🏜',fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'🏖',fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'🏝',fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'🌇',fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'🌆',fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'🏙',fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'🌃',fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'🌉',fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'🌌',fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'🌠',fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'🎇',fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'🎆',fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'🌈',fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'🏘',fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'🏰',fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'🏯',fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'🏟',fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'🗽',fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:'🏠',fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'🏡',fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'🏚',fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'🏢',fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'🏬',fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'🏣',fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'🏤',fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'🏥',fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'🏦',fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'🏨',fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'🏪',fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'🏫',fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'🏩',fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'💒',fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'🏛',fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'⛪',fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'🕌',fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'🕍',fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'🕋',fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'⛩',fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'⌚',fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'📱',fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:'📲',fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'💻',fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'⌨',fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'🖥',fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:'🖨',fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:'🖱',fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'🖲',fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:'🕹',fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:'🗜',fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'💽',fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'💾',fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'💿',fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'📀',fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'📼',fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:'📷',fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'📸',fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:'📹',fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:'🎥',fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'📽',fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:'🎞',fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'📞',fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'☎️',fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'📟',fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:'📠',fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'📺',fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'📻',fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'🎙',fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:'🎚',fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:'🎛',fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'🧭',fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'⏱',fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:'⏲',fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'⏰',fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'🕰',fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'⏳',fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'⌛',fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'📡',fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'🔋',fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:'🔌',fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'💡',fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'🔦',fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:'🕯',fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'🧯',fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'🗑',fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:'🛢',fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'💸',fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'💵',fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'💴',fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'💶',fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'💷',fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'💰',fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'💳',fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'💎',fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'⚖',fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'🧰',fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'🔧',fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:'🔨',fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'⚒',fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'🛠',fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:'⛏',fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'🔩',fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:'⚙',fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:'🧱',fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:'⛓',fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'🧲',fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'🔫',fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'💣',fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'🧨',fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'🔪',fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:'🗡',fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:'⚔',fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:'🛡',fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'🚬',fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'☠',fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'⚰',fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'⚱',fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:'🏺',fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'🔮',fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'📿',fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'🧿',fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:'💈',fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'⚗',fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'🔭',fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'🔬',fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:'🕳',fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'💊',fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'💉',fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'🧬',fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'🦠',fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'🧫',fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'🧪',fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'🌡',fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'🧹',fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:'🧺',fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:'🧻',fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:'🏷',fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'🔖',fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'🚽',fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'🚿',fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'🛁',fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'🧼',fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'🧽',fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'🧴',fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:'🔑',fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:'🗝',fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'🛋',fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'🛌',fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:'🛏',fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:'🚪',fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:'🛎',fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'🧸',fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:'🖼',fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:'🗺',fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'⛱',fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'🗿',fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'🛍',fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:'🛒',fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'🎈',fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'🎏',fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'🎀',fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'🎁',fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'🎊',fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'🎉',fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'🎎',fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'🎐',fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'🎌',fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'🏮',fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:'🧧',fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'✉️',fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'📩',fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'📨',fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'📧',fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'💌',fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'📮',fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'📪',fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'📫',fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'📬',fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'📭',fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'📦',fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'📯',fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'📥',fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'📤',fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'📜',fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'📃',fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'📑',fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'🧾',fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'📊',fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'📈',fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'📉',fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'📄',fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:'📅',fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'📆',fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'🗓',fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:'📇',fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'🗃',fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:'🗳',fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'🗄',fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'📋',fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'🗒',fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'📁',fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'📂',fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'🗂',fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'🗞',fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:'📰',fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'📓',fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'📕',fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'📗',fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'📘',fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'📙',fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'📔',fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:'📒',fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:'📚',fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'📖',fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:'🧷',fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:'🔗',fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'📎',fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'🖇',fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:'✂️',fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'📐',fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'📏',fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:'🧮',fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'📌',fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'📍',fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'🚩',fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'🏳',fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:'🏴',fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'🏳️‍🌈',fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'🔐',fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:'🔒',fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:'🔓',fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'🔏',fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'🖊',fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'🖋',fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'✒️',fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'📝',fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'✏️',fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'🖍',fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'🖌',fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'🔍',fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'🔎',fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:'❤️',fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'🧡',fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'💛',fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'💚',fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'💙',fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'💜',fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:'🖤',fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'💔',fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'❣',fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'💕',fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'💞',fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'💓',fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'💗',fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'💖',fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'💘',fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'💝',fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'💟',fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'☮',fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:'✝',fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'☪',fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'🕉',fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'☸',fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:'✡',fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'🔯',fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'🕎',fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:'☯',fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'☦',fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'🛐',fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'⛎',fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'♈',fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'♉',fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'♊',fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'♋',fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'♌',fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'♍',fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'♎',fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'♏',fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'♐',fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'♑',fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'♒',fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'♓',fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:'🆔',fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'⚛',fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'🈳',fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'🈹',fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'☢',fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:'☣',fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'📴',fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'📳',fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'🈶',fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'🈚',fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'🈸',fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'🈺',fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'🈷️',fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'✴️',fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:'🆚',fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'🉑',fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'💮',fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'🉐',fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'㊙️',fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'㊗️',fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'🈴',fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'🈵',fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'🈲',fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'🅰️',fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'🅱️',fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'🆎',fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'🆑',fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'🅾️',fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'🆘',fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'⛔',fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'📛',fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'🚫',fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'❌',fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:'⭕',fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:'🛑',fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:'💢',fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'♨️',fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'🚷',fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'🚯',fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'🚳',fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'🚱',fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'🔞',fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'📵',fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'❗',fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'❕',fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:'❓',fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'❔',fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'‼️',fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'⁉️',fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'🔅',fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'🔆',fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:'🔱',fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'⚜',fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'〽️',fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'⚠️',fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'🚸',fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:'🔰',fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'♻️',fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'🈯',fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'💹',fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'❇️',fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'✳️',fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'❎',fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'✅',fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'💠',fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'🌀',fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:'➿',fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'🌐',fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'Ⓜ️',fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'🏧',fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'🈂️',fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'🛂',fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'🛃',fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'🛄',fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'🛅',fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'♿',fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'🚭',fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'🚾',fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'🅿️',fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'🚰',fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'🚹',fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'🚺',fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'🚼',fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'🚻',fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'🚮',fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'🎦',fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'📶',fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'🈁',fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'🆖',fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'🆗',fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'🆙',fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:'🆒',fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'🆕',fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:'🆓',fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0️⃣',fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1️⃣',fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2️⃣',fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3️⃣',fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4️⃣',fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5️⃣',fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6️⃣',fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7️⃣',fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8️⃣',fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9️⃣',fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'🔟',fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*⃣',fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:'⏏️',fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'▶️',fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'⏸',fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'⏭',fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:'⏹',fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:'⏺',fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'⏯',fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:'⏮',fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'⏩',fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'⏪',fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'🔀',fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:'🔁',fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'🔂',fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'◀️',fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'🔼',fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'🔽',fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'⏫',fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'⏬',fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'➡️',fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'⬅️',fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'⬆️',fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'⬇️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'↗️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'↘️',fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'↙️',fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'↖️',fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'↕️',fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'↔️',fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'🔄',fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'↪️',fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'↩️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'⤴️',fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'⤵️',fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#️⃣',fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'ℹ️',fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'🔤',fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'🔡',fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'🔠',fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'🔣',fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'🎵',fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:'🎶',fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'〰️',fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'➰',fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'✔️',fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'🔃',fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'➕',fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'➖',fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'➗',fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'✖️',fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:'♾',fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'💲',fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'💱',fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'©️',fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'®️',fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'™️',fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:'🔚',fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:'🔙',fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:'🔛',fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:'🔝',fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:'🔜',fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'☑️',fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'🔘',fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:'⚪',fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'⚫',fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'🔴',fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'🔵',fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔸',fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔹',fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'🔶',fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'🔷',fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'🔺',fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'▪️',fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'▫️',fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'⬛',fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'⬜',fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'🔻',fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'◼️',fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'◻️',fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'◾',fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'◽',fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'🔲',fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'🔳',fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'🔈',fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'🔉',fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'🔊',fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'🔇',fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'📣',fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'📢',fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'🔔',fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'🔕',fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'🃏',fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'🀄',fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'♠️',fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'♣️',fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'♥️',fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'♦️',fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'🎴',fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'💭',fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'🗯',fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'💬',fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'🗨',fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'🕐',fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'🕑',fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'🕒',fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'🕓',fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'🕔',fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'🕕',fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'🕖',fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'🕗',fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'🕘',fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'🕙',fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'🕚',fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'🕛',fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'🕜',fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'🕝',fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'🕞',fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'🕟',fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'🕠',fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'🕡',fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'🕢',fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'🕣',fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'🕤',fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'🕥',fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'🕦',fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'🕧',fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'🇦🇫',fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:'🇦🇽',fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'🇦🇱',fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'🇩🇿',fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'🇦🇸',fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'🇦🇩',fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'🇦🇴',fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'🇦🇮',fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'🇦🇶',fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'🇦🇬',fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'🇦🇷',fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'🇦🇲',fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'🇦🇼',fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'🇦🇺',fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'🇦🇹',fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'🇦🇿',fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'🇧🇸',fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'🇧🇭',fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'🇧🇩',fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'🇧🇧',fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'🇧🇾',fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'🇧🇪',fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'🇧🇿',fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'🇧🇯',fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'🇧🇲',fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'🇧🇹',fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'🇧🇴',fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'🇧🇶',fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'🇧🇦',fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'🇧🇼',fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'🇧🇷',fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'🇮🇴',fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'🇻🇬',fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'🇧🇳',fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'🇧🇬',fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'🇧🇫',fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'🇧🇮',fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'🇨🇻',fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'🇰🇭',fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'🇨🇲',fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'🇨🇦',fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'🇮🇨',fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'🇰🇾',fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'🇨🇫',fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'🇹🇩',fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'🇨🇱',fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'🇨🇳',fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'🇨🇽',fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'🇨🇨',fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'🇨🇴',fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'🇰🇲',fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'🇨🇬',fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'🇨🇩',fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'🇨🇰',fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'🇨🇷',fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'🇭🇷',fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'🇨🇺',fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:'🇨🇼',fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'🇨🇾',fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'🇨🇿',fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'🇩🇰',fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'🇩🇯',fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'🇩🇲',fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'🇩🇴',fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'🇪🇨',fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'🇪🇬',fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'🇸🇻',fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'🇬🇶',fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'🇪🇷',fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'🇪🇪',fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'🇪🇹',fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'🇪🇺',fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'🇫🇰',fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'🇫🇴',fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'🇫🇯',fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'🇫🇮',fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'🇫🇷',fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'🇬🇫',fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'🇵🇫',fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'🇹🇫',fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'🇬🇦',fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'🇬🇲',fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'🇬🇪',fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'🇩🇪',fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'🇬🇭',fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'🇬🇮',fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'🇬🇷',fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'🇬🇱',fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'🇬🇩',fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'🇬🇵',fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'🇬🇺',fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'🇬🇹',fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'🇬🇬',fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'🇬🇳',fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'🇬🇼',fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'🇬🇾',fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'🇭🇹',fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'🇭🇳',fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'🇭🇰',fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'🇭🇺',fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'🇮🇸',fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'🇮🇳',fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'🇮🇩',fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'🇮🇷',fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'🇮🇶',fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'🇮🇪',fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'🇮🇲',fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'🇮🇱',fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'🇮🇹',fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'🇨🇮',fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'🇯🇲',fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'🇯🇵',fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'🇯🇪',fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'🇯🇴',fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'🇰🇿',fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'🇰🇪',fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'🇰🇮',fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'🇽🇰',fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'🇰🇼',fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'🇰🇬',fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'🇱🇦',fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'🇱🇻',fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'🇱🇧',fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'🇱🇸',fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'🇱🇷',fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'🇱🇾',fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'🇱🇮',fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'🇱🇹',fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'🇱🇺',fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'🇲🇴',fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'🇲🇰',fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'🇲🇬',fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'🇲🇼',fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'🇲🇾',fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'🇲🇻',fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'🇲🇱',fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'🇲🇹',fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'🇲🇭',fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'🇲🇶',fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'🇲🇷',fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'🇲🇺',fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'🇾🇹',fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'🇲🇽',fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'🇫🇲',fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'🇲🇩',fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'🇲🇨',fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'🇲🇳',fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'🇲🇪',fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'🇲🇸',fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'🇲🇦',fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'🇲🇿',fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'🇲🇲',fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'🇳🇦',fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'🇳🇷',fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'🇳🇵',fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'🇳🇱',fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'🇳🇨',fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'🇳🇿',fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'🇳🇮',fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'🇳🇪',fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'🇳🇬',fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'🇳🇺',fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'🇳🇫',fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'🇲🇵',fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'🇰🇵',fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'🇳🇴',fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'🇴🇲',fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'🇵🇰',fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'🇵🇼',fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'🇵🇸',fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'🇵🇦',fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'🇵🇬',fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'🇵🇾',fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'🇵🇪',fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'🇵🇭',fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'🇵🇳',fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'🇵🇱',fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'🇵🇹',fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'🇵🇷',fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'🇶🇦',fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:'🇷🇪',fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'🇷🇴',fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'🇷🇺',fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'🇷🇼',fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:'🇧🇱',fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'🇸🇭',fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'🇰🇳',fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'🇱🇨',fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'🇵🇲',fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'🇻🇨',fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'🇼🇸',fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'🇸🇲',fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'🇸🇹',fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'🇸🇦',fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'🇸🇳',fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'🇷🇸',fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'🇸🇨',fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'🇸🇱',fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'🇸🇬',fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'🇸🇽',fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'🇸🇰',fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'🇸🇮',fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'🇸🇧',fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'🇸🇴',fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'🇿🇦',fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'🇬🇸',fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'🇰🇷',fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'🇸🇸',fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'🇪🇸',fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'🇱🇰',fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'🇸🇩',fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'🇸🇷',fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'🇸🇿',fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'🇸🇪',fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'🇨🇭',fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'🇸🇾',fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'🇹🇼',fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'🇹🇯',fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'🇹🇿',fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'🇹🇭',fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'🇹🇱',fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'🇹🇬',fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'🇹🇰',fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'🇹🇴',fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'🇹🇹',fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'🇹🇳',fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'🇹🇷',fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'🇹🇲',fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'🇹🇨',fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'🇹🇻',fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'🇺🇬',fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'🇺🇦',fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'🇦🇪',fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'🇬🇧',fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:'🏴󠁧󠁢󠁥󠁮󠁧󠁿',fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:'🏴󠁧󠁢󠁳󠁣󠁴󠁿',fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:'🏴󠁧󠁢󠁷󠁬󠁳󠁿',fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'🇺🇸',fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'🇻🇮',fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'🇺🇾',fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'🇺🇿',fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'🇻🇺',fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'🇻🇦',fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'🇻🇪',fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'🇻🇳',fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'🇼🇫',fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'🇪🇭',fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'🇾🇪',fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'🇿🇲',fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'🇿🇼',fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'🇺🇳',fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'🏴‍☠️',fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/emoticons/js/emojiimages.min.js b/src/assets/tinyMCE/plugins/emoticons/js/emojiimages.min.js deleted file mode 100644 index 37f3bcf83..000000000 --- a/src/assets/tinyMCE/plugins/emoticons/js/emojiimages.min.js +++ /dev/null @@ -1,3 +0,0 @@ -// Source: npm package: emojilib -// Images provided by twemoji: https://github.com/twitter/twemoji -window.tinymce.Resource.add("tinymce.plugins.emoticons",{100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:'\u{1f4af}',fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:'\u{1f522}',fitzpatrick_scale:!1,category:"symbols"},grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:'\u{1f600}',fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:'\u{1f62c}',fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:'\u{1f601}',fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:'\u{1f602}',fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:'\u{1f923}',fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:'\u{1f973}',fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:'\u{1f603}',fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:'\u{1f604}',fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:'\u{1f605}',fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:'\u{1f606}',fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:'\u{1f607}',fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:'\u{1f609}',fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:'\u{1f60a}',fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:'\u{1f642}',fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:'\u{1f643}',fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:'\u263a\ufe0f',fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:'\u{1f60b}',fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:'\u{1f60c}',fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:'\u{1f60d}',fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:'\u{1f970}',fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f618}',fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:'\u{1f617}',fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:'\u{1f619}',fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:'\u{1f61a}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:'\u{1f61c}',fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:'\u{1f92a}',fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:'\u{1f928}',fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:'\u{1f9d0}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:'\u{1f61d}',fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:'\u{1f61b}',fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:'\u{1f911}',fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:'\u{1f913}',fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:'\u{1f60e}',fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:'\u{1f929}',fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:'\u{1f921}',fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:'\u{1f920}',fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:'\u{1f917}',fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:'\u{1f60f}',fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:'\u{1f636}',fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:'\u{1f610}',fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:'\u{1f611}',fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:'\u{1f612}',fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:'\u{1f644}',fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:'\u{1f914}',fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:'\u{1f925}',fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:'\u{1f92d}',fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:'\u{1f92b}',fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:'\u{1f92c}',fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:'\u{1f92f}',fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:'\u{1f633}',fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:'\u{1f61e}',fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:'\u{1f61f}',fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:'\u{1f620}',fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:'\u{1f621}',fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:'\u{1f614}',fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:'\u{1f615}',fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:'\u{1f641}',fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:'\u2639',fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:'\u{1f623}',fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:'\u{1f616}',fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:'\u{1f62b}',fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:'\u{1f629}',fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:'\u{1f97a}',fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:'\u{1f624}',fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:'\u{1f62e}',fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:'\u{1f631}',fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:'\u{1f628}',fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:'\u{1f630}',fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:'\u{1f62f}',fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:'\u{1f626}',fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:'\u{1f627}',fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:'\u{1f622}',fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:'\u{1f625}',fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:'\u{1f924}',fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:'\u{1f62a}',fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:'\u{1f613}',fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:'\u{1f975}',fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:'\u{1f976}',fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:'\u{1f62d}',fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:'\u{1f635}',fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:'\u{1f632}',fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:'\u{1f910}',fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:'\u{1f922}',fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:'\u{1f927}',fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:'\u{1f92e}',fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:'\u{1f637}',fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:'\u{1f912}',fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:'\u{1f915}',fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:'\u{1f974}',fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:'\u{1f634}',fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:'\u{1f4a4}',fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:'\u{1f4a9}',fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:'\u{1f608}',fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:'\u{1f47f}',fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:'\u{1f479}',fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:'\u{1f47a}',fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:'\u{1f480}',fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:'\u{1f47b}',fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:'\u{1f47d}',fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:'\u{1f916}',fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:'\u{1f63a}',fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:'\u{1f638}',fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:'\u{1f639}',fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:'\u{1f63b}',fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:'\u{1f63c}',fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:'\u{1f63d}',fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:'\u{1f640}',fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:'\u{1f63f}',fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:'\u{1f63e}',fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:'\u{1f932}',fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:'\u{1f64c}',fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:'\u{1f44f}',fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:'\u{1f44b}',fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:'\u{1f919}',fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:'\u{1f44d}',fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:'\u{1f44e}',fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:'\u{1f44a}',fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:'\u270a',fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:'\u{1f91b}',fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:'\u{1f91c}',fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:'\u270c',fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:'\u{1f44c}',fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:'\u270b',fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:'\u{1f91a}',fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:'\u{1f450}',fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:'\u{1f4aa}',fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:'\u{1f64f}',fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:'\u{1f9b6}',fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:'\u{1f9b5}',fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:'\u{1f91d}',fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:'\u261d',fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:'\u{1f446}',fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:'\u{1f447}',fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:'\u{1f448}',fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:'\u{1f449}',fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:'\u{1f595}',fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:'\u{1f590}',fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:'\u{1f91f}',fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:'\u{1f918}',fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:'\u{1f91e}',fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:'\u{1f596}',fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:'\u270d',fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:'\u{1f933}',fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:'\u{1f485}',fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:'\u{1f444}',fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:'\u{1f9b7}',fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:'\u{1f445}',fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:'\u{1f442}',fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:'\u{1f443}',fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:'\u{1f441}',fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:'\u{1f440}',fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:'\u{1f9e0}',fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:'\u{1f464}',fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:'\u{1f465}',fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:'\u{1f5e3}',fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:'\u{1f476}',fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:'\u{1f9d2}',fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:'\u{1f466}',fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:'\u{1f467}',fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:'\u{1f9d1}',fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:'\u{1f468}',fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:'\u{1f469}',fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:'\u{1f471}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:'\u{1f471}',fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:'\u{1f9d4}',fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:'\u{1f9d3}',fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:'\u{1f474}',fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:'\u{1f475}',fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:'\u{1f472}',fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:'\u{1f9d5}',fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:'\u{1f473}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:'\u{1f473}',fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:'\u{1f46e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:'\u{1f46e}',fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:'\u{1f477}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:'\u{1f477}',fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:'\u{1f482}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:'\u{1f482}',fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:'\u{1f575}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:'\u{1f575}',fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:'\u{1f469}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:'\u{1f468}\u200d\u2695\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:'\u{1f469}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:'\u{1f468}\u200d\u{1f33e}',fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:'\u{1f469}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:'\u{1f468}\u200d\u{1f373}',fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:'\u{1f469}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:'\u{1f468}\u200d\u{1f393}',fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:'\u{1f469}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:'\u{1f468}\u200d\u{1f3a4}',fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:'\u{1f469}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:'\u{1f468}\u200d\u{1f3eb}',fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:'\u{1f469}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:'\u{1f468}\u200d\u{1f3ed}',fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:'\u{1f469}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:'\u{1f468}\u200d\u{1f4bb}',fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:'\u{1f469}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:'\u{1f468}\u200d\u{1f4bc}',fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:'\u{1f469}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:'\u{1f468}\u200d\u{1f527}',fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:'\u{1f469}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:'\u{1f468}\u200d\u{1f52c}',fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:'\u{1f469}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:'\u{1f468}\u200d\u{1f3a8}',fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:'\u{1f469}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:'\u{1f468}\u200d\u{1f692}',fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:'\u{1f469}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:'\u{1f468}\u200d\u2708\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:'\u{1f469}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:'\u{1f468}\u200d\u{1f680}',fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:'\u{1f469}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:'\u{1f468}\u200d\u2696\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:'\u{1f9b8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:'\u{1f9b8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:'\u{1f9b9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:'\u{1f9b9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:'\u{1f936}',fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:'\u{1f385}',fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:'\u{1f9d9}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:'\u{1f9d9}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:'\u{1f9dd}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:'\u{1f9dd}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:'\u{1f9db}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:'\u{1f9db}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:'\u{1f9df}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:'\u{1f9df}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:'\u{1f9de}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:'\u{1f9de}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:'\u{1f9dc}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:'\u{1f9dc}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:'\u{1f9da}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:'\u{1f9da}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:'\u{1f47c}',fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:'\u{1f930}',fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:'\u{1f931}',fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:'\u{1f478}',fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:'\u{1f934}',fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:'\u{1f470}',fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:'\u{1f935}',fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:'\u{1f3c3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:'\u{1f3c3}',fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:'\u{1f6b6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:'\u{1f6b6}',fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:'\u{1f483}',fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:'\u{1f57a}',fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:'\u{1f46f}',fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:'\u{1f46f}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:'\u{1f46b}',fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:'\u{1f46c}',fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:'\u{1f46d}',fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:'\u{1f647}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:'\u{1f647}',fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:'\u{1f926}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:'\u{1f926}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:'\u{1f937}',fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:'\u{1f937}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:'\u{1f481}',fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:'\u{1f481}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:'\u{1f645}',fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:'\u{1f645}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:'\u{1f646}',fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:'\u{1f646}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:'\u{1f64b}',fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:'\u{1f64b}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:'\u{1f64e}',fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:'\u{1f64e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}',fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:'\u{1f64d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:'\u{1f487}',fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:'\u{1f487}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:'\u{1f486}',fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:'\u{1f486}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:'\u{1f9d6}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f491}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f48f}',fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}',fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:'\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:'\u{1f46a}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:'\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f469}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f469}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:'\u{1f468}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f466}\u200d\u{1f466}',fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:'\u{1f468}\u200d\u{1f467}\u200d\u{1f467}',fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:'\u{1f9f6}',fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:'\u{1f9f5}',fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:'\u{1f9e5}',fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:'\u{1f97c}',fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:'\u{1f45a}',fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:'\u{1f455}',fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:'\u{1f456}',fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:'\u{1f454}',fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:'\u{1f457}',fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:'\u{1f459}',fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:'\u{1f458}',fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:'\u{1f484}',fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:'\u{1f48b}',fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:'\u{1f463}',fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:'\u{1f97f}',fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:'\u{1f460}',fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:'\u{1f461}',fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:'\u{1f462}',fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:'\u{1f45e}',fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:'\u{1f45f}',fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:'\u{1f97e}',fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:'\u{1f9e6}',fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:'\u{1f9e4}',fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:'\u{1f9e3}',fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:'\u{1f452}',fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:'\u{1f3a9}',fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:'\u{1f9e2}',fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:'\u26d1',fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:'\u{1f393}',fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:'\u{1f451}',fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:'\u{1f392}',fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:'\u{1f9f3}',fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:'\u{1f45d}',fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:'\u{1f45b}',fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:'\u{1f45c}',fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:'\u{1f4bc}',fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:'\u{1f453}',fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:'\u{1f576}',fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:'\u{1f97d}',fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:'\u{1f48d}',fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:'\u{1f302}',fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:'\u{1f436}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:'\u{1f431}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:'\u{1f42d}',fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:'\u{1f439}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:'\u{1f430}',fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:'\u{1f98a}',fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:'\u{1f43b}',fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:'\u{1f43c}',fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:'\u{1f428}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:'\u{1f42f}',fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:'\u{1f981}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f42e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:'\u{1f437}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:'\u{1f43d}',fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:'\u{1f438}',fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:'\u{1f991}',fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:'\u{1f419}',fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:'\u{1f990}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:'\u{1f435}',fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:'\u{1f98d}',fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:'\u{1f648}',fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:'\u{1f649}',fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:'\u{1f64a}',fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:'\u{1f412}',fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:'\u{1f414}',fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:'\u{1f427}',fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:'\u{1f426}',fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:'\u{1f424}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:'\u{1f423}',fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:'\u{1f425}',fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:'\u{1f986}',fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:'\u{1f985}',fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:'\u{1f989}',fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:'\u{1f987}',fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:'\u{1f43a}',fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:'\u{1f417}',fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:'\u{1f434}',fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:'\u{1f984}',fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:'\u{1f41d}',fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:'\u{1f41b}',fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:'\u{1f98b}',fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:'\u{1f40c}',fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:'\u{1f41e}',fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:'\u{1f41c}',fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:'\u{1f997}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:'\u{1f577}',fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:'\u{1f982}',fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:'\u{1f980}',fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:'\u{1f40d}',fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:'\u{1f98e}',fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:'\u{1f996}',fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:'\u{1f995}',fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:'\u{1f422}',fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:'\u{1f420}',fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:'\u{1f41f}',fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:'\u{1f421}',fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:'\u{1f42c}',fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:'\u{1f988}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:'\u{1f433}',fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:'\u{1f40b}',fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:'\u{1f40a}',fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:'\u{1f406}',fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:'\u{1f993}',fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:'\u{1f405}',fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:'\u{1f403}',fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:'\u{1f402}',fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:'\u{1f404}',fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:'\u{1f98c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:'\u{1f42a}',fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:'\u{1f42b}',fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:'\u{1f992}',fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:'\u{1f418}',fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:'\u{1f98f}',fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:'\u{1f410}',fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:'\u{1f40f}',fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:'\u{1f411}',fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:'\u{1f40e}',fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:'\u{1f416}',fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:'\u{1f400}',fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:'\u{1f401}',fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:'\u{1f413}',fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:'\u{1f983}',fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:'\u{1f54a}',fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:'\u{1f415}',fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:'\u{1f429}',fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:'\u{1f408}',fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:'\u{1f407}',fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:'\u{1f43f}',fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:'\u{1f994}',fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:'\u{1f99d}',fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:'\u{1f999}',fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:'\u{1f99b}',fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:'\u{1f998}',fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:'\u{1f9a1}',fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:'\u{1f9a2}',fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:'\u{1f99a}',fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:'\u{1f99c}',fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:'\u{1f99e}',fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:'\u{1f99f}',fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:'\u{1f43e}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f409}',fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:'\u{1f432}',fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:'\u{1f335}',fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:'\u{1f384}',fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:'\u{1f332}',fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:'\u{1f333}',fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:'\u{1f334}',fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:'\u{1f331}',fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:'\u{1f33f}',fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:'\u2618',fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:'\u{1f340}',fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:'\u{1f38d}',fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:'\u{1f38b}',fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:'\u{1f343}',fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:'\u{1f342}',fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:'\u{1f341}',fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:'\u{1f33e}',fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:'\u{1f33a}',fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:'\u{1f33b}',fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:'\u{1f339}',fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:'\u{1f940}',fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:'\u{1f337}',fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:'\u{1f33c}',fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:'\u{1f338}',fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:'\u{1f490}',fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:'\u{1f344}',fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:'\u{1f330}',fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:'\u{1f383}',fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:'\u{1f41a}',fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:'\u{1f578}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:'\u{1f30e}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:'\u{1f30d}',fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:'\u{1f30f}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:'\u{1f315}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:'\u{1f316}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f317}',fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f318}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f311}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f312}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f313}',fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:'\u{1f314}',fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31a}',fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31d}',fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31b}',fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:'\u{1f31c}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:'\u{1f31e}',fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:'\u{1f319}',fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:'\u2b50',fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:'\u{1f31f}',fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:'\u{1f4ab}',fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:'\u2728',fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:'\u2604',fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:'\u2600\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:'\u{1f324}',fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:'\u26c5',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:'\u{1f325}',fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:'\u{1f326}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:'\u2601\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:'\u{1f327}',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:'\u26c8',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:'\u{1f329}',fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:'\u26a1',fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:'\u{1f525}',fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:'\u{1f4a5}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:'\u2744\ufe0f',fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:'\u{1f328}',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:'\u26c4',fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:'\u2603',fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:'\u{1f32c}',fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:'\u{1f4a8}',fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:'\u{1f32a}',fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:'\u{1f32b}',fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:'\u2602',fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:'\u2614',fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:'\u{1f4a7}',fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:'\u{1f4a6}',fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:'\u{1f30a}',fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:'\u{1f34f}',fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:'\u{1f34e}',fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:'\u{1f350}',fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:'\u{1f34a}',fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:'\u{1f34b}',fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:'\u{1f34c}',fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:'\u{1f349}',fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:'\u{1f347}',fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:'\u{1f353}',fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:'\u{1f348}',fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:'\u{1f352}',fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:'\u{1f351}',fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:'\u{1f34d}',fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:'\u{1f965}',fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:'\u{1f95d}',fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:'\u{1f96d}',fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:'\u{1f951}',fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:'\u{1f966}',fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:'\u{1f345}',fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:'\u{1f346}',fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:'\u{1f952}',fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:'\u{1f955}',fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:'\u{1f336}',fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:'\u{1f954}',fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:'\u{1f33d}',fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:'\u{1f96c}',fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:'\u{1f360}',fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:'\u{1f95c}',fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:'\u{1f36f}',fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:'\u{1f950}',fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:'\u{1f35e}',fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:'\u{1f956}',fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:'\u{1f96f}',fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:'\u{1f968}',fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:'\u{1f9c0}',fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:'\u{1f95a}',fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:'\u{1f953}',fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:'\u{1f969}',fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:'\u{1f95e}',fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:'\u{1f357}',fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:'\u{1f356}',fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:'\u{1f9b4}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:'\u{1f364}',fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:'\u{1f373}',fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:'\u{1f354}',fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:'\u{1f35f}',fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:'\u{1f959}',fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:'\u{1f32d}',fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:'\u{1f355}',fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:'\u{1f96a}',fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:'\u{1f96b}',fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:'\u{1f35d}',fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:'\u{1f32e}',fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:'\u{1f32f}',fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:'\u{1f957}',fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:'\u{1f958}',fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:'\u{1f35c}',fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:'\u{1f372}',fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:'\u{1f365}',fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:'\u{1f960}',fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:'\u{1f363}',fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:'\u{1f371}',fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:'\u{1f35b}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:'\u{1f359}',fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:'\u{1f35a}',fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:'\u{1f358}',fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:'\u{1f362}',fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:'\u{1f361}',fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:'\u{1f367}',fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:'\u{1f368}',fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:'\u{1f366}',fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:'\u{1f967}',fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:'\u{1f370}',fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:'\u{1f9c1}',fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:'\u{1f96e}',fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:'\u{1f382}',fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:'\u{1f36e}',fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:'\u{1f36c}',fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:'\u{1f36d}',fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:'\u{1f36b}',fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:'\u{1f37f}',fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:'\u{1f95f}',fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:'\u{1f369}',fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:'\u{1f36a}',fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:'\u{1f95b}',fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37a}',fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:'\u{1f37b}',fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:'\u{1f942}',fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:'\u{1f377}',fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:'\u{1f943}',fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:'\u{1f378}',fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:'\u{1f379}',fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:'\u{1f37e}',fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:'\u{1f376}',fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:'\u{1f375}',fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:'\u{1f964}',fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:'\u2615',fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:'\u{1f37c}',fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:'\u{1f9c2}',fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:'\u{1f944}',fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:'\u{1f374}',fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:'\u{1f37d}',fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:'\u{1f963}',fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:'\u{1f961}',fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:'\u{1f962}',fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:'\u26bd',fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:'\u{1f3c0}',fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:'\u{1f3c8}',fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:'\u26be',fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:'\u{1f94e}',fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:'\u{1f3be}',fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:'\u{1f3d0}',fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:'\u{1f3c9}',fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:'\u{1f94f}',fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:'\u{1f3b1}',fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:'\u26f3',fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:'\u{1f3cc}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:'\u{1f3cc}',fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:'\u{1f3d3}',fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:'\u{1f3f8}',fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:'\u{1f945}',fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:'\u{1f3d2}',fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:'\u{1f3d1}',fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:'\u{1f94d}',fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:'\u{1f3cf}',fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:'\u{1f3bf}',fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:'\u26f7',fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:'\u{1f3c2}',fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:'\u{1f93a}',fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2640\ufe0f',fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:'\u{1f93c}\u200d\u2642\ufe0f',fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:'\u{1f938}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:'\u{1f93e}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:'\u26f8',fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:'\u{1f94c}',fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:'\u{1f6f9}',fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:'\u{1f6f7}',fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:'\u{1f3f9}',fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:'\u{1f3a3}',fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:'\u{1f94a}',fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:'\u{1f94b}',fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:'\u{1f6a3}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:'\u{1f6a3}',fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:'\u{1f9d7}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:'\u{1f9d7}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:'\u{1f3ca}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:'\u{1f3ca}',fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:'\u{1f93d}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:'\u{1f9d8}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:'\u{1f3c4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:'\u{1f3c4}',fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:'\u{1f6c0}',fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:'\u26f9\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:'\u26f9',fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:'\u{1f3cb}\ufe0f\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:'\u{1f3cb}',fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:'\u{1f6b4}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:'\u{1f6b4}',fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:'\u{1f6b5}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:'\u{1f6b5}',fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:'\u{1f3c7}',fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:'\u{1f574}',fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:'\u{1f3c6}',fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:'\u{1f3bd}',fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:'\u{1f3c5}',fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:'\u{1f396}',fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:'\u{1f947}',fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:'\u{1f948}',fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:'\u{1f949}',fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:'\u{1f397}',fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:'\u{1f3f5}',fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:'\u{1f3ab}',fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:'\u{1f39f}',fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:'\u{1f3ad}',fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:'\u{1f3a8}',fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:'\u{1f3aa}',fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2640\ufe0f',fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:'\u{1f939}\u200d\u2642\ufe0f',fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:'\u{1f3a4}',fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:'\u{1f3a7}',fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:'\u{1f3bc}',fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:'\u{1f3b9}',fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:'\u{1f941}',fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:'\u{1f3b7}',fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:'\u{1f3ba}',fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:'\u{1f3b8}',fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:'\u{1f3bb}',fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:'\u{1f3ac}',fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:'\u{1f3ae}',fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:'\u{1f47e}',fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:'\u{1f3af}',fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:'\u{1f3b2}',fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:'\u{1f3b0}',fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:'\u{1f9e9}',fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:'\u{1f3b3}',fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:'\u{1f697}',fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:'\u{1f695}',fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:'\u{1f699}',fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:'\u{1f68c}',fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:'\u{1f68e}',fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:'\u{1f3ce}',fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:'\u{1f693}',fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:'\u{1f691}',fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:'\u{1f692}',fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:'\u{1f690}',fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:'\u{1f69a}',fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:'\u{1f69b}',fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:'\u{1f69c}',fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:'\u{1f6f4}',fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:'\u{1f3cd}',fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:'\u{1f6b2}',fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:'\u{1f6f5}',fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:'\u{1f6a8}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:'\u{1f694}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:'\u{1f68d}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:'\u{1f698}',fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:'\u{1f696}',fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a1}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:'\u{1f6a0}',fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:'\u{1f69f}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:'\u{1f683}',fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:'\u{1f68b}',fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:'\u{1f69d}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:'\u{1f684}',fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:'\u{1f685}',fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:'\u{1f688}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:'\u{1f69e}',fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:'\u{1f682}',fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:'\u{1f686}',fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:'\u{1f687}',fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:'\u{1f68a}',fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:'\u{1f689}',fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:'\u{1f6f8}',fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:'\u{1f681}',fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:'\u{1f6e9}',fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:'\u2708\ufe0f',fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:'\u{1f6eb}',fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:'\u{1f6ec}',fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:'\u26f5',fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:'\u{1f6e5}',fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:'\u{1f6a4}',fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:'\u26f4',fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:'\u{1f6f3}',fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:'\u{1f680}',fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:'\u{1f6f0}',fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:'\u{1f4ba}',fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:'\u{1f6f6}',fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:'\u2693',fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:'\u{1f6a7}',fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:'\u26fd',fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:'\u{1f68f}',fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:'\u{1f6a6}',fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:'\u{1f6a5}',fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:'\u{1f3c1}',fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:'\u{1f6a2}',fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:'\u{1f3a1}',fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:'\u{1f3a2}',fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:'\u{1f3a0}',fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:'\u{1f3d7}',fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:'\u{1f301}',fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:'\u{1f5fc}',fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:'\u{1f3ed}',fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:'\u26f2',fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:'\u{1f391}',fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:'\u26f0',fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:'\u{1f3d4}',fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:'\u{1f5fb}',fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:'\u{1f30b}',fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:'\u{1f5fe}',fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:'\u{1f3d5}',fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:'\u26fa',fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:'\u{1f3de}',fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:'\u{1f6e3}',fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:'\u{1f6e4}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:'\u{1f305}',fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:'\u{1f304}',fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:'\u{1f3dc}',fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:'\u{1f3d6}',fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:'\u{1f3dd}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:'\u{1f307}',fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:'\u{1f306}',fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:'\u{1f3d9}',fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:'\u{1f303}',fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:'\u{1f309}',fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:'\u{1f30c}',fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:'\u{1f320}',fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:'\u{1f387}',fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:'\u{1f386}',fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:'\u{1f308}',fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:'\u{1f3d8}',fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:'\u{1f3f0}',fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:'\u{1f3ef}',fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:'\u{1f3df}',fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:'\u{1f5fd}',fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:'\u{1f3e0}',fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:'\u{1f3e1}',fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:'\u{1f3da}',fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:'\u{1f3e2}',fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:'\u{1f3ec}',fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:'\u{1f3e3}',fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:'\u{1f3e4}',fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:'\u{1f3e5}',fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:'\u{1f3e6}',fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:'\u{1f3e8}',fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:'\u{1f3ea}',fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:'\u{1f3eb}',fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:'\u{1f3e9}',fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:'\u{1f492}',fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:'\u{1f3db}',fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:'\u26ea',fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:'\u{1f54c}',fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:'\u{1f54d}',fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:'\u{1f54b}',fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:'\u26e9',fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:'\u231a',fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:'\u{1f4f1}',fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:'\u{1f4f2}',fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:'\u{1f4bb}',fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:'\u2328',fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:'\u{1f5a5}',fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:'\u{1f5a8}',fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:'\u{1f5b1}',fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:'\u{1f5b2}',fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:'\u{1f579}',fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:'\u{1f5dc}',fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:'\u{1f4bd}',fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:'\u{1f4be}',fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:'\u{1f4bf}',fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:'\u{1f4c0}',fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:'\u{1f4fc}',fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:'\u{1f4f7}',fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:'\u{1f4f8}',fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:'\u{1f4f9}',fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:'\u{1f3a5}',fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:'\u{1f4fd}',fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:'\u{1f39e}',fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:'\u{1f4de}',fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:'\u260e\ufe0f',fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:'\u{1f4df}',fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:'\u{1f4e0}',fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:'\u{1f4fa}',fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:'\u{1f4fb}',fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:'\u{1f399}',fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:'\u{1f39a}',fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:'\u{1f39b}',fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:'\u{1f9ed}',fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:'\u23f1',fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:'\u23f2',fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:'\u23f0',fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:'\u{1f570}',fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:'\u23f3',fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:'\u231b',fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:'\u{1f4e1}',fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:'\u{1f50b}',fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:'\u{1f50c}',fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:'\u{1f4a1}',fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:'\u{1f526}',fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:'\u{1f56f}',fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:'\u{1f9ef}',fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:'\u{1f5d1}',fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:'\u{1f6e2}',fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:'\u{1f4b8}',fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:'\u{1f4b5}',fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:'\u{1f4b4}',fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:'\u{1f4b6}',fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:'\u{1f4b7}',fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:'\u{1f4b0}',fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:'\u{1f4b3}',fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:'\u{1f48e}',fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:'\u2696',fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:'\u{1f9f0}',fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:'\u{1f527}',fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:'\u{1f528}',fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:'\u2692',fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:'\u{1f6e0}',fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:'\u26cf',fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:'\u{1f529}',fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:'\u2699',fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:'\u{1f9f1}',fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:'\u26d3',fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:'\u{1f9f2}',fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:'\u{1f52b}',fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:'\u{1f4a3}',fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:'\u{1f9e8}',fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:'\u{1f52a}',fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:'\u{1f5e1}',fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:'\u2694',fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:'\u{1f6e1}',fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:'\u{1f6ac}',fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:'\u2620',fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:'\u26b0',fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:'\u26b1',fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:'\u{1f3fa}',fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:'\u{1f52e}',fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:'\u{1f4ff}',fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:'\u{1f9ff}',fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:'\u{1f488}',fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:'\u2697',fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:'\u{1f52d}',fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:'\u{1f52c}',fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:'\u{1f573}',fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:'\u{1f48a}',fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:'\u{1f489}',fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:'\u{1f9ec}',fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:'\u{1f9a0}',fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:'\u{1f9eb}',fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:'\u{1f9ea}',fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:'\u{1f321}',fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:'\u{1f9f9}',fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:'\u{1f9fa}',fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:'\u{1f9fb}',fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:'\u{1f3f7}',fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:'\u{1f516}',fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:'\u{1f6bd}',fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:'\u{1f6bf}',fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:'\u{1f6c1}',fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:'\u{1f9fc}',fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:'\u{1f9fd}',fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:'\u{1f9f4}',fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:'\u{1f511}',fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:'\u{1f5dd}',fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:'\u{1f6cb}',fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:'\u{1f6cc}',fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:'\u{1f6cf}',fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:'\u{1f6aa}',fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:'\u{1f6ce}',fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:'\u{1f9f8}',fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:'\u{1f5bc}',fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:'\u{1f5fa}',fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:'\u26f1',fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:'\u{1f5ff}',fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:'\u{1f6cd}',fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:'\u{1f6d2}',fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:'\u{1f388}',fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:'\u{1f38f}',fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:'\u{1f380}',fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:'\u{1f381}',fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:'\u{1f38a}',fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:'\u{1f389}',fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:'\u{1f38e}',fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:'\u{1f390}',fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:'\u{1f38c}',fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:'\u{1f3ee}',fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:'\u{1f9e7}',fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:'\u2709\ufe0f',fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:'\u{1f4e9}',fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:'\u{1f4e8}',fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:'\u{1f4e7}',fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:'\u{1f48c}',fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:'\u{1f4ee}',fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:'\u{1f4ea}',fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:'\u{1f4eb}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:'\u{1f4ec}',fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:'\u{1f4ed}',fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:'\u{1f4e6}',fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:'\u{1f4ef}',fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:'\u{1f4e5}',fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:'\u{1f4e4}',fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:'\u{1f4dc}',fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:'\u{1f4c3}',fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:'\u{1f4d1}',fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:'\u{1f9fe}',fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:'\u{1f4ca}',fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:'\u{1f4c8}',fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:'\u{1f4c9}',fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:'\u{1f4c4}',fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:'\u{1f4c5}',fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:'\u{1f4c6}',fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:'\u{1f5d3}',fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:'\u{1f4c7}',fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:'\u{1f5c3}',fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:'\u{1f5f3}',fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:'\u{1f5c4}',fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:'\u{1f4cb}',fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:'\u{1f5d2}',fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:'\u{1f4c1}',fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:'\u{1f4c2}',fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:'\u{1f5c2}',fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:'\u{1f5de}',fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:'\u{1f4f0}',fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:'\u{1f4d3}',fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:'\u{1f4d5}',fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:'\u{1f4d7}',fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:'\u{1f4d8}',fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:'\u{1f4d9}',fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:'\u{1f4d4}',fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:'\u{1f4d2}',fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:'\u{1f4da}',fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:'\u{1f4d6}',fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:'\u{1f9f7}',fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:'\u{1f517}',fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:'\u{1f4ce}',fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:'\u{1f587}',fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:'\u2702\ufe0f',fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:'\u{1f4d0}',fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:'\u{1f4cf}',fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:'\u{1f9ee}',fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:'\u{1f4cc}',fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:'\u{1f4cd}',fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:'\u{1f6a9}',fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:'\u{1f3f3}',fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:'\u{1f3f4}',fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:'\u{1f3f3}\ufe0f\u200d\u{1f308}',fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:'\u{1f510}',fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:'\u{1f512}',fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:'\u{1f513}',fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:'\u{1f50f}',fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:'\u{1f58a}',fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:'\u{1f58b}',fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:'\u2712\ufe0f',fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:'\u{1f4dd}',fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:'\u270f\ufe0f',fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:'\u{1f58d}',fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:'\u{1f58c}',fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:'\u{1f50d}',fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:'\u{1f50e}',fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:'\u2764\ufe0f',fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f9e1}',fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49b}',fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49a}',fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f499}',fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f49c}',fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:'\u{1f5a4}',fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:'\u{1f494}',fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:'\u2763',fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:'\u{1f495}',fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:'\u{1f49e}',fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:'\u{1f493}',fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:'\u{1f497}',fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:'\u{1f496}',fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:'\u{1f498}',fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:'\u{1f49d}',fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:'\u{1f49f}',fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:'\u262e',fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:'\u271d',fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:'\u262a',fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u{1f549}',fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:'\u2638',fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:'\u2721',fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:'\u{1f52f}',fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:'\u{1f54e}',fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:'\u262f',fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:'\u2626',fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:'\u{1f6d0}',fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:'\u26ce',fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2648',fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2649',fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264a',fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264b',fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264c',fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u264d',fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u264e',fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:'\u264f',fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2650',fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:'\u2651',fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:'\u2652',fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:'\u2653',fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:'\u{1f194}',fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:'\u269b',fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:'\u{1f233}',fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:'\u{1f239}',fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:'\u2622',fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:'\u2623',fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:'\u{1f4f4}',fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:'\u{1f4f3}',fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:'\u{1f236}',fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:'\u{1f21a}',fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:'\u{1f238}',fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:'\u{1f23a}',fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:'\u{1f237}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:'\u2734\ufe0f',fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:'\u{1f19a}',fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:'\u{1f251}',fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:'\u{1f4ae}',fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:'\u{1f250}',fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:'\u3299\ufe0f',fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:'\u3297\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:'\u{1f234}',fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:'\u{1f235}',fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:'\u{1f232}',fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:'\u{1f170}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:'\u{1f171}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:'\u{1f18e}',fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:'\u{1f191}',fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:'\u{1f17e}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:'\u{1f198}',fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:'\u26d4',fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:'\u{1f4db}',fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:'\u{1f6ab}',fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:'\u274c',fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:'\u2b55',fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:'\u{1f6d1}',fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:'\u{1f4a2}',fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:'\u2668\ufe0f',fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:'\u{1f6b7}',fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:'\u{1f6af}',fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:'\u{1f6b3}',fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:'\u{1f6b1}',fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:'\u{1f51e}',fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:'\u{1f4f5}',fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:'\u2757',fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:'\u2755',fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:'\u2753',fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:'\u2754',fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:'\u203c\ufe0f',fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:'\u2049\ufe0f',fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:'\u{1f505}',fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:'\u{1f506}',fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:'\u{1f531}',fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:'\u269c',fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:'\u303d\ufe0f',fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:'\u26a0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:'\u{1f6b8}',fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:'\u{1f530}',fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:'\u267b\ufe0f',fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:'\u{1f22f}',fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:'\u{1f4b9}',fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:'\u2747\ufe0f',fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:'\u2733\ufe0f',fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:'\u274e',fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:'\u2705',fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:'\u{1f4a0}',fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:'\u{1f300}',fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:'\u27bf',fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:'\u{1f310}',fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:'\u24c2\ufe0f',fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:'\u{1f3e7}',fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:'\u{1f202}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:'\u{1f6c2}',fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:'\u{1f6c3}',fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:'\u{1f6c4}',fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:'\u{1f6c5}',fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:'\u267f',fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:'\u{1f6ad}',fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:'\u{1f6be}',fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:'\u{1f17f}\ufe0f',fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:'\u{1f6b0}',fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:'\u{1f6b9}',fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:'\u{1f6ba}',fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:'\u{1f6bc}',fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:'\u{1f6bb}',fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:'\u{1f6ae}',fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:'\u{1f3a6}',fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:'\u{1f4f6}',fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:'\u{1f201}',fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:'\u{1f196}',fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:'\u{1f197}',fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:'\u{1f199}',fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:'\u{1f192}',fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:'\u{1f195}',fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:'\u{1f193}',fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:'0\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:'1\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:'2\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:'3\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:'4\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:'5\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:'6\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:'7\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:'8\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:'9\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:'\u{1f51f}',fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:'*\u20e3',fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:'\u23cf\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:'\u25b6\ufe0f',fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:'\u23f8',fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:'\u23ed',fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:'\u23f9',fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:'\u23fa',fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:'\u23ef',fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:'\u23ee',fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:'\u23e9',fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:'\u23ea',fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:'\u{1f500}',fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:'\u{1f501}',fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:'\u{1f502}',fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:'\u25c0\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:'\u{1f53c}',fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:'\u{1f53d}',fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:'\u23eb',fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:'\u23ec',fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:'\u27a1\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:'\u2b05\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:'\u2b06\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:'\u2b07\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:'\u2197\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:'\u2198\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:'\u2199\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:'\u2196\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:'\u2195\ufe0f',fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:'\u2194\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:'\u{1f504}',fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:'\u21aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:'\u21a9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:'\u2934\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:'\u2935\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:'#\ufe0f\u20e3',fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:'\u2139\ufe0f',fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:'\u{1f524}',fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:'\u{1f521}',fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:'\u{1f520}',fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:'\u{1f523}',fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:'\u{1f3b5}',fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:'\u{1f3b6}',fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:'\u3030\ufe0f',fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:'\u27b0',fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:'\u2714\ufe0f',fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:'\u{1f503}',fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:'\u2795',fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:'\u2796',fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:'\u2797',fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:'\u2716\ufe0f',fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:'\u267e',fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:'\u{1f4b2}',fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:'\u{1f4b1}',fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:'\xa9\ufe0f',fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:'\xae\ufe0f',fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:'\u2122\ufe0f',fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:'\u{1f51a}',fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:'\u{1f519}',fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:'\u{1f51b}',fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:'\u{1f51d}',fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:'\u{1f51c}',fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:'\u2611\ufe0f',fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:'\u{1f518}',fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:'\u26aa',fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:'\u26ab',fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:'\u{1f534}',fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:'\u{1f535}',fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f538}',fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f539}',fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f536}',fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:'\u{1f537}',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:'\u{1f53a}',fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:'\u25aa\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:'\u25ab\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:'\u2b1b',fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:'\u2b1c',fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:'\u{1f53b}',fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:'\u25fc\ufe0f',fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:'\u25fb\ufe0f',fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:'\u25fe',fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:'\u25fd',fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:'\u{1f532}',fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:'\u{1f533}',fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:'\u{1f508}',fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:'\u{1f509}',fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:'\u{1f50a}',fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:'\u{1f507}',fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:'\u{1f4e3}',fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:'\u{1f4e2}',fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:'\u{1f514}',fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:'\u{1f515}',fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:'\u{1f0cf}',fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:'\u{1f004}',fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:'\u2660\ufe0f',fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:'\u2663\ufe0f',fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:'\u2665\ufe0f',fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:'\u2666\ufe0f',fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:'\u{1f3b4}',fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:'\u{1f4ad}',fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:'\u{1f5ef}',fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:'\u{1f4ac}',fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:'\u{1f5e8}',fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:'\u{1f550}',fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:'\u{1f551}',fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:'\u{1f552}',fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:'\u{1f553}',fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:'\u{1f554}',fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:'\u{1f555}',fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:'\u{1f556}',fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:'\u{1f557}',fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:'\u{1f558}',fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:'\u{1f559}',fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:'\u{1f55a}',fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:'\u{1f55b}',fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:'\u{1f55c}',fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:'\u{1f55d}',fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:'\u{1f55e}',fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:'\u{1f55f}',fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:'\u{1f560}',fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:'\u{1f561}',fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:'\u{1f562}',fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:'\u{1f563}',fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:'\u{1f564}',fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:'\u{1f565}',fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:'\u{1f566}',fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:'\u{1f567}',fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:'\u{1f1e8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:'\u{1f1e9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:'\u{1f1ea}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:'\u{1f1eb}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:'\u{1f1e9}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:'\u{1f1ed}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:'\u{1f1ee}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:'\u{1f1ef}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:'\u{1f1ef}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:'\u{1f1fd}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f6}',fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:'\u{1f1eb}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:'\u{1f1f2}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f5}',fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:'\u{1f1f3}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:'\u{1f1f4}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:'\u{1f1f6}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:'\u{1f1e7}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:'\u{1f1f0}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:'\u{1f1f5}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:'\u{1f1f7}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fd}',fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:'\u{1f1ec}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:'\u{1f1f0}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:'\u{1f1f1}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1e9}',fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:'\u{1f1e8}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:'\u{1f1f8}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ef}',fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f1}',fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f0}',fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f4}',fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f9}',fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f7}',fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1e8}',fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:'\u{1f1f9}\u{1f1fb}',fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ec}',fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:'\u{1f1e6}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:'\u{1f1ec}\u{1f1e7}',fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:'\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}',fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1f8}',fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ee}',fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1fe}',fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:'\u{1f1fa}\u{1f1ff}',fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1fa}',fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1e6}',fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:'\u{1f1fb}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:'\u{1f1fc}\u{1f1eb}',fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:'\u{1f1ea}\u{1f1ed}',fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:'\u{1f1fe}\u{1f1ea}',fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1f2}',fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:'\u{1f1ff}\u{1f1fc}',fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:'\u{1f1fa}\u{1f1f3}',fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:'\u{1f3f4}\u200d\u2620\ufe0f',fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/emoticons/js/emojis.js b/src/assets/tinyMCE/plugins/emoticons/js/emojis.js deleted file mode 100644 index 88455e9a4..000000000 --- a/src/assets/tinyMCE/plugins/emoticons/js/emojis.js +++ /dev/null @@ -1 +0,0 @@ -window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"😀",fitzpatrick_scale:false,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"😬",fitzpatrick_scale:false,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"😁",fitzpatrick_scale:false,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"😂",fitzpatrick_scale:false,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"🤣",fitzpatrick_scale:false,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"🥳",fitzpatrick_scale:false,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"😃",fitzpatrick_scale:false,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"😄",fitzpatrick_scale:false,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"😅",fitzpatrick_scale:false,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"😆",fitzpatrick_scale:false,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"😇",fitzpatrick_scale:false,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"😉",fitzpatrick_scale:false,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"😊",fitzpatrick_scale:false,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"🙂",fitzpatrick_scale:false,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"🙃",fitzpatrick_scale:false,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"☺️",fitzpatrick_scale:false,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"😋",fitzpatrick_scale:false,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"😌",fitzpatrick_scale:false,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"😍",fitzpatrick_scale:false,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"🥰",fitzpatrick_scale:false,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😘",fitzpatrick_scale:false,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"😗",fitzpatrick_scale:false,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"😙",fitzpatrick_scale:false,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"😚",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"😜",fitzpatrick_scale:false,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"🤪",fitzpatrick_scale:false,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"🤨",fitzpatrick_scale:false,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"🧐",fitzpatrick_scale:false,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"😝",fitzpatrick_scale:false,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"😛",fitzpatrick_scale:false,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"🤑",fitzpatrick_scale:false,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"🤓",fitzpatrick_scale:false,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"😎",fitzpatrick_scale:false,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"🤩",fitzpatrick_scale:false,category:"people"},clown_face:{keywords:["face"],char:"🤡",fitzpatrick_scale:false,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"🤠",fitzpatrick_scale:false,category:"people"},hugs:{keywords:["face","smile","hug"],char:"🤗",fitzpatrick_scale:false,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"😏",fitzpatrick_scale:false,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"😶",fitzpatrick_scale:false,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"😐",fitzpatrick_scale:false,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"😑",fitzpatrick_scale:false,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"😒",fitzpatrick_scale:false,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"🙄",fitzpatrick_scale:false,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"🤔",fitzpatrick_scale:false,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"🤥",fitzpatrick_scale:false,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"🤭",fitzpatrick_scale:false,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"🤫",fitzpatrick_scale:false,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"🤬",fitzpatrick_scale:false,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"🤯",fitzpatrick_scale:false,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"😳",fitzpatrick_scale:false,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"😞",fitzpatrick_scale:false,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"😟",fitzpatrick_scale:false,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"😠",fitzpatrick_scale:false,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"😡",fitzpatrick_scale:false,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"😔",fitzpatrick_scale:false,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"😕",fitzpatrick_scale:false,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"🙁",fitzpatrick_scale:false,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"☹",fitzpatrick_scale:false,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"😣",fitzpatrick_scale:false,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"😖",fitzpatrick_scale:false,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"😫",fitzpatrick_scale:false,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"😩",fitzpatrick_scale:false,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"🥺",fitzpatrick_scale:false,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"😤",fitzpatrick_scale:false,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"😮",fitzpatrick_scale:false,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"😱",fitzpatrick_scale:false,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"😨",fitzpatrick_scale:false,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"😰",fitzpatrick_scale:false,category:"people"},hushed:{keywords:["face","woo","shh"],char:"😯",fitzpatrick_scale:false,category:"people"},frowning:{keywords:["face","aw","what"],char:"😦",fitzpatrick_scale:false,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"😧",fitzpatrick_scale:false,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"😢",fitzpatrick_scale:false,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"😥",fitzpatrick_scale:false,category:"people"},drooling_face:{keywords:["face"],char:"🤤",fitzpatrick_scale:false,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"😪",fitzpatrick_scale:false,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"😓",fitzpatrick_scale:false,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"🥵",fitzpatrick_scale:false,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"🥶",fitzpatrick_scale:false,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"😭",fitzpatrick_scale:false,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"😵",fitzpatrick_scale:false,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"😲",fitzpatrick_scale:false,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"🤐",fitzpatrick_scale:false,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"🤢",fitzpatrick_scale:false,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"🤧",fitzpatrick_scale:false,category:"people"},vomiting:{keywords:["face","sick"],char:"🤮",fitzpatrick_scale:false,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"😷",fitzpatrick_scale:false,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"🤒",fitzpatrick_scale:false,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"🤕",fitzpatrick_scale:false,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"🥴",fitzpatrick_scale:false,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"😴",fitzpatrick_scale:false,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"💤",fitzpatrick_scale:false,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"💩",fitzpatrick_scale:false,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"😈",fitzpatrick_scale:false,category:"people"},imp:{keywords:["devil","angry","horns"],char:"👿",fitzpatrick_scale:false,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"👹",fitzpatrick_scale:false,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"👺",fitzpatrick_scale:false,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"💀",fitzpatrick_scale:false,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"👻",fitzpatrick_scale:false,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"👽",fitzpatrick_scale:false,category:"people"},robot:{keywords:["computer","machine","bot"],char:"🤖",fitzpatrick_scale:false,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"😺",fitzpatrick_scale:false,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"😸",fitzpatrick_scale:false,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"😹",fitzpatrick_scale:false,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"😻",fitzpatrick_scale:false,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"😼",fitzpatrick_scale:false,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"😽",fitzpatrick_scale:false,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"🙀",fitzpatrick_scale:false,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"😿",fitzpatrick_scale:false,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"😾",fitzpatrick_scale:false,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"🤲",fitzpatrick_scale:true,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"🙌",fitzpatrick_scale:true,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"👏",fitzpatrick_scale:true,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"👋",fitzpatrick_scale:true,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"🤙",fitzpatrick_scale:true,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"👍",fitzpatrick_scale:true,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"👎",fitzpatrick_scale:true,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"👊",fitzpatrick_scale:true,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"✊",fitzpatrick_scale:true,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"🤛",fitzpatrick_scale:true,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"🤜",fitzpatrick_scale:true,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"✌",fitzpatrick_scale:true,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"👌",fitzpatrick_scale:true,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"✋",fitzpatrick_scale:true,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"🤚",fitzpatrick_scale:true,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"👐",fitzpatrick_scale:true,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"💪",fitzpatrick_scale:true,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"🙏",fitzpatrick_scale:true,category:"people"},foot:{keywords:["kick","stomp"],char:"🦶",fitzpatrick_scale:true,category:"people"},leg:{keywords:["kick","limb"],char:"🦵",fitzpatrick_scale:true,category:"people"},handshake:{keywords:["agreement","shake"],char:"🤝",fitzpatrick_scale:false,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"☝",fitzpatrick_scale:true,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"👆",fitzpatrick_scale:true,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"👇",fitzpatrick_scale:true,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"👈",fitzpatrick_scale:true,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"👉",fitzpatrick_scale:true,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"🖕",fitzpatrick_scale:true,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"🖐",fitzpatrick_scale:true,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"🤟",fitzpatrick_scale:true,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"🤘",fitzpatrick_scale:true,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"🤞",fitzpatrick_scale:true,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"🖖",fitzpatrick_scale:true,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"✍",fitzpatrick_scale:true,category:"people"},selfie:{keywords:["camera","phone"],char:"🤳",fitzpatrick_scale:true,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"💅",fitzpatrick_scale:true,category:"people"},lips:{keywords:["mouth","kiss"],char:"👄",fitzpatrick_scale:false,category:"people"},tooth:{keywords:["teeth","dentist"],char:"🦷",fitzpatrick_scale:false,category:"people"},tongue:{keywords:["mouth","playful"],char:"👅",fitzpatrick_scale:false,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"👂",fitzpatrick_scale:true,category:"people"},nose:{keywords:["smell","sniff"],char:"👃",fitzpatrick_scale:true,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"👁",fitzpatrick_scale:false,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"👀",fitzpatrick_scale:false,category:"people"},brain:{keywords:["smart","intelligent"],char:"🧠",fitzpatrick_scale:false,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"👤",fitzpatrick_scale:false,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"👥",fitzpatrick_scale:false,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"🗣",fitzpatrick_scale:false,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"👶",fitzpatrick_scale:true,category:"people"},child:{keywords:["gender-neutral","young"],char:"🧒",fitzpatrick_scale:true,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"👦",fitzpatrick_scale:true,category:"people"},girl:{keywords:["female","woman","teenager"],char:"👧",fitzpatrick_scale:true,category:"people"},adult:{keywords:["gender-neutral","person"],char:"🧑",fitzpatrick_scale:true,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"👨",fitzpatrick_scale:true,category:"people"},woman:{keywords:["female","girls","lady"],char:"👩",fitzpatrick_scale:true,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"👱‍♀️",fitzpatrick_scale:true,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"👱",fitzpatrick_scale:true,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"🧔",fitzpatrick_scale:true,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"🧓",fitzpatrick_scale:true,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"👴",fitzpatrick_scale:true,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"👵",fitzpatrick_scale:true,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"👲",fitzpatrick_scale:true,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"🧕",fitzpatrick_scale:true,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"👳‍♀️",fitzpatrick_scale:true,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"👳",fitzpatrick_scale:true,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"👮‍♀️",fitzpatrick_scale:true,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"👮",fitzpatrick_scale:true,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"👷‍♀️",fitzpatrick_scale:true,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"👷",fitzpatrick_scale:true,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"💂‍♀️",fitzpatrick_scale:true,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"💂",fitzpatrick_scale:true,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"🕵️‍♀️",fitzpatrick_scale:true,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"🕵",fitzpatrick_scale:true,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"👩‍⚕️",fitzpatrick_scale:true,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"👨‍⚕️",fitzpatrick_scale:true,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"👩‍🌾",fitzpatrick_scale:true,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"👨‍🌾",fitzpatrick_scale:true,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"👩‍🍳",fitzpatrick_scale:true,category:"people"},man_cook:{keywords:["chef","man","human"],char:"👨‍🍳",fitzpatrick_scale:true,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"👩‍🎓",fitzpatrick_scale:true,category:"people"},man_student:{keywords:["graduate","man","human"],char:"👨‍🎓",fitzpatrick_scale:true,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"👩‍🎤",fitzpatrick_scale:true,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"👨‍🎤",fitzpatrick_scale:true,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"👩‍🏫",fitzpatrick_scale:true,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"👨‍🏫",fitzpatrick_scale:true,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"👩‍🏭",fitzpatrick_scale:true,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"👨‍🏭",fitzpatrick_scale:true,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"👩‍💻",fitzpatrick_scale:true,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"👨‍💻",fitzpatrick_scale:true,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"👩‍💼",fitzpatrick_scale:true,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"👨‍💼",fitzpatrick_scale:true,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"👩‍🔧",fitzpatrick_scale:true,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"👨‍🔧",fitzpatrick_scale:true,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"👩‍🔬",fitzpatrick_scale:true,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"👨‍🔬",fitzpatrick_scale:true,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"👩‍🎨",fitzpatrick_scale:true,category:"people"},man_artist:{keywords:["painter","man","human"],char:"👨‍🎨",fitzpatrick_scale:true,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"👩‍🚒",fitzpatrick_scale:true,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"👨‍🚒",fitzpatrick_scale:true,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"👩‍✈️",fitzpatrick_scale:true,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"👨‍✈️",fitzpatrick_scale:true,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"👩‍🚀",fitzpatrick_scale:true,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"👨‍🚀",fitzpatrick_scale:true,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"👩‍⚖️",fitzpatrick_scale:true,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"👨‍⚖️",fitzpatrick_scale:true,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"🦸‍♀️",fitzpatrick_scale:true,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"🦸‍♂️",fitzpatrick_scale:true,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"🦹‍♀️",fitzpatrick_scale:true,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"🦹‍♂️",fitzpatrick_scale:true,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"🤶",fitzpatrick_scale:true,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"🎅",fitzpatrick_scale:true,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"🧙‍♀️",fitzpatrick_scale:true,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"🧙‍♂️",fitzpatrick_scale:true,category:"people"},woman_elf:{keywords:["woman","female"],char:"🧝‍♀️",fitzpatrick_scale:true,category:"people"},man_elf:{keywords:["man","male"],char:"🧝‍♂️",fitzpatrick_scale:true,category:"people"},woman_vampire:{keywords:["woman","female"],char:"🧛‍♀️",fitzpatrick_scale:true,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"🧛‍♂️",fitzpatrick_scale:true,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"🧟‍♀️",fitzpatrick_scale:false,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"🧟‍♂️",fitzpatrick_scale:false,category:"people"},woman_genie:{keywords:["woman","female"],char:"🧞‍♀️",fitzpatrick_scale:false,category:"people"},man_genie:{keywords:["man","male"],char:"🧞‍♂️",fitzpatrick_scale:false,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"🧜‍♀️",fitzpatrick_scale:true,category:"people"},merman:{keywords:["man","male","triton"],char:"🧜‍♂️",fitzpatrick_scale:true,category:"people"},woman_fairy:{keywords:["woman","female"],char:"🧚‍♀️",fitzpatrick_scale:true,category:"people"},man_fairy:{keywords:["man","male"],char:"🧚‍♂️",fitzpatrick_scale:true,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"👼",fitzpatrick_scale:true,category:"people"},pregnant_woman:{keywords:["baby"],char:"🤰",fitzpatrick_scale:true,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"🤱",fitzpatrick_scale:true,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"👸",fitzpatrick_scale:true,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"🤴",fitzpatrick_scale:true,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"👰",fitzpatrick_scale:true,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"🤵",fitzpatrick_scale:true,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"🏃‍♀️",fitzpatrick_scale:true,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"🏃",fitzpatrick_scale:true,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"🚶‍♀️",fitzpatrick_scale:true,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"🚶",fitzpatrick_scale:true,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"💃",fitzpatrick_scale:true,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"🕺",fitzpatrick_scale:true,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"👯",fitzpatrick_scale:false,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"👯‍♂️",fitzpatrick_scale:false,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"👫",fitzpatrick_scale:false,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"👬",fitzpatrick_scale:false,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"👭",fitzpatrick_scale:false,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"🙇‍♀️",fitzpatrick_scale:true,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"🙇",fitzpatrick_scale:true,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"🤦‍♂️",fitzpatrick_scale:true,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"🤦‍♀️",fitzpatrick_scale:true,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"🤷",fitzpatrick_scale:true,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"🤷‍♂️",fitzpatrick_scale:true,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"💁",fitzpatrick_scale:true,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"💁‍♂️",fitzpatrick_scale:true,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"🙅",fitzpatrick_scale:true,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"🙅‍♂️",fitzpatrick_scale:true,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"🙆",fitzpatrick_scale:true,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"🙆‍♂️",fitzpatrick_scale:true,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"🙋",fitzpatrick_scale:true,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"🙋‍♂️",fitzpatrick_scale:true,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"🙎",fitzpatrick_scale:true,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"🙎‍♂️",fitzpatrick_scale:true,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"🙍",fitzpatrick_scale:true,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"🙍‍♂️",fitzpatrick_scale:true,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"💇",fitzpatrick_scale:true,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"💇‍♂️",fitzpatrick_scale:true,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"💆",fitzpatrick_scale:true,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"💆‍♂️",fitzpatrick_scale:true,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"🧖‍♀️",fitzpatrick_scale:true,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"🧖‍♂️",fitzpatrick_scale:true,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"💑",fitzpatrick_scale:false,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👩‍❤️‍👩",fitzpatrick_scale:false,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"👨‍❤️‍👨",fitzpatrick_scale:false,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"💏",fitzpatrick_scale:false,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👩‍❤️‍💋‍👩",fitzpatrick_scale:false,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"👨‍❤️‍💋‍👨",fitzpatrick_scale:false,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"👪",fitzpatrick_scale:false,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"👨‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"👩‍👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"👨‍👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"👩‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"👩‍👧",fitzpatrick_scale:false,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"👩‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"👩‍👧‍👧",fitzpatrick_scale:false,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"👨‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"👨‍👧",fitzpatrick_scale:false,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👦",fitzpatrick_scale:false,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"👨‍👦‍👦",fitzpatrick_scale:false,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"👨‍👧‍👧",fitzpatrick_scale:false,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"🧶",fitzpatrick_scale:false,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"🧵",fitzpatrick_scale:false,category:"people"},coat:{keywords:["jacket"],char:"🧥",fitzpatrick_scale:false,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"🥼",fitzpatrick_scale:false,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"👚",fitzpatrick_scale:false,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"👕",fitzpatrick_scale:false,category:"people"},jeans:{keywords:["fashion","shopping"],char:"👖",fitzpatrick_scale:false,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"👔",fitzpatrick_scale:false,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"👗",fitzpatrick_scale:false,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"👙",fitzpatrick_scale:false,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"👘",fitzpatrick_scale:false,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"💄",fitzpatrick_scale:false,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"💋",fitzpatrick_scale:false,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"👣",fitzpatrick_scale:false,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"🥿",fitzpatrick_scale:false,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"👠",fitzpatrick_scale:false,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"👡",fitzpatrick_scale:false,category:"people"},boot:{keywords:["shoes","fashion"],char:"👢",fitzpatrick_scale:false,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"👞",fitzpatrick_scale:false,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"👟",fitzpatrick_scale:false,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"🥾",fitzpatrick_scale:false,category:"people"},socks:{keywords:["stockings","clothes"],char:"🧦",fitzpatrick_scale:false,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"🧤",fitzpatrick_scale:false,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"🧣",fitzpatrick_scale:false,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"👒",fitzpatrick_scale:false,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"🎩",fitzpatrick_scale:false,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"🧢",fitzpatrick_scale:false,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"⛑",fitzpatrick_scale:false,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"🎓",fitzpatrick_scale:false,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"👑",fitzpatrick_scale:false,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"🎒",fitzpatrick_scale:false,category:"people"},luggage:{keywords:["packing","travel"],char:"🧳",fitzpatrick_scale:false,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"👝",fitzpatrick_scale:false,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"👛",fitzpatrick_scale:false,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"👜",fitzpatrick_scale:false,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"💼",fitzpatrick_scale:false,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"👓",fitzpatrick_scale:false,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"🕶",fitzpatrick_scale:false,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"🥽",fitzpatrick_scale:false,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"💍",fitzpatrick_scale:false,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"🌂",fitzpatrick_scale:false,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"🐶",fitzpatrick_scale:false,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"🐱",fitzpatrick_scale:false,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"🐭",fitzpatrick_scale:false,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"🐹",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"🐰",fitzpatrick_scale:false,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"🦊",fitzpatrick_scale:false,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"🐻",fitzpatrick_scale:false,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"🐼",fitzpatrick_scale:false,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"🐨",fitzpatrick_scale:false,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"🐯",fitzpatrick_scale:false,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"🦁",fitzpatrick_scale:false,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐮",fitzpatrick_scale:false,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"🐷",fitzpatrick_scale:false,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"🐽",fitzpatrick_scale:false,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"🐸",fitzpatrick_scale:false,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"🦑",fitzpatrick_scale:false,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"🐙",fitzpatrick_scale:false,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"🦐",fitzpatrick_scale:false,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"🐵",fitzpatrick_scale:false,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"🦍",fitzpatrick_scale:false,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"🙈",fitzpatrick_scale:false,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"🙉",fitzpatrick_scale:false,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"🙊",fitzpatrick_scale:false,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"🐒",fitzpatrick_scale:false,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"🐔",fitzpatrick_scale:false,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"🐧",fitzpatrick_scale:false,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"🐦",fitzpatrick_scale:false,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"🐤",fitzpatrick_scale:false,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"🐣",fitzpatrick_scale:false,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"🐥",fitzpatrick_scale:false,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"🦆",fitzpatrick_scale:false,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"🦅",fitzpatrick_scale:false,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"🦉",fitzpatrick_scale:false,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"🦇",fitzpatrick_scale:false,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"🐺",fitzpatrick_scale:false,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"🐗",fitzpatrick_scale:false,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"🐴",fitzpatrick_scale:false,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"🦄",fitzpatrick_scale:false,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"🐝",fitzpatrick_scale:false,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"🐛",fitzpatrick_scale:false,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"🦋",fitzpatrick_scale:false,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"🐌",fitzpatrick_scale:false,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"🐞",fitzpatrick_scale:false,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"🐜",fitzpatrick_scale:false,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"🦗",fitzpatrick_scale:false,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"🕷",fitzpatrick_scale:false,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"🦂",fitzpatrick_scale:false,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"🦀",fitzpatrick_scale:false,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"🐍",fitzpatrick_scale:false,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"🦎",fitzpatrick_scale:false,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"🦖",fitzpatrick_scale:false,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"🦕",fitzpatrick_scale:false,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"🐢",fitzpatrick_scale:false,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"🐠",fitzpatrick_scale:false,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"🐟",fitzpatrick_scale:false,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"🐡",fitzpatrick_scale:false,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"🐬",fitzpatrick_scale:false,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"🦈",fitzpatrick_scale:false,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"🐳",fitzpatrick_scale:false,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"🐋",fitzpatrick_scale:false,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"🐊",fitzpatrick_scale:false,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"🐆",fitzpatrick_scale:false,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"🦓",fitzpatrick_scale:false,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"🐅",fitzpatrick_scale:false,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"🐃",fitzpatrick_scale:false,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"🐂",fitzpatrick_scale:false,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"🐄",fitzpatrick_scale:false,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"🦌",fitzpatrick_scale:false,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"🐪",fitzpatrick_scale:false,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"🐫",fitzpatrick_scale:false,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"🦒",fitzpatrick_scale:false,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"🐘",fitzpatrick_scale:false,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"🦏",fitzpatrick_scale:false,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"🐐",fitzpatrick_scale:false,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"🐏",fitzpatrick_scale:false,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"🐑",fitzpatrick_scale:false,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"🐎",fitzpatrick_scale:false,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"🐖",fitzpatrick_scale:false,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"🐀",fitzpatrick_scale:false,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"🐁",fitzpatrick_scale:false,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"🐓",fitzpatrick_scale:false,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"🦃",fitzpatrick_scale:false,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"🕊",fitzpatrick_scale:false,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"🐕",fitzpatrick_scale:false,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"🐩",fitzpatrick_scale:false,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"🐈",fitzpatrick_scale:false,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"🐇",fitzpatrick_scale:false,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"🐿",fitzpatrick_scale:false,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"🦔",fitzpatrick_scale:false,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"🦝",fitzpatrick_scale:false,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"🦙",fitzpatrick_scale:false,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"🦛",fitzpatrick_scale:false,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"🦘",fitzpatrick_scale:false,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"🦡",fitzpatrick_scale:false,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"🦢",fitzpatrick_scale:false,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"🦚",fitzpatrick_scale:false,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"🦜",fitzpatrick_scale:false,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"🦞",fitzpatrick_scale:false,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"🦟",fitzpatrick_scale:false,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"🐾",fitzpatrick_scale:false,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"🐉",fitzpatrick_scale:false,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"🐲",fitzpatrick_scale:false,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"🌵",fitzpatrick_scale:false,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"🎄",fitzpatrick_scale:false,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"🌲",fitzpatrick_scale:false,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"🌳",fitzpatrick_scale:false,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"🌴",fitzpatrick_scale:false,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"🌱",fitzpatrick_scale:false,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"🌿",fitzpatrick_scale:false,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"☘",fitzpatrick_scale:false,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"🍀",fitzpatrick_scale:false,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"🎍",fitzpatrick_scale:false,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"🎋",fitzpatrick_scale:false,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"🍃",fitzpatrick_scale:false,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"🍂",fitzpatrick_scale:false,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"🍁",fitzpatrick_scale:false,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"🌾",fitzpatrick_scale:false,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"🌺",fitzpatrick_scale:false,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"🌻",fitzpatrick_scale:false,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"🌹",fitzpatrick_scale:false,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"🥀",fitzpatrick_scale:false,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"🌷",fitzpatrick_scale:false,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"🌼",fitzpatrick_scale:false,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"🌸",fitzpatrick_scale:false,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"💐",fitzpatrick_scale:false,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"🍄",fitzpatrick_scale:false,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"🌰",fitzpatrick_scale:false,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"🎃",fitzpatrick_scale:false,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"🐚",fitzpatrick_scale:false,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"🕸",fitzpatrick_scale:false,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"🌎",fitzpatrick_scale:false,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"🌍",fitzpatrick_scale:false,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"🌏",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"🌕",fitzpatrick_scale:false,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"🌖",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌗",fitzpatrick_scale:false,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌘",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌑",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌒",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌓",fitzpatrick_scale:false,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"🌔",fitzpatrick_scale:false,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌚",fitzpatrick_scale:false,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌝",fitzpatrick_scale:false,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌛",fitzpatrick_scale:false,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"🌜",fitzpatrick_scale:false,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"🌞",fitzpatrick_scale:false,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"🌙",fitzpatrick_scale:false,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"⭐",fitzpatrick_scale:false,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"🌟",fitzpatrick_scale:false,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"💫",fitzpatrick_scale:false,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"✨",fitzpatrick_scale:false,category:"animals_and_nature"},comet:{keywords:["space"],char:"☄",fitzpatrick_scale:false,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"☀️",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"🌤",fitzpatrick_scale:false,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"⛅",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"🌥",fitzpatrick_scale:false,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"🌦",fitzpatrick_scale:false,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"☁️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"🌧",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"⛈",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"🌩",fitzpatrick_scale:false,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"⚡",fitzpatrick_scale:false,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"🔥",fitzpatrick_scale:false,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"💥",fitzpatrick_scale:false,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"❄️",fitzpatrick_scale:false,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"🌨",fitzpatrick_scale:false,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"⛄",fitzpatrick_scale:false,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"☃",fitzpatrick_scale:false,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"🌬",fitzpatrick_scale:false,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"💨",fitzpatrick_scale:false,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"🌪",fitzpatrick_scale:false,category:"animals_and_nature"},fog:{keywords:["weather"],char:"🌫",fitzpatrick_scale:false,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"☂",fitzpatrick_scale:false,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"☔",fitzpatrick_scale:false,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"💧",fitzpatrick_scale:false,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"💦",fitzpatrick_scale:false,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"🌊",fitzpatrick_scale:false,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"🍏",fitzpatrick_scale:false,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"🍎",fitzpatrick_scale:false,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"🍐",fitzpatrick_scale:false,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"🍊",fitzpatrick_scale:false,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"🍋",fitzpatrick_scale:false,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"🍌",fitzpatrick_scale:false,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"🍉",fitzpatrick_scale:false,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"🍇",fitzpatrick_scale:false,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"🍓",fitzpatrick_scale:false,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"🍈",fitzpatrick_scale:false,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"🍒",fitzpatrick_scale:false,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"🍑",fitzpatrick_scale:false,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"🍍",fitzpatrick_scale:false,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"🥥",fitzpatrick_scale:false,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"🥝",fitzpatrick_scale:false,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"🥭",fitzpatrick_scale:false,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"🥑",fitzpatrick_scale:false,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"🥦",fitzpatrick_scale:false,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"🍅",fitzpatrick_scale:false,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"🍆",fitzpatrick_scale:false,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"🥒",fitzpatrick_scale:false,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"🥕",fitzpatrick_scale:false,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"🌶",fitzpatrick_scale:false,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"🥔",fitzpatrick_scale:false,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"🌽",fitzpatrick_scale:false,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"🥬",fitzpatrick_scale:false,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"🍠",fitzpatrick_scale:false,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"🥜",fitzpatrick_scale:false,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"🍯",fitzpatrick_scale:false,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"🥐",fitzpatrick_scale:false,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"🍞",fitzpatrick_scale:false,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"🥖",fitzpatrick_scale:false,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"🥯",fitzpatrick_scale:false,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"🥨",fitzpatrick_scale:false,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"🧀",fitzpatrick_scale:false,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"🥚",fitzpatrick_scale:false,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"🥓",fitzpatrick_scale:false,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"🥩",fitzpatrick_scale:false,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"🥞",fitzpatrick_scale:false,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"🍗",fitzpatrick_scale:false,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"🍖",fitzpatrick_scale:false,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"🦴",fitzpatrick_scale:false,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"🍤",fitzpatrick_scale:false,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"🍳",fitzpatrick_scale:false,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"🍔",fitzpatrick_scale:false,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"🍟",fitzpatrick_scale:false,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"🥙",fitzpatrick_scale:false,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"🌭",fitzpatrick_scale:false,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"🍕",fitzpatrick_scale:false,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"🥪",fitzpatrick_scale:false,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"🥫",fitzpatrick_scale:false,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"🍝",fitzpatrick_scale:false,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"🌮",fitzpatrick_scale:false,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"🌯",fitzpatrick_scale:false,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"🥗",fitzpatrick_scale:false,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"🥘",fitzpatrick_scale:false,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"🍜",fitzpatrick_scale:false,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"🍲",fitzpatrick_scale:false,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"🍥",fitzpatrick_scale:false,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"🥠",fitzpatrick_scale:false,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"🍣",fitzpatrick_scale:false,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"🍱",fitzpatrick_scale:false,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"🍛",fitzpatrick_scale:false,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"🍙",fitzpatrick_scale:false,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"🍚",fitzpatrick_scale:false,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"🍘",fitzpatrick_scale:false,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"🍢",fitzpatrick_scale:false,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"🍡",fitzpatrick_scale:false,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"🍧",fitzpatrick_scale:false,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"🍨",fitzpatrick_scale:false,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"🍦",fitzpatrick_scale:false,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"🥧",fitzpatrick_scale:false,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"🍰",fitzpatrick_scale:false,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"🧁",fitzpatrick_scale:false,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"🥮",fitzpatrick_scale:false,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"🎂",fitzpatrick_scale:false,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"🍮",fitzpatrick_scale:false,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"🍬",fitzpatrick_scale:false,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"🍭",fitzpatrick_scale:false,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"🍫",fitzpatrick_scale:false,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"🍿",fitzpatrick_scale:false,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"🥟",fitzpatrick_scale:false,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"🍩",fitzpatrick_scale:false,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"🍪",fitzpatrick_scale:false,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"🥛",fitzpatrick_scale:false,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍺",fitzpatrick_scale:false,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"🍻",fitzpatrick_scale:false,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"🥂",fitzpatrick_scale:false,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"🍷",fitzpatrick_scale:false,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"🥃",fitzpatrick_scale:false,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"🍸",fitzpatrick_scale:false,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"🍹",fitzpatrick_scale:false,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"🍾",fitzpatrick_scale:false,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"🍶",fitzpatrick_scale:false,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"🍵",fitzpatrick_scale:false,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"🥤",fitzpatrick_scale:false,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"☕",fitzpatrick_scale:false,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"🍼",fitzpatrick_scale:false,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"🧂",fitzpatrick_scale:false,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"🥄",fitzpatrick_scale:false,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"🍴",fitzpatrick_scale:false,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"🍽",fitzpatrick_scale:false,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"🥣",fitzpatrick_scale:false,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"🥡",fitzpatrick_scale:false,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"🥢",fitzpatrick_scale:false,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"⚽",fitzpatrick_scale:false,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"🏀",fitzpatrick_scale:false,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"🏈",fitzpatrick_scale:false,category:"activity"},baseball:{keywords:["sports","balls"],char:"⚾",fitzpatrick_scale:false,category:"activity"},softball:{keywords:["sports","balls"],char:"🥎",fitzpatrick_scale:false,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"🎾",fitzpatrick_scale:false,category:"activity"},volleyball:{keywords:["sports","balls"],char:"🏐",fitzpatrick_scale:false,category:"activity"},rugby_football:{keywords:["sports","team"],char:"🏉",fitzpatrick_scale:false,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"🥏",fitzpatrick_scale:false,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"🎱",fitzpatrick_scale:false,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"⛳",fitzpatrick_scale:false,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"🏌️‍♀️",fitzpatrick_scale:false,category:"activity"},golfing_man:{keywords:["sports","business"],char:"🏌",fitzpatrick_scale:true,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"🏓",fitzpatrick_scale:false,category:"activity"},badminton:{keywords:["sports"],char:"🏸",fitzpatrick_scale:false,category:"activity"},goal_net:{keywords:["sports"],char:"🥅",fitzpatrick_scale:false,category:"activity"},ice_hockey:{keywords:["sports"],char:"🏒",fitzpatrick_scale:false,category:"activity"},field_hockey:{keywords:["sports"],char:"🏑",fitzpatrick_scale:false,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"🥍",fitzpatrick_scale:false,category:"activity"},cricket:{keywords:["sports"],char:"🏏",fitzpatrick_scale:false,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"🎿",fitzpatrick_scale:false,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"⛷",fitzpatrick_scale:false,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"🏂",fitzpatrick_scale:true,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"🤺",fitzpatrick_scale:false,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♀️",fitzpatrick_scale:false,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"🤼‍♂️",fitzpatrick_scale:false,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♀️",fitzpatrick_scale:true,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"🤸‍♂️",fitzpatrick_scale:true,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"🤾‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_handball:{keywords:["sports"],char:"🤾‍♂️",fitzpatrick_scale:true,category:"activity"},ice_skate:{keywords:["sports"],char:"⛸",fitzpatrick_scale:false,category:"activity"},curling_stone:{keywords:["sports"],char:"🥌",fitzpatrick_scale:false,category:"activity"},skateboard:{keywords:["board"],char:"🛹",fitzpatrick_scale:false,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"🛷",fitzpatrick_scale:false,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"🏹",fitzpatrick_scale:false,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"🎣",fitzpatrick_scale:false,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"🥊",fitzpatrick_scale:false,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"🥋",fitzpatrick_scale:false,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"🚣‍♀️",fitzpatrick_scale:true,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"🚣",fitzpatrick_scale:true,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"🧗‍♀️",fitzpatrick_scale:true,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"🧗‍♂️",fitzpatrick_scale:true,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"🏊‍♀️",fitzpatrick_scale:true,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"🏊",fitzpatrick_scale:true,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♀️",fitzpatrick_scale:true,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"🤽‍♂️",fitzpatrick_scale:true,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♀️",fitzpatrick_scale:true,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"🧘‍♂️",fitzpatrick_scale:true,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"🏄‍♀️",fitzpatrick_scale:true,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"🏄",fitzpatrick_scale:true,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"🛀",fitzpatrick_scale:true,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"⛹️‍♀️",fitzpatrick_scale:true,category:"activity"},basketball_man:{keywords:["sports","human"],char:"⛹",fitzpatrick_scale:true,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"🏋️‍♀️",fitzpatrick_scale:true,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"🏋",fitzpatrick_scale:true,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"🚴‍♀️",fitzpatrick_scale:true,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"🚴",fitzpatrick_scale:true,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"🚵‍♀️",fitzpatrick_scale:true,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"🚵",fitzpatrick_scale:true,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"🏇",fitzpatrick_scale:true,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"🕴",fitzpatrick_scale:true,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"🏆",fitzpatrick_scale:false,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"🎽",fitzpatrick_scale:false,category:"activity"},medal_sports:{keywords:["award","winning"],char:"🏅",fitzpatrick_scale:false,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"🎖",fitzpatrick_scale:false,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"🥇",fitzpatrick_scale:false,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"🥈",fitzpatrick_scale:false,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"🥉",fitzpatrick_scale:false,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"🎗",fitzpatrick_scale:false,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"🏵",fitzpatrick_scale:false,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"🎫",fitzpatrick_scale:false,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"🎟",fitzpatrick_scale:false,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"🎭",fitzpatrick_scale:false,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"🎨",fitzpatrick_scale:false,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"🎪",fitzpatrick_scale:false,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♀️",fitzpatrick_scale:true,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"🤹‍♂️",fitzpatrick_scale:true,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"🎤",fitzpatrick_scale:false,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"🎧",fitzpatrick_scale:false,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"🎼",fitzpatrick_scale:false,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"🎹",fitzpatrick_scale:false,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"🥁",fitzpatrick_scale:false,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"🎷",fitzpatrick_scale:false,category:"activity"},trumpet:{keywords:["music","brass"],char:"🎺",fitzpatrick_scale:false,category:"activity"},guitar:{keywords:["music","instrument"],char:"🎸",fitzpatrick_scale:false,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"🎻",fitzpatrick_scale:false,category:"activity"},clapper:{keywords:["movie","film","record"],char:"🎬",fitzpatrick_scale:false,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"🎮",fitzpatrick_scale:false,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"👾",fitzpatrick_scale:false,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"🎯",fitzpatrick_scale:false,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"🎲",fitzpatrick_scale:false,category:"activity"},chess_pawn:{keywords:["expendable"],char:"♟",fitzpatrick_scale:false,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"🎰",fitzpatrick_scale:false,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"🧩",fitzpatrick_scale:false,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"🎳",fitzpatrick_scale:false,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"🚗",fitzpatrick_scale:false,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"🚕",fitzpatrick_scale:false,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"🚙",fitzpatrick_scale:false,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"🚌",fitzpatrick_scale:false,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"🚎",fitzpatrick_scale:false,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"🏎",fitzpatrick_scale:false,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"🚓",fitzpatrick_scale:false,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"🚑",fitzpatrick_scale:false,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"🚒",fitzpatrick_scale:false,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"🚐",fitzpatrick_scale:false,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"🚚",fitzpatrick_scale:false,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"🚛",fitzpatrick_scale:false,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"🚜",fitzpatrick_scale:false,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"🛴",fitzpatrick_scale:false,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"🏍",fitzpatrick_scale:false,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"🚲",fitzpatrick_scale:false,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"🛵",fitzpatrick_scale:false,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"🚨",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"🚔",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"🚍",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"🚘",fitzpatrick_scale:false,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"🚖",fitzpatrick_scale:false,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"🚡",fitzpatrick_scale:false,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"🚠",fitzpatrick_scale:false,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"🚟",fitzpatrick_scale:false,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"🚃",fitzpatrick_scale:false,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"🚋",fitzpatrick_scale:false,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"🚝",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"🚄",fitzpatrick_scale:false,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"🚅",fitzpatrick_scale:false,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"🚈",fitzpatrick_scale:false,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"🚞",fitzpatrick_scale:false,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"🚂",fitzpatrick_scale:false,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"🚆",fitzpatrick_scale:false,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"🚇",fitzpatrick_scale:false,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"🚊",fitzpatrick_scale:false,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"🚉",fitzpatrick_scale:false,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"🛸",fitzpatrick_scale:false,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"🚁",fitzpatrick_scale:false,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"🛩",fitzpatrick_scale:false,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"✈️",fitzpatrick_scale:false,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"🛫",fitzpatrick_scale:false,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"🛬",fitzpatrick_scale:false,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"⛵",fitzpatrick_scale:false,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"🛥",fitzpatrick_scale:false,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"🚤",fitzpatrick_scale:false,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"⛴",fitzpatrick_scale:false,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"🛳",fitzpatrick_scale:false,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"🚀",fitzpatrick_scale:false,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"🛰",fitzpatrick_scale:false,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"💺",fitzpatrick_scale:false,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"🛶",fitzpatrick_scale:false,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"⚓",fitzpatrick_scale:false,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"🚧",fitzpatrick_scale:false,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"⛽",fitzpatrick_scale:false,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"🚏",fitzpatrick_scale:false,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"🚦",fitzpatrick_scale:false,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"🚥",fitzpatrick_scale:false,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"🏁",fitzpatrick_scale:false,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"🚢",fitzpatrick_scale:false,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"🎡",fitzpatrick_scale:false,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"🎢",fitzpatrick_scale:false,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"🎠",fitzpatrick_scale:false,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"🏗",fitzpatrick_scale:false,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"🌁",fitzpatrick_scale:false,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"🗼",fitzpatrick_scale:false,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"🏭",fitzpatrick_scale:false,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"⛲",fitzpatrick_scale:false,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"🎑",fitzpatrick_scale:false,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"⛰",fitzpatrick_scale:false,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"🏔",fitzpatrick_scale:false,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"🗻",fitzpatrick_scale:false,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"🌋",fitzpatrick_scale:false,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"🗾",fitzpatrick_scale:false,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"🏕",fitzpatrick_scale:false,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"⛺",fitzpatrick_scale:false,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"🏞",fitzpatrick_scale:false,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"🛣",fitzpatrick_scale:false,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"🛤",fitzpatrick_scale:false,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"🌅",fitzpatrick_scale:false,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"🌄",fitzpatrick_scale:false,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"🏜",fitzpatrick_scale:false,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"🏖",fitzpatrick_scale:false,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"🏝",fitzpatrick_scale:false,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"🌇",fitzpatrick_scale:false,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"🌆",fitzpatrick_scale:false,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"🏙",fitzpatrick_scale:false,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"🌃",fitzpatrick_scale:false,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"🌉",fitzpatrick_scale:false,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"🌌",fitzpatrick_scale:false,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"🌠",fitzpatrick_scale:false,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"🎇",fitzpatrick_scale:false,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"🎆",fitzpatrick_scale:false,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"🌈",fitzpatrick_scale:false,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"🏘",fitzpatrick_scale:false,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"🏰",fitzpatrick_scale:false,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"🏯",fitzpatrick_scale:false,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"🏟",fitzpatrick_scale:false,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"🗽",fitzpatrick_scale:false,category:"travel_and_places"},house:{keywords:["building","home"],char:"🏠",fitzpatrick_scale:false,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"🏡",fitzpatrick_scale:false,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"🏚",fitzpatrick_scale:false,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"🏢",fitzpatrick_scale:false,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"🏬",fitzpatrick_scale:false,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"🏣",fitzpatrick_scale:false,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"🏤",fitzpatrick_scale:false,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"🏥",fitzpatrick_scale:false,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"🏦",fitzpatrick_scale:false,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"🏨",fitzpatrick_scale:false,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"🏪",fitzpatrick_scale:false,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"🏫",fitzpatrick_scale:false,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"🏩",fitzpatrick_scale:false,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"💒",fitzpatrick_scale:false,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"🏛",fitzpatrick_scale:false,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"⛪",fitzpatrick_scale:false,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"🕌",fitzpatrick_scale:false,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"🕍",fitzpatrick_scale:false,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"🕋",fitzpatrick_scale:false,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"⛩",fitzpatrick_scale:false,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"⌚",fitzpatrick_scale:false,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"📱",fitzpatrick_scale:false,category:"objects"},calling:{keywords:["iphone","incoming"],char:"📲",fitzpatrick_scale:false,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"💻",fitzpatrick_scale:false,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"⌨",fitzpatrick_scale:false,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"🖥",fitzpatrick_scale:false,category:"objects"},printer:{keywords:["paper","ink"],char:"🖨",fitzpatrick_scale:false,category:"objects"},computer_mouse:{keywords:["click"],char:"🖱",fitzpatrick_scale:false,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"🖲",fitzpatrick_scale:false,category:"objects"},joystick:{keywords:["game","play"],char:"🕹",fitzpatrick_scale:false,category:"objects"},clamp:{keywords:["tool"],char:"🗜",fitzpatrick_scale:false,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"💽",fitzpatrick_scale:false,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"💾",fitzpatrick_scale:false,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"💿",fitzpatrick_scale:false,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"📀",fitzpatrick_scale:false,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"📼",fitzpatrick_scale:false,category:"objects"},camera:{keywords:["gadgets","photography"],char:"📷",fitzpatrick_scale:false,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"📸",fitzpatrick_scale:false,category:"objects"},video_camera:{keywords:["film","record"],char:"📹",fitzpatrick_scale:false,category:"objects"},movie_camera:{keywords:["film","record"],char:"🎥",fitzpatrick_scale:false,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"📽",fitzpatrick_scale:false,category:"objects"},film_strip:{keywords:["movie"],char:"🎞",fitzpatrick_scale:false,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"📞",fitzpatrick_scale:false,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"☎️",fitzpatrick_scale:false,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"📟",fitzpatrick_scale:false,category:"objects"},fax:{keywords:["communication","technology"],char:"📠",fitzpatrick_scale:false,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"📺",fitzpatrick_scale:false,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"📻",fitzpatrick_scale:false,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"🎙",fitzpatrick_scale:false,category:"objects"},level_slider:{keywords:["scale"],char:"🎚",fitzpatrick_scale:false,category:"objects"},control_knobs:{keywords:["dial"],char:"🎛",fitzpatrick_scale:false,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"🧭",fitzpatrick_scale:false,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"⏱",fitzpatrick_scale:false,category:"objects"},timer_clock:{keywords:["alarm"],char:"⏲",fitzpatrick_scale:false,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"⏰",fitzpatrick_scale:false,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"🕰",fitzpatrick_scale:false,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"⏳",fitzpatrick_scale:false,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"⌛",fitzpatrick_scale:false,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"📡",fitzpatrick_scale:false,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"🔋",fitzpatrick_scale:false,category:"objects"},electric_plug:{keywords:["charger","power"],char:"🔌",fitzpatrick_scale:false,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"💡",fitzpatrick_scale:false,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"🔦",fitzpatrick_scale:false,category:"objects"},candle:{keywords:["fire","wax"],char:"🕯",fitzpatrick_scale:false,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"🧯",fitzpatrick_scale:false,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"🗑",fitzpatrick_scale:false,category:"objects"},oil_drum:{keywords:["barrell"],char:"🛢",fitzpatrick_scale:false,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"💸",fitzpatrick_scale:false,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"💵",fitzpatrick_scale:false,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"💴",fitzpatrick_scale:false,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"💶",fitzpatrick_scale:false,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"💷",fitzpatrick_scale:false,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"💰",fitzpatrick_scale:false,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"💳",fitzpatrick_scale:false,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"💎",fitzpatrick_scale:false,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"⚖",fitzpatrick_scale:false,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"🧰",fitzpatrick_scale:false,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"🔧",fitzpatrick_scale:false,category:"objects"},hammer:{keywords:["tools","build","create"],char:"🔨",fitzpatrick_scale:false,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"⚒",fitzpatrick_scale:false,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"🛠",fitzpatrick_scale:false,category:"objects"},pick:{keywords:["tools","dig"],char:"⛏",fitzpatrick_scale:false,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"🔩",fitzpatrick_scale:false,category:"objects"},gear:{keywords:["cog"],char:"⚙",fitzpatrick_scale:false,category:"objects"},brick:{keywords:["bricks"],char:"🧱",fitzpatrick_scale:false,category:"objects"},chains:{keywords:["lock","arrest"],char:"⛓",fitzpatrick_scale:false,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"🧲",fitzpatrick_scale:false,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"🔫",fitzpatrick_scale:false,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"💣",fitzpatrick_scale:false,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"🧨",fitzpatrick_scale:false,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"🔪",fitzpatrick_scale:false,category:"objects"},dagger:{keywords:["weapon"],char:"🗡",fitzpatrick_scale:false,category:"objects"},crossed_swords:{keywords:["weapon"],char:"⚔",fitzpatrick_scale:false,category:"objects"},shield:{keywords:["protection","security"],char:"🛡",fitzpatrick_scale:false,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"🚬",fitzpatrick_scale:false,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"☠",fitzpatrick_scale:false,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"⚰",fitzpatrick_scale:false,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"⚱",fitzpatrick_scale:false,category:"objects"},amphora:{keywords:["vase","jar"],char:"🏺",fitzpatrick_scale:false,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"🔮",fitzpatrick_scale:false,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"📿",fitzpatrick_scale:false,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"🧿",fitzpatrick_scale:false,category:"objects"},barber:{keywords:["hair","salon","style"],char:"💈",fitzpatrick_scale:false,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"⚗",fitzpatrick_scale:false,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"🔭",fitzpatrick_scale:false,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"🔬",fitzpatrick_scale:false,category:"objects"},hole:{keywords:["embarrassing"],char:"🕳",fitzpatrick_scale:false,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"💊",fitzpatrick_scale:false,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"💉",fitzpatrick_scale:false,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"🧬",fitzpatrick_scale:false,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"🦠",fitzpatrick_scale:false,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"🧫",fitzpatrick_scale:false,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"🧪",fitzpatrick_scale:false,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"🌡",fitzpatrick_scale:false,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"🧹",fitzpatrick_scale:false,category:"objects"},basket:{keywords:["laundry"],char:"🧺",fitzpatrick_scale:false,category:"objects"},toilet_paper:{keywords:["roll"],char:"🧻",fitzpatrick_scale:false,category:"objects"},label:{keywords:["sale","tag"],char:"🏷",fitzpatrick_scale:false,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"🔖",fitzpatrick_scale:false,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"🚽",fitzpatrick_scale:false,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"🚿",fitzpatrick_scale:false,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"🛁",fitzpatrick_scale:false,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"🧼",fitzpatrick_scale:false,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"🧽",fitzpatrick_scale:false,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"🧴",fitzpatrick_scale:false,category:"objects"},key:{keywords:["lock","door","password"],char:"🔑",fitzpatrick_scale:false,category:"objects"},old_key:{keywords:["lock","door","password"],char:"🗝",fitzpatrick_scale:false,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"🛋",fitzpatrick_scale:false,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"🛌",fitzpatrick_scale:true,category:"objects"},bed:{keywords:["sleep","rest"],char:"🛏",fitzpatrick_scale:false,category:"objects"},door:{keywords:["house","entry","exit"],char:"🚪",fitzpatrick_scale:false,category:"objects"},bellhop_bell:{keywords:["service"],char:"🛎",fitzpatrick_scale:false,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"🧸",fitzpatrick_scale:false,category:"objects"},framed_picture:{keywords:["photography"],char:"🖼",fitzpatrick_scale:false,category:"objects"},world_map:{keywords:["location","direction"],char:"🗺",fitzpatrick_scale:false,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"⛱",fitzpatrick_scale:false,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"🗿",fitzpatrick_scale:false,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"🛍",fitzpatrick_scale:false,category:"objects"},shopping_cart:{keywords:["trolley"],char:"🛒",fitzpatrick_scale:false,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"🎈",fitzpatrick_scale:false,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"🎏",fitzpatrick_scale:false,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"🎀",fitzpatrick_scale:false,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"🎁",fitzpatrick_scale:false,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"🎊",fitzpatrick_scale:false,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"🎉",fitzpatrick_scale:false,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"🎎",fitzpatrick_scale:false,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"🎐",fitzpatrick_scale:false,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"🎌",fitzpatrick_scale:false,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"🏮",fitzpatrick_scale:false,category:"objects"},red_envelope:{keywords:["gift"],char:"🧧",fitzpatrick_scale:false,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"✉️",fitzpatrick_scale:false,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"📩",fitzpatrick_scale:false,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"📨",fitzpatrick_scale:false,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"📧",fitzpatrick_scale:false,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"💌",fitzpatrick_scale:false,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"📮",fitzpatrick_scale:false,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"📪",fitzpatrick_scale:false,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"📫",fitzpatrick_scale:false,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"📬",fitzpatrick_scale:false,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"📭",fitzpatrick_scale:false,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"📦",fitzpatrick_scale:false,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"📯",fitzpatrick_scale:false,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"📥",fitzpatrick_scale:false,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"📤",fitzpatrick_scale:false,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"📜",fitzpatrick_scale:false,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"📃",fitzpatrick_scale:false,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"📑",fitzpatrick_scale:false,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"🧾",fitzpatrick_scale:false,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"📊",fitzpatrick_scale:false,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"📈",fitzpatrick_scale:false,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"📉",fitzpatrick_scale:false,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"📄",fitzpatrick_scale:false,category:"objects"},date:{keywords:["calendar","schedule"],char:"📅",fitzpatrick_scale:false,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"📆",fitzpatrick_scale:false,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"🗓",fitzpatrick_scale:false,category:"objects"},card_index:{keywords:["business","stationery"],char:"📇",fitzpatrick_scale:false,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"🗃",fitzpatrick_scale:false,category:"objects"},ballot_box:{keywords:["election","vote"],char:"🗳",fitzpatrick_scale:false,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"🗄",fitzpatrick_scale:false,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"📋",fitzpatrick_scale:false,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"🗒",fitzpatrick_scale:false,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"📁",fitzpatrick_scale:false,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"📂",fitzpatrick_scale:false,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"🗂",fitzpatrick_scale:false,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"🗞",fitzpatrick_scale:false,category:"objects"},newspaper:{keywords:["press","headline"],char:"📰",fitzpatrick_scale:false,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"📓",fitzpatrick_scale:false,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"📕",fitzpatrick_scale:false,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"📗",fitzpatrick_scale:false,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"📘",fitzpatrick_scale:false,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"📙",fitzpatrick_scale:false,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"📔",fitzpatrick_scale:false,category:"objects"},ledger:{keywords:["notes","paper"],char:"📒",fitzpatrick_scale:false,category:"objects"},books:{keywords:["literature","library","study"],char:"📚",fitzpatrick_scale:false,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"📖",fitzpatrick_scale:false,category:"objects"},safety_pin:{keywords:["diaper"],char:"🧷",fitzpatrick_scale:false,category:"objects"},link:{keywords:["rings","url"],char:"🔗",fitzpatrick_scale:false,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"📎",fitzpatrick_scale:false,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"🖇",fitzpatrick_scale:false,category:"objects"},scissors:{keywords:["stationery","cut"],char:"✂️",fitzpatrick_scale:false,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"📐",fitzpatrick_scale:false,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"📏",fitzpatrick_scale:false,category:"objects"},abacus:{keywords:["calculation"],char:"🧮",fitzpatrick_scale:false,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"📌",fitzpatrick_scale:false,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"📍",fitzpatrick_scale:false,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"🚩",fitzpatrick_scale:false,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"🏳",fitzpatrick_scale:false,category:"objects"},black_flag:{keywords:["pirate"],char:"🏴",fitzpatrick_scale:false,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"🏳️‍🌈",fitzpatrick_scale:false,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"🔐",fitzpatrick_scale:false,category:"objects"},lock:{keywords:["security","password","padlock"],char:"🔒",fitzpatrick_scale:false,category:"objects"},unlock:{keywords:["privacy","security"],char:"🔓",fitzpatrick_scale:false,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"🔏",fitzpatrick_scale:false,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"🖊",fitzpatrick_scale:false,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"🖋",fitzpatrick_scale:false,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"✒️",fitzpatrick_scale:false,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"📝",fitzpatrick_scale:false,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"✏️",fitzpatrick_scale:false,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"🖍",fitzpatrick_scale:false,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"🖌",fitzpatrick_scale:false,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"🔍",fitzpatrick_scale:false,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"🔎",fitzpatrick_scale:false,category:"objects"},heart:{keywords:["love","like","valentines"],char:"❤️",fitzpatrick_scale:false,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"🧡",fitzpatrick_scale:false,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"💛",fitzpatrick_scale:false,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"💚",fitzpatrick_scale:false,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"💙",fitzpatrick_scale:false,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"💜",fitzpatrick_scale:false,category:"symbols"},black_heart:{keywords:["evil"],char:"🖤",fitzpatrick_scale:false,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"💔",fitzpatrick_scale:false,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"❣",fitzpatrick_scale:false,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"💕",fitzpatrick_scale:false,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"💞",fitzpatrick_scale:false,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"💓",fitzpatrick_scale:false,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"💗",fitzpatrick_scale:false,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"💖",fitzpatrick_scale:false,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"💘",fitzpatrick_scale:false,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"💝",fitzpatrick_scale:false,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"💟",fitzpatrick_scale:false,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"☮",fitzpatrick_scale:false,category:"symbols"},latin_cross:{keywords:["christianity"],char:"✝",fitzpatrick_scale:false,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"☪",fitzpatrick_scale:false,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"🕉",fitzpatrick_scale:false,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"☸",fitzpatrick_scale:false,category:"symbols"},star_of_david:{keywords:["judaism"],char:"✡",fitzpatrick_scale:false,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"🔯",fitzpatrick_scale:false,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"🕎",fitzpatrick_scale:false,category:"symbols"},yin_yang:{keywords:["balance"],char:"☯",fitzpatrick_scale:false,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"☦",fitzpatrick_scale:false,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"🛐",fitzpatrick_scale:false,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"⛎",fitzpatrick_scale:false,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"♈",fitzpatrick_scale:false,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"♉",fitzpatrick_scale:false,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"♊",fitzpatrick_scale:false,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"♋",fitzpatrick_scale:false,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"♌",fitzpatrick_scale:false,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"♍",fitzpatrick_scale:false,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"♎",fitzpatrick_scale:false,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"♏",fitzpatrick_scale:false,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"♐",fitzpatrick_scale:false,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"♑",fitzpatrick_scale:false,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"♒",fitzpatrick_scale:false,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"♓",fitzpatrick_scale:false,category:"symbols"},id:{keywords:["purple-square","words"],char:"🆔",fitzpatrick_scale:false,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"⚛",fitzpatrick_scale:false,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"🈳",fitzpatrick_scale:false,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"🈹",fitzpatrick_scale:false,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"☢",fitzpatrick_scale:false,category:"symbols"},biohazard:{keywords:["danger"],char:"☣",fitzpatrick_scale:false,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"📴",fitzpatrick_scale:false,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"📳",fitzpatrick_scale:false,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"🈶",fitzpatrick_scale:false,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"🈚",fitzpatrick_scale:false,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"🈸",fitzpatrick_scale:false,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"🈺",fitzpatrick_scale:false,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"🈷️",fitzpatrick_scale:false,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"✴️",fitzpatrick_scale:false,category:"symbols"},vs:{keywords:["words","orange-square"],char:"🆚",fitzpatrick_scale:false,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"🉑",fitzpatrick_scale:false,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"💮",fitzpatrick_scale:false,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"🉐",fitzpatrick_scale:false,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"㊙️",fitzpatrick_scale:false,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"㊗️",fitzpatrick_scale:false,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"🈴",fitzpatrick_scale:false,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"🈵",fitzpatrick_scale:false,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"🈲",fitzpatrick_scale:false,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"🅰️",fitzpatrick_scale:false,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"🅱️",fitzpatrick_scale:false,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"🆎",fitzpatrick_scale:false,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"🆑",fitzpatrick_scale:false,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"🅾️",fitzpatrick_scale:false,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"🆘",fitzpatrick_scale:false,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"⛔",fitzpatrick_scale:false,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"📛",fitzpatrick_scale:false,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"🚫",fitzpatrick_scale:false,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"❌",fitzpatrick_scale:false,category:"symbols"},o:{keywords:["circle","round"],char:"⭕",fitzpatrick_scale:false,category:"symbols"},stop_sign:{keywords:["stop"],char:"🛑",fitzpatrick_scale:false,category:"symbols"},anger:{keywords:["angry","mad"],char:"💢",fitzpatrick_scale:false,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"♨️",fitzpatrick_scale:false,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"🚷",fitzpatrick_scale:false,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"🚯",fitzpatrick_scale:false,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"🚳",fitzpatrick_scale:false,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"🚱",fitzpatrick_scale:false,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"🔞",fitzpatrick_scale:false,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"📵",fitzpatrick_scale:false,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"❗",fitzpatrick_scale:false,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"❕",fitzpatrick_scale:false,category:"symbols"},question:{keywords:["doubt","confused"],char:"❓",fitzpatrick_scale:false,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"❔",fitzpatrick_scale:false,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"‼️",fitzpatrick_scale:false,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"⁉️",fitzpatrick_scale:false,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"💯",fitzpatrick_scale:false,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"🔅",fitzpatrick_scale:false,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"🔆",fitzpatrick_scale:false,category:"symbols"},trident:{keywords:["weapon","spear"],char:"🔱",fitzpatrick_scale:false,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"⚜",fitzpatrick_scale:false,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"〽️",fitzpatrick_scale:false,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"⚠️",fitzpatrick_scale:false,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"🚸",fitzpatrick_scale:false,category:"symbols"},beginner:{keywords:["badge","shield"],char:"🔰",fitzpatrick_scale:false,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"♻️",fitzpatrick_scale:false,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"🈯",fitzpatrick_scale:false,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"💹",fitzpatrick_scale:false,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"❇️",fitzpatrick_scale:false,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"✳️",fitzpatrick_scale:false,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"❎",fitzpatrick_scale:false,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"✅",fitzpatrick_scale:false,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"💠",fitzpatrick_scale:false,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"🌀",fitzpatrick_scale:false,category:"symbols"},loop:{keywords:["tape","cassette"],char:"➿",fitzpatrick_scale:false,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"🌐",fitzpatrick_scale:false,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"Ⓜ️",fitzpatrick_scale:false,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"🏧",fitzpatrick_scale:false,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"🈂️",fitzpatrick_scale:false,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"🛂",fitzpatrick_scale:false,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"🛃",fitzpatrick_scale:false,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"🛄",fitzpatrick_scale:false,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"🛅",fitzpatrick_scale:false,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"♿",fitzpatrick_scale:false,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"🚭",fitzpatrick_scale:false,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"🚾",fitzpatrick_scale:false,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"🅿️",fitzpatrick_scale:false,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"🚰",fitzpatrick_scale:false,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"🚹",fitzpatrick_scale:false,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"🚺",fitzpatrick_scale:false,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"🚼",fitzpatrick_scale:false,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"🚻",fitzpatrick_scale:false,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"🚮",fitzpatrick_scale:false,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"🎦",fitzpatrick_scale:false,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"📶",fitzpatrick_scale:false,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"🈁",fitzpatrick_scale:false,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"🆖",fitzpatrick_scale:false,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"🆗",fitzpatrick_scale:false,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"🆙",fitzpatrick_scale:false,category:"symbols"},cool:{keywords:["words","blue-square"],char:"🆒",fitzpatrick_scale:false,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"🆕",fitzpatrick_scale:false,category:"symbols"},free:{keywords:["blue-square","words"],char:"🆓",fitzpatrick_scale:false,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0️⃣",fitzpatrick_scale:false,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1️⃣",fitzpatrick_scale:false,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2️⃣",fitzpatrick_scale:false,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3️⃣",fitzpatrick_scale:false,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4️⃣",fitzpatrick_scale:false,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5️⃣",fitzpatrick_scale:false,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6️⃣",fitzpatrick_scale:false,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7️⃣",fitzpatrick_scale:false,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8️⃣",fitzpatrick_scale:false,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9️⃣",fitzpatrick_scale:false,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"🔟",fitzpatrick_scale:false,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*⃣",fitzpatrick_scale:false,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"🔢",fitzpatrick_scale:false,category:"symbols"},eject_button:{keywords:["blue-square"],char:"⏏️",fitzpatrick_scale:false,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"▶️",fitzpatrick_scale:false,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"⏸",fitzpatrick_scale:false,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"⏭",fitzpatrick_scale:false,category:"symbols"},stop_button:{keywords:["blue-square"],char:"⏹",fitzpatrick_scale:false,category:"symbols"},record_button:{keywords:["blue-square"],char:"⏺",fitzpatrick_scale:false,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"⏯",fitzpatrick_scale:false,category:"symbols"},previous_track_button:{keywords:["backward"],char:"⏮",fitzpatrick_scale:false,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"⏩",fitzpatrick_scale:false,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"⏪",fitzpatrick_scale:false,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"🔀",fitzpatrick_scale:false,category:"symbols"},repeat:{keywords:["loop","record"],char:"🔁",fitzpatrick_scale:false,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"🔂",fitzpatrick_scale:false,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"◀️",fitzpatrick_scale:false,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"🔼",fitzpatrick_scale:false,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"🔽",fitzpatrick_scale:false,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"⏫",fitzpatrick_scale:false,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"⏬",fitzpatrick_scale:false,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"➡️",fitzpatrick_scale:false,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"⬅️",fitzpatrick_scale:false,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"⬆️",fitzpatrick_scale:false,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"⬇️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"↗️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"↘️",fitzpatrick_scale:false,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"↙️",fitzpatrick_scale:false,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"↖️",fitzpatrick_scale:false,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"↕️",fitzpatrick_scale:false,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"↔️",fitzpatrick_scale:false,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"🔄",fitzpatrick_scale:false,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"↪️",fitzpatrick_scale:false,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"↩️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"⤴️",fitzpatrick_scale:false,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"⤵️",fitzpatrick_scale:false,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#️⃣",fitzpatrick_scale:false,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"ℹ️",fitzpatrick_scale:false,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"🔤",fitzpatrick_scale:false,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"🔡",fitzpatrick_scale:false,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"🔠",fitzpatrick_scale:false,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"🔣",fitzpatrick_scale:false,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"🎵",fitzpatrick_scale:false,category:"symbols"},notes:{keywords:["music","score"],char:"🎶",fitzpatrick_scale:false,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"〰️",fitzpatrick_scale:false,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"➰",fitzpatrick_scale:false,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"✔️",fitzpatrick_scale:false,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"🔃",fitzpatrick_scale:false,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"➕",fitzpatrick_scale:false,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"➖",fitzpatrick_scale:false,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"➗",fitzpatrick_scale:false,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"✖️",fitzpatrick_scale:false,category:"symbols"},infinity:{keywords:["forever"],char:"♾",fitzpatrick_scale:false,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"💲",fitzpatrick_scale:false,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"💱",fitzpatrick_scale:false,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"©️",fitzpatrick_scale:false,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"®️",fitzpatrick_scale:false,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"™️",fitzpatrick_scale:false,category:"symbols"},end:{keywords:["words","arrow"],char:"🔚",fitzpatrick_scale:false,category:"symbols"},back:{keywords:["arrow","words","return"],char:"🔙",fitzpatrick_scale:false,category:"symbols"},on:{keywords:["arrow","words"],char:"🔛",fitzpatrick_scale:false,category:"symbols"},top:{keywords:["words","blue-square"],char:"🔝",fitzpatrick_scale:false,category:"symbols"},soon:{keywords:["arrow","words"],char:"🔜",fitzpatrick_scale:false,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"☑️",fitzpatrick_scale:false,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"🔘",fitzpatrick_scale:false,category:"symbols"},white_circle:{keywords:["shape","round"],char:"⚪",fitzpatrick_scale:false,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"⚫",fitzpatrick_scale:false,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"🔴",fitzpatrick_scale:false,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"🔵",fitzpatrick_scale:false,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔸",fitzpatrick_scale:false,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔹",fitzpatrick_scale:false,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"🔶",fitzpatrick_scale:false,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"🔷",fitzpatrick_scale:false,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"🔺",fitzpatrick_scale:false,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"▪️",fitzpatrick_scale:false,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"▫️",fitzpatrick_scale:false,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"⬛",fitzpatrick_scale:false,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"⬜",fitzpatrick_scale:false,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"🔻",fitzpatrick_scale:false,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"◼️",fitzpatrick_scale:false,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"◻️",fitzpatrick_scale:false,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"◾",fitzpatrick_scale:false,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"◽",fitzpatrick_scale:false,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"🔲",fitzpatrick_scale:false,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"🔳",fitzpatrick_scale:false,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"🔈",fitzpatrick_scale:false,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"🔉",fitzpatrick_scale:false,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"🔊",fitzpatrick_scale:false,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"🔇",fitzpatrick_scale:false,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"📣",fitzpatrick_scale:false,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"📢",fitzpatrick_scale:false,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"🔔",fitzpatrick_scale:false,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"🔕",fitzpatrick_scale:false,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"🃏",fitzpatrick_scale:false,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"🀄",fitzpatrick_scale:false,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"♠️",fitzpatrick_scale:false,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"♣️",fitzpatrick_scale:false,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"♥️",fitzpatrick_scale:false,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"♦️",fitzpatrick_scale:false,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"🎴",fitzpatrick_scale:false,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"💭",fitzpatrick_scale:false,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"🗯",fitzpatrick_scale:false,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"💬",fitzpatrick_scale:false,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"🗨",fitzpatrick_scale:false,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"🕐",fitzpatrick_scale:false,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"🕑",fitzpatrick_scale:false,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"🕒",fitzpatrick_scale:false,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"🕓",fitzpatrick_scale:false,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"🕔",fitzpatrick_scale:false,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"🕕",fitzpatrick_scale:false,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"🕖",fitzpatrick_scale:false,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"🕗",fitzpatrick_scale:false,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"🕘",fitzpatrick_scale:false,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"🕙",fitzpatrick_scale:false,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"🕚",fitzpatrick_scale:false,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"🕛",fitzpatrick_scale:false,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"🕜",fitzpatrick_scale:false,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"🕝",fitzpatrick_scale:false,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"🕞",fitzpatrick_scale:false,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"🕟",fitzpatrick_scale:false,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"🕠",fitzpatrick_scale:false,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"🕡",fitzpatrick_scale:false,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"🕢",fitzpatrick_scale:false,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"🕣",fitzpatrick_scale:false,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"🕤",fitzpatrick_scale:false,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"🕥",fitzpatrick_scale:false,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"🕦",fitzpatrick_scale:false,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"🕧",fitzpatrick_scale:false,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"🇦🇫",fitzpatrick_scale:false,category:"flags"},aland_islands:{keywords:["Åland","islands","flag","nation","country","banner"],char:"🇦🇽",fitzpatrick_scale:false,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"🇦🇱",fitzpatrick_scale:false,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"🇩🇿",fitzpatrick_scale:false,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"🇦🇸",fitzpatrick_scale:false,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"🇦🇩",fitzpatrick_scale:false,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"🇦🇴",fitzpatrick_scale:false,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"🇦🇮",fitzpatrick_scale:false,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"🇦🇶",fitzpatrick_scale:false,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"🇦🇬",fitzpatrick_scale:false,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"🇦🇷",fitzpatrick_scale:false,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"🇦🇲",fitzpatrick_scale:false,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"🇦🇼",fitzpatrick_scale:false,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"🇦🇺",fitzpatrick_scale:false,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"🇦🇹",fitzpatrick_scale:false,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"🇦🇿",fitzpatrick_scale:false,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"🇧🇸",fitzpatrick_scale:false,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"🇧🇭",fitzpatrick_scale:false,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"🇧🇩",fitzpatrick_scale:false,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"🇧🇧",fitzpatrick_scale:false,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"🇧🇾",fitzpatrick_scale:false,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"🇧🇪",fitzpatrick_scale:false,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"🇧🇿",fitzpatrick_scale:false,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"🇧🇯",fitzpatrick_scale:false,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"🇧🇲",fitzpatrick_scale:false,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"🇧🇹",fitzpatrick_scale:false,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"🇧🇴",fitzpatrick_scale:false,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"🇧🇶",fitzpatrick_scale:false,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"🇧🇦",fitzpatrick_scale:false,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"🇧🇼",fitzpatrick_scale:false,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"🇧🇷",fitzpatrick_scale:false,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"🇮🇴",fitzpatrick_scale:false,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"🇻🇬",fitzpatrick_scale:false,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"🇧🇳",fitzpatrick_scale:false,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"🇧🇬",fitzpatrick_scale:false,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"🇧🇫",fitzpatrick_scale:false,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"🇧🇮",fitzpatrick_scale:false,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"🇨🇻",fitzpatrick_scale:false,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"🇰🇭",fitzpatrick_scale:false,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"🇨🇲",fitzpatrick_scale:false,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"🇨🇦",fitzpatrick_scale:false,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"🇮🇨",fitzpatrick_scale:false,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"🇰🇾",fitzpatrick_scale:false,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"🇨🇫",fitzpatrick_scale:false,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"🇹🇩",fitzpatrick_scale:false,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"🇨🇱",fitzpatrick_scale:false,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"🇨🇳",fitzpatrick_scale:false,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"🇨🇽",fitzpatrick_scale:false,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"🇨🇨",fitzpatrick_scale:false,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"🇨🇴",fitzpatrick_scale:false,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"🇰🇲",fitzpatrick_scale:false,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"🇨🇬",fitzpatrick_scale:false,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"🇨🇩",fitzpatrick_scale:false,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"🇨🇰",fitzpatrick_scale:false,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"🇨🇷",fitzpatrick_scale:false,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"🇭🇷",fitzpatrick_scale:false,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"🇨🇺",fitzpatrick_scale:false,category:"flags"},curacao:{keywords:["curaçao","flag","nation","country","banner"],char:"🇨🇼",fitzpatrick_scale:false,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"🇨🇾",fitzpatrick_scale:false,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"🇨🇿",fitzpatrick_scale:false,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"🇩🇰",fitzpatrick_scale:false,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"🇩🇯",fitzpatrick_scale:false,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"🇩🇲",fitzpatrick_scale:false,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"🇩🇴",fitzpatrick_scale:false,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"🇪🇨",fitzpatrick_scale:false,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"🇪🇬",fitzpatrick_scale:false,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"🇸🇻",fitzpatrick_scale:false,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"🇬🇶",fitzpatrick_scale:false,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"🇪🇷",fitzpatrick_scale:false,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"🇪🇪",fitzpatrick_scale:false,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"🇪🇹",fitzpatrick_scale:false,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"🇪🇺",fitzpatrick_scale:false,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"🇫🇰",fitzpatrick_scale:false,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"🇫🇴",fitzpatrick_scale:false,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"🇫🇯",fitzpatrick_scale:false,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"🇫🇮",fitzpatrick_scale:false,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"🇫🇷",fitzpatrick_scale:false,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"🇬🇫",fitzpatrick_scale:false,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"🇵🇫",fitzpatrick_scale:false,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"🇹🇫",fitzpatrick_scale:false,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"🇬🇦",fitzpatrick_scale:false,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"🇬🇲",fitzpatrick_scale:false,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"🇬🇪",fitzpatrick_scale:false,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"🇩🇪",fitzpatrick_scale:false,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"🇬🇭",fitzpatrick_scale:false,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"🇬🇮",fitzpatrick_scale:false,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"🇬🇷",fitzpatrick_scale:false,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"🇬🇱",fitzpatrick_scale:false,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"🇬🇩",fitzpatrick_scale:false,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"🇬🇵",fitzpatrick_scale:false,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"🇬🇺",fitzpatrick_scale:false,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"🇬🇹",fitzpatrick_scale:false,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"🇬🇬",fitzpatrick_scale:false,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"🇬🇳",fitzpatrick_scale:false,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"🇬🇼",fitzpatrick_scale:false,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"🇬🇾",fitzpatrick_scale:false,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"🇭🇹",fitzpatrick_scale:false,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"🇭🇳",fitzpatrick_scale:false,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"🇭🇰",fitzpatrick_scale:false,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"🇭🇺",fitzpatrick_scale:false,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"🇮🇸",fitzpatrick_scale:false,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"🇮🇳",fitzpatrick_scale:false,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"🇮🇩",fitzpatrick_scale:false,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"🇮🇷",fitzpatrick_scale:false,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"🇮🇶",fitzpatrick_scale:false,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"🇮🇪",fitzpatrick_scale:false,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"🇮🇲",fitzpatrick_scale:false,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"🇮🇱",fitzpatrick_scale:false,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"🇮🇹",fitzpatrick_scale:false,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"🇨🇮",fitzpatrick_scale:false,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"🇯🇲",fitzpatrick_scale:false,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"🇯🇵",fitzpatrick_scale:false,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"🇯🇪",fitzpatrick_scale:false,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"🇯🇴",fitzpatrick_scale:false,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"🇰🇿",fitzpatrick_scale:false,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"🇰🇪",fitzpatrick_scale:false,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"🇰🇮",fitzpatrick_scale:false,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"🇽🇰",fitzpatrick_scale:false,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"🇰🇼",fitzpatrick_scale:false,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"🇰🇬",fitzpatrick_scale:false,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"🇱🇦",fitzpatrick_scale:false,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"🇱🇻",fitzpatrick_scale:false,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"🇱🇧",fitzpatrick_scale:false,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"🇱🇸",fitzpatrick_scale:false,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"🇱🇷",fitzpatrick_scale:false,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"🇱🇾",fitzpatrick_scale:false,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"🇱🇮",fitzpatrick_scale:false,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"🇱🇹",fitzpatrick_scale:false,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"🇱🇺",fitzpatrick_scale:false,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"🇲🇴",fitzpatrick_scale:false,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"🇲🇰",fitzpatrick_scale:false,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"🇲🇬",fitzpatrick_scale:false,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"🇲🇼",fitzpatrick_scale:false,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"🇲🇾",fitzpatrick_scale:false,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"🇲🇻",fitzpatrick_scale:false,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"🇲🇱",fitzpatrick_scale:false,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"🇲🇹",fitzpatrick_scale:false,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"🇲🇭",fitzpatrick_scale:false,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"🇲🇶",fitzpatrick_scale:false,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"🇲🇷",fitzpatrick_scale:false,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"🇲🇺",fitzpatrick_scale:false,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"🇾🇹",fitzpatrick_scale:false,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"🇲🇽",fitzpatrick_scale:false,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"🇫🇲",fitzpatrick_scale:false,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"🇲🇩",fitzpatrick_scale:false,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"🇲🇨",fitzpatrick_scale:false,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"🇲🇳",fitzpatrick_scale:false,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"🇲🇪",fitzpatrick_scale:false,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"🇲🇸",fitzpatrick_scale:false,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"🇲🇦",fitzpatrick_scale:false,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"🇲🇿",fitzpatrick_scale:false,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"🇲🇲",fitzpatrick_scale:false,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"🇳🇦",fitzpatrick_scale:false,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"🇳🇷",fitzpatrick_scale:false,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"🇳🇵",fitzpatrick_scale:false,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"🇳🇱",fitzpatrick_scale:false,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"🇳🇨",fitzpatrick_scale:false,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"🇳🇿",fitzpatrick_scale:false,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"🇳🇮",fitzpatrick_scale:false,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"🇳🇪",fitzpatrick_scale:false,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"🇳🇬",fitzpatrick_scale:false,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"🇳🇺",fitzpatrick_scale:false,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"🇳🇫",fitzpatrick_scale:false,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"🇲🇵",fitzpatrick_scale:false,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"🇰🇵",fitzpatrick_scale:false,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"🇳🇴",fitzpatrick_scale:false,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"🇴🇲",fitzpatrick_scale:false,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"🇵🇰",fitzpatrick_scale:false,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"🇵🇼",fitzpatrick_scale:false,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"🇵🇸",fitzpatrick_scale:false,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"🇵🇦",fitzpatrick_scale:false,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"🇵🇬",fitzpatrick_scale:false,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"🇵🇾",fitzpatrick_scale:false,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"🇵🇪",fitzpatrick_scale:false,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"🇵🇭",fitzpatrick_scale:false,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"🇵🇳",fitzpatrick_scale:false,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"🇵🇱",fitzpatrick_scale:false,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"🇵🇹",fitzpatrick_scale:false,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"🇵🇷",fitzpatrick_scale:false,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"🇶🇦",fitzpatrick_scale:false,category:"flags"},reunion:{keywords:["réunion","flag","nation","country","banner"],char:"🇷🇪",fitzpatrick_scale:false,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"🇷🇴",fitzpatrick_scale:false,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"🇷🇺",fitzpatrick_scale:false,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"🇷🇼",fitzpatrick_scale:false,category:"flags"},st_barthelemy:{keywords:["saint","barthélemy","flag","nation","country","banner"],char:"🇧🇱",fitzpatrick_scale:false,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"🇸🇭",fitzpatrick_scale:false,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"🇰🇳",fitzpatrick_scale:false,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"🇱🇨",fitzpatrick_scale:false,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"🇵🇲",fitzpatrick_scale:false,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"🇻🇨",fitzpatrick_scale:false,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"🇼🇸",fitzpatrick_scale:false,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"🇸🇲",fitzpatrick_scale:false,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"🇸🇹",fitzpatrick_scale:false,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"🇸🇦",fitzpatrick_scale:false,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"🇸🇳",fitzpatrick_scale:false,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"🇷🇸",fitzpatrick_scale:false,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"🇸🇨",fitzpatrick_scale:false,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"🇸🇱",fitzpatrick_scale:false,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"🇸🇬",fitzpatrick_scale:false,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"🇸🇽",fitzpatrick_scale:false,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"🇸🇰",fitzpatrick_scale:false,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"🇸🇮",fitzpatrick_scale:false,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"🇸🇧",fitzpatrick_scale:false,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"🇸🇴",fitzpatrick_scale:false,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"🇿🇦",fitzpatrick_scale:false,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"🇬🇸",fitzpatrick_scale:false,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"🇰🇷",fitzpatrick_scale:false,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"🇸🇸",fitzpatrick_scale:false,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"🇪🇸",fitzpatrick_scale:false,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"🇱🇰",fitzpatrick_scale:false,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"🇸🇩",fitzpatrick_scale:false,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"🇸🇷",fitzpatrick_scale:false,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"🇸🇿",fitzpatrick_scale:false,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"🇸🇪",fitzpatrick_scale:false,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"🇨🇭",fitzpatrick_scale:false,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"🇸🇾",fitzpatrick_scale:false,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"🇹🇼",fitzpatrick_scale:false,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"🇹🇯",fitzpatrick_scale:false,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"🇹🇿",fitzpatrick_scale:false,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"🇹🇭",fitzpatrick_scale:false,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"🇹🇱",fitzpatrick_scale:false,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"🇹🇬",fitzpatrick_scale:false,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"🇹🇰",fitzpatrick_scale:false,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"🇹🇴",fitzpatrick_scale:false,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"🇹🇹",fitzpatrick_scale:false,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"🇹🇳",fitzpatrick_scale:false,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"🇹🇷",fitzpatrick_scale:false,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"🇹🇲",fitzpatrick_scale:false,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"🇹🇨",fitzpatrick_scale:false,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"🇹🇻",fitzpatrick_scale:false,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"🇺🇬",fitzpatrick_scale:false,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"🇺🇦",fitzpatrick_scale:false,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"🇦🇪",fitzpatrick_scale:false,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"🇬🇧",fitzpatrick_scale:false,category:"flags"},england:{keywords:["flag","english"],char:"🏴󠁧󠁢󠁥󠁮󠁧󠁿",fitzpatrick_scale:false,category:"flags"},scotland:{keywords:["flag","scottish"],char:"🏴󠁧󠁢󠁳󠁣󠁴󠁿",fitzpatrick_scale:false,category:"flags"},wales:{keywords:["flag","welsh"],char:"🏴󠁧󠁢󠁷󠁬󠁳󠁿",fitzpatrick_scale:false,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"🇺🇸",fitzpatrick_scale:false,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"🇻🇮",fitzpatrick_scale:false,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"🇺🇾",fitzpatrick_scale:false,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"🇺🇿",fitzpatrick_scale:false,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"🇻🇺",fitzpatrick_scale:false,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"🇻🇦",fitzpatrick_scale:false,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"🇻🇪",fitzpatrick_scale:false,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"🇻🇳",fitzpatrick_scale:false,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"🇼🇫",fitzpatrick_scale:false,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"🇪🇭",fitzpatrick_scale:false,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"🇾🇪",fitzpatrick_scale:false,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"🇿🇲",fitzpatrick_scale:false,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"🇿🇼",fitzpatrick_scale:false,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"🇺🇳",fitzpatrick_scale:false,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"🏴‍☠️",fitzpatrick_scale:false,category:"flags"}}); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/emoticons/js/emojis.min.js b/src/assets/tinyMCE/plugins/emoticons/js/emojis.min.js deleted file mode 100644 index 5a1c49160..000000000 --- a/src/assets/tinyMCE/plugins/emoticons/js/emojis.min.js +++ /dev/null @@ -1,2 +0,0 @@ -// Source: npm package: emojilib, file:emojis.json -window.tinymce.Resource.add("tinymce.plugins.emoticons",{grinning:{keywords:["face","smile","happy","joy",":D","grin"],char:"\u{1f600}",fitzpatrick_scale:!1,category:"people"},grimacing:{keywords:["face","grimace","teeth"],char:"\u{1f62c}",fitzpatrick_scale:!1,category:"people"},grin:{keywords:["face","happy","smile","joy","kawaii"],char:"\u{1f601}",fitzpatrick_scale:!1,category:"people"},joy:{keywords:["face","cry","tears","weep","happy","happytears","haha"],char:"\u{1f602}",fitzpatrick_scale:!1,category:"people"},rofl:{keywords:["face","rolling","floor","laughing","lol","haha"],char:"\u{1f923}",fitzpatrick_scale:!1,category:"people"},partying:{keywords:["face","celebration","woohoo"],char:"\u{1f973}",fitzpatrick_scale:!1,category:"people"},smiley:{keywords:["face","happy","joy","haha",":D",":)","smile","funny"],char:"\u{1f603}",fitzpatrick_scale:!1,category:"people"},smile:{keywords:["face","happy","joy","funny","haha","laugh","like",":D",":)"],char:"\u{1f604}",fitzpatrick_scale:!1,category:"people"},sweat_smile:{keywords:["face","hot","happy","laugh","sweat","smile","relief"],char:"\u{1f605}",fitzpatrick_scale:!1,category:"people"},laughing:{keywords:["happy","joy","lol","satisfied","haha","face","glad","XD","laugh"],char:"\u{1f606}",fitzpatrick_scale:!1,category:"people"},innocent:{keywords:["face","angel","heaven","halo"],char:"\u{1f607}",fitzpatrick_scale:!1,category:"people"},wink:{keywords:["face","happy","mischievous","secret",";)","smile","eye"],char:"\u{1f609}",fitzpatrick_scale:!1,category:"people"},blush:{keywords:["face","smile","happy","flushed","crush","embarrassed","shy","joy"],char:"\u{1f60a}",fitzpatrick_scale:!1,category:"people"},slightly_smiling_face:{keywords:["face","smile"],char:"\u{1f642}",fitzpatrick_scale:!1,category:"people"},upside_down_face:{keywords:["face","flipped","silly","smile"],char:"\u{1f643}",fitzpatrick_scale:!1,category:"people"},relaxed:{keywords:["face","blush","massage","happiness"],char:"\u263a\ufe0f",fitzpatrick_scale:!1,category:"people"},yum:{keywords:["happy","joy","tongue","smile","face","silly","yummy","nom","delicious","savouring"],char:"\u{1f60b}",fitzpatrick_scale:!1,category:"people"},relieved:{keywords:["face","relaxed","phew","massage","happiness"],char:"\u{1f60c}",fitzpatrick_scale:!1,category:"people"},heart_eyes:{keywords:["face","love","like","affection","valentines","infatuation","crush","heart"],char:"\u{1f60d}",fitzpatrick_scale:!1,category:"people"},smiling_face_with_three_hearts:{keywords:["face","love","like","affection","valentines","infatuation","crush","hearts","adore"],char:"\u{1f970}",fitzpatrick_scale:!1,category:"people"},kissing_heart:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f618}",fitzpatrick_scale:!1,category:"people"},kissing:{keywords:["love","like","face","3","valentines","infatuation","kiss"],char:"\u{1f617}",fitzpatrick_scale:!1,category:"people"},kissing_smiling_eyes:{keywords:["face","affection","valentines","infatuation","kiss"],char:"\u{1f619}",fitzpatrick_scale:!1,category:"people"},kissing_closed_eyes:{keywords:["face","love","like","affection","valentines","infatuation","kiss"],char:"\u{1f61a}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_winking_eye:{keywords:["face","prank","childish","playful","mischievous","smile","wink","tongue"],char:"\u{1f61c}",fitzpatrick_scale:!1,category:"people"},zany:{keywords:["face","goofy","crazy"],char:"\u{1f92a}",fitzpatrick_scale:!1,category:"people"},raised_eyebrow:{keywords:["face","distrust","scepticism","disapproval","disbelief","surprise"],char:"\u{1f928}",fitzpatrick_scale:!1,category:"people"},monocle:{keywords:["face","stuffy","wealthy"],char:"\u{1f9d0}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue_closed_eyes:{keywords:["face","prank","playful","mischievous","smile","tongue"],char:"\u{1f61d}",fitzpatrick_scale:!1,category:"people"},stuck_out_tongue:{keywords:["face","prank","childish","playful","mischievous","smile","tongue"],char:"\u{1f61b}",fitzpatrick_scale:!1,category:"people"},money_mouth_face:{keywords:["face","rich","dollar","money"],char:"\u{1f911}",fitzpatrick_scale:!1,category:"people"},nerd_face:{keywords:["face","nerdy","geek","dork"],char:"\u{1f913}",fitzpatrick_scale:!1,category:"people"},sunglasses:{keywords:["face","cool","smile","summer","beach","sunglass"],char:"\u{1f60e}",fitzpatrick_scale:!1,category:"people"},star_struck:{keywords:["face","smile","starry","eyes","grinning"],char:"\u{1f929}",fitzpatrick_scale:!1,category:"people"},clown_face:{keywords:["face"],char:"\u{1f921}",fitzpatrick_scale:!1,category:"people"},cowboy_hat_face:{keywords:["face","cowgirl","hat"],char:"\u{1f920}",fitzpatrick_scale:!1,category:"people"},hugs:{keywords:["face","smile","hug"],char:"\u{1f917}",fitzpatrick_scale:!1,category:"people"},smirk:{keywords:["face","smile","mean","prank","smug","sarcasm"],char:"\u{1f60f}",fitzpatrick_scale:!1,category:"people"},no_mouth:{keywords:["face","hellokitty"],char:"\u{1f636}",fitzpatrick_scale:!1,category:"people"},neutral_face:{keywords:["indifference","meh",":|","neutral"],char:"\u{1f610}",fitzpatrick_scale:!1,category:"people"},expressionless:{keywords:["face","indifferent","-_-","meh","deadpan"],char:"\u{1f611}",fitzpatrick_scale:!1,category:"people"},unamused:{keywords:["indifference","bored","straight face","serious","sarcasm","unimpressed","skeptical","dubious","side_eye"],char:"\u{1f612}",fitzpatrick_scale:!1,category:"people"},roll_eyes:{keywords:["face","eyeroll","frustrated"],char:"\u{1f644}",fitzpatrick_scale:!1,category:"people"},thinking:{keywords:["face","hmmm","think","consider"],char:"\u{1f914}",fitzpatrick_scale:!1,category:"people"},lying_face:{keywords:["face","lie","pinocchio"],char:"\u{1f925}",fitzpatrick_scale:!1,category:"people"},hand_over_mouth:{keywords:["face","whoops","shock","surprise"],char:"\u{1f92d}",fitzpatrick_scale:!1,category:"people"},shushing:{keywords:["face","quiet","shhh"],char:"\u{1f92b}",fitzpatrick_scale:!1,category:"people"},symbols_over_mouth:{keywords:["face","swearing","cursing","cussing","profanity","expletive"],char:"\u{1f92c}",fitzpatrick_scale:!1,category:"people"},exploding_head:{keywords:["face","shocked","mind","blown"],char:"\u{1f92f}",fitzpatrick_scale:!1,category:"people"},flushed:{keywords:["face","blush","shy","flattered"],char:"\u{1f633}",fitzpatrick_scale:!1,category:"people"},disappointed:{keywords:["face","sad","upset","depressed",":("],char:"\u{1f61e}",fitzpatrick_scale:!1,category:"people"},worried:{keywords:["face","concern","nervous",":("],char:"\u{1f61f}",fitzpatrick_scale:!1,category:"people"},angry:{keywords:["mad","face","annoyed","frustrated"],char:"\u{1f620}",fitzpatrick_scale:!1,category:"people"},rage:{keywords:["angry","mad","hate","despise"],char:"\u{1f621}",fitzpatrick_scale:!1,category:"people"},pensive:{keywords:["face","sad","depressed","upset"],char:"\u{1f614}",fitzpatrick_scale:!1,category:"people"},confused:{keywords:["face","indifference","huh","weird","hmmm",":/"],char:"\u{1f615}",fitzpatrick_scale:!1,category:"people"},slightly_frowning_face:{keywords:["face","frowning","disappointed","sad","upset"],char:"\u{1f641}",fitzpatrick_scale:!1,category:"people"},frowning_face:{keywords:["face","sad","upset","frown"],char:"\u2639",fitzpatrick_scale:!1,category:"people"},persevere:{keywords:["face","sick","no","upset","oops"],char:"\u{1f623}",fitzpatrick_scale:!1,category:"people"},confounded:{keywords:["face","confused","sick","unwell","oops",":S"],char:"\u{1f616}",fitzpatrick_scale:!1,category:"people"},tired_face:{keywords:["sick","whine","upset","frustrated"],char:"\u{1f62b}",fitzpatrick_scale:!1,category:"people"},weary:{keywords:["face","tired","sleepy","sad","frustrated","upset"],char:"\u{1f629}",fitzpatrick_scale:!1,category:"people"},pleading:{keywords:["face","begging","mercy"],char:"\u{1f97a}",fitzpatrick_scale:!1,category:"people"},triumph:{keywords:["face","gas","phew","proud","pride"],char:"\u{1f624}",fitzpatrick_scale:!1,category:"people"},open_mouth:{keywords:["face","surprise","impressed","wow","whoa",":O"],char:"\u{1f62e}",fitzpatrick_scale:!1,category:"people"},scream:{keywords:["face","munch","scared","omg"],char:"\u{1f631}",fitzpatrick_scale:!1,category:"people"},fearful:{keywords:["face","scared","terrified","nervous","oops","huh"],char:"\u{1f628}",fitzpatrick_scale:!1,category:"people"},cold_sweat:{keywords:["face","nervous","sweat"],char:"\u{1f630}",fitzpatrick_scale:!1,category:"people"},hushed:{keywords:["face","woo","shh"],char:"\u{1f62f}",fitzpatrick_scale:!1,category:"people"},frowning:{keywords:["face","aw","what"],char:"\u{1f626}",fitzpatrick_scale:!1,category:"people"},anguished:{keywords:["face","stunned","nervous"],char:"\u{1f627}",fitzpatrick_scale:!1,category:"people"},cry:{keywords:["face","tears","sad","depressed","upset",":'("],char:"\u{1f622}",fitzpatrick_scale:!1,category:"people"},disappointed_relieved:{keywords:["face","phew","sweat","nervous"],char:"\u{1f625}",fitzpatrick_scale:!1,category:"people"},drooling_face:{keywords:["face"],char:"\u{1f924}",fitzpatrick_scale:!1,category:"people"},sleepy:{keywords:["face","tired","rest","nap"],char:"\u{1f62a}",fitzpatrick_scale:!1,category:"people"},sweat:{keywords:["face","hot","sad","tired","exercise"],char:"\u{1f613}",fitzpatrick_scale:!1,category:"people"},hot:{keywords:["face","feverish","heat","red","sweating"],char:"\u{1f975}",fitzpatrick_scale:!1,category:"people"},cold:{keywords:["face","blue","freezing","frozen","frostbite","icicles"],char:"\u{1f976}",fitzpatrick_scale:!1,category:"people"},sob:{keywords:["face","cry","tears","sad","upset","depressed"],char:"\u{1f62d}",fitzpatrick_scale:!1,category:"people"},dizzy_face:{keywords:["spent","unconscious","xox","dizzy"],char:"\u{1f635}",fitzpatrick_scale:!1,category:"people"},astonished:{keywords:["face","xox","surprised","poisoned"],char:"\u{1f632}",fitzpatrick_scale:!1,category:"people"},zipper_mouth_face:{keywords:["face","sealed","zipper","secret"],char:"\u{1f910}",fitzpatrick_scale:!1,category:"people"},nauseated_face:{keywords:["face","vomit","gross","green","sick","throw up","ill"],char:"\u{1f922}",fitzpatrick_scale:!1,category:"people"},sneezing_face:{keywords:["face","gesundheit","sneeze","sick","allergy"],char:"\u{1f927}",fitzpatrick_scale:!1,category:"people"},vomiting:{keywords:["face","sick"],char:"\u{1f92e}",fitzpatrick_scale:!1,category:"people"},mask:{keywords:["face","sick","ill","disease"],char:"\u{1f637}",fitzpatrick_scale:!1,category:"people"},face_with_thermometer:{keywords:["sick","temperature","thermometer","cold","fever"],char:"\u{1f912}",fitzpatrick_scale:!1,category:"people"},face_with_head_bandage:{keywords:["injured","clumsy","bandage","hurt"],char:"\u{1f915}",fitzpatrick_scale:!1,category:"people"},woozy:{keywords:["face","dizzy","intoxicated","tipsy","wavy"],char:"\u{1f974}",fitzpatrick_scale:!1,category:"people"},sleeping:{keywords:["face","tired","sleepy","night","zzz"],char:"\u{1f634}",fitzpatrick_scale:!1,category:"people"},zzz:{keywords:["sleepy","tired","dream"],char:"\u{1f4a4}",fitzpatrick_scale:!1,category:"people"},poop:{keywords:["hankey","shitface","fail","turd","shit"],char:"\u{1f4a9}",fitzpatrick_scale:!1,category:"people"},smiling_imp:{keywords:["devil","horns"],char:"\u{1f608}",fitzpatrick_scale:!1,category:"people"},imp:{keywords:["devil","angry","horns"],char:"\u{1f47f}",fitzpatrick_scale:!1,category:"people"},japanese_ogre:{keywords:["monster","red","mask","halloween","scary","creepy","devil","demon","japanese","ogre"],char:"\u{1f479}",fitzpatrick_scale:!1,category:"people"},japanese_goblin:{keywords:["red","evil","mask","monster","scary","creepy","japanese","goblin"],char:"\u{1f47a}",fitzpatrick_scale:!1,category:"people"},skull:{keywords:["dead","skeleton","creepy","death"],char:"\u{1f480}",fitzpatrick_scale:!1,category:"people"},ghost:{keywords:["halloween","spooky","scary"],char:"\u{1f47b}",fitzpatrick_scale:!1,category:"people"},alien:{keywords:["UFO","paul","weird","outer_space"],char:"\u{1f47d}",fitzpatrick_scale:!1,category:"people"},robot:{keywords:["computer","machine","bot"],char:"\u{1f916}",fitzpatrick_scale:!1,category:"people"},smiley_cat:{keywords:["animal","cats","happy","smile"],char:"\u{1f63a}",fitzpatrick_scale:!1,category:"people"},smile_cat:{keywords:["animal","cats","smile"],char:"\u{1f638}",fitzpatrick_scale:!1,category:"people"},joy_cat:{keywords:["animal","cats","haha","happy","tears"],char:"\u{1f639}",fitzpatrick_scale:!1,category:"people"},heart_eyes_cat:{keywords:["animal","love","like","affection","cats","valentines","heart"],char:"\u{1f63b}",fitzpatrick_scale:!1,category:"people"},smirk_cat:{keywords:["animal","cats","smirk"],char:"\u{1f63c}",fitzpatrick_scale:!1,category:"people"},kissing_cat:{keywords:["animal","cats","kiss"],char:"\u{1f63d}",fitzpatrick_scale:!1,category:"people"},scream_cat:{keywords:["animal","cats","munch","scared","scream"],char:"\u{1f640}",fitzpatrick_scale:!1,category:"people"},crying_cat_face:{keywords:["animal","tears","weep","sad","cats","upset","cry"],char:"\u{1f63f}",fitzpatrick_scale:!1,category:"people"},pouting_cat:{keywords:["animal","cats"],char:"\u{1f63e}",fitzpatrick_scale:!1,category:"people"},palms_up:{keywords:["hands","gesture","cupped","prayer"],char:"\u{1f932}",fitzpatrick_scale:!0,category:"people"},raised_hands:{keywords:["gesture","hooray","yea","celebration","hands"],char:"\u{1f64c}",fitzpatrick_scale:!0,category:"people"},clap:{keywords:["hands","praise","applause","congrats","yay"],char:"\u{1f44f}",fitzpatrick_scale:!0,category:"people"},wave:{keywords:["hands","gesture","goodbye","solong","farewell","hello","hi","palm"],char:"\u{1f44b}",fitzpatrick_scale:!0,category:"people"},call_me_hand:{keywords:["hands","gesture"],char:"\u{1f919}",fitzpatrick_scale:!0,category:"people"},"+1":{keywords:["thumbsup","yes","awesome","good","agree","accept","cool","hand","like"],char:"\u{1f44d}",fitzpatrick_scale:!0,category:"people"},"-1":{keywords:["thumbsdown","no","dislike","hand"],char:"\u{1f44e}",fitzpatrick_scale:!0,category:"people"},facepunch:{keywords:["angry","violence","fist","hit","attack","hand"],char:"\u{1f44a}",fitzpatrick_scale:!0,category:"people"},fist:{keywords:["fingers","hand","grasp"],char:"\u270a",fitzpatrick_scale:!0,category:"people"},fist_left:{keywords:["hand","fistbump"],char:"\u{1f91b}",fitzpatrick_scale:!0,category:"people"},fist_right:{keywords:["hand","fistbump"],char:"\u{1f91c}",fitzpatrick_scale:!0,category:"people"},v:{keywords:["fingers","ohyeah","hand","peace","victory","two"],char:"\u270c",fitzpatrick_scale:!0,category:"people"},ok_hand:{keywords:["fingers","limbs","perfect","ok","okay"],char:"\u{1f44c}",fitzpatrick_scale:!0,category:"people"},raised_hand:{keywords:["fingers","stop","highfive","palm","ban"],char:"\u270b",fitzpatrick_scale:!0,category:"people"},raised_back_of_hand:{keywords:["fingers","raised","backhand"],char:"\u{1f91a}",fitzpatrick_scale:!0,category:"people"},open_hands:{keywords:["fingers","butterfly","hands","open"],char:"\u{1f450}",fitzpatrick_scale:!0,category:"people"},muscle:{keywords:["arm","flex","hand","summer","strong","biceps"],char:"\u{1f4aa}",fitzpatrick_scale:!0,category:"people"},pray:{keywords:["please","hope","wish","namaste","highfive"],char:"\u{1f64f}",fitzpatrick_scale:!0,category:"people"},foot:{keywords:["kick","stomp"],char:"\u{1f9b6}",fitzpatrick_scale:!0,category:"people"},leg:{keywords:["kick","limb"],char:"\u{1f9b5}",fitzpatrick_scale:!0,category:"people"},handshake:{keywords:["agreement","shake"],char:"\u{1f91d}",fitzpatrick_scale:!1,category:"people"},point_up:{keywords:["hand","fingers","direction","up"],char:"\u261d",fitzpatrick_scale:!0,category:"people"},point_up_2:{keywords:["fingers","hand","direction","up"],char:"\u{1f446}",fitzpatrick_scale:!0,category:"people"},point_down:{keywords:["fingers","hand","direction","down"],char:"\u{1f447}",fitzpatrick_scale:!0,category:"people"},point_left:{keywords:["direction","fingers","hand","left"],char:"\u{1f448}",fitzpatrick_scale:!0,category:"people"},point_right:{keywords:["fingers","hand","direction","right"],char:"\u{1f449}",fitzpatrick_scale:!0,category:"people"},fu:{keywords:["hand","fingers","rude","middle","flipping"],char:"\u{1f595}",fitzpatrick_scale:!0,category:"people"},raised_hand_with_fingers_splayed:{keywords:["hand","fingers","palm"],char:"\u{1f590}",fitzpatrick_scale:!0,category:"people"},love_you:{keywords:["hand","fingers","gesture"],char:"\u{1f91f}",fitzpatrick_scale:!0,category:"people"},metal:{keywords:["hand","fingers","evil_eye","sign_of_horns","rock_on"],char:"\u{1f918}",fitzpatrick_scale:!0,category:"people"},crossed_fingers:{keywords:["good","lucky"],char:"\u{1f91e}",fitzpatrick_scale:!0,category:"people"},vulcan_salute:{keywords:["hand","fingers","spock","star trek"],char:"\u{1f596}",fitzpatrick_scale:!0,category:"people"},writing_hand:{keywords:["lower_left_ballpoint_pen","stationery","write","compose"],char:"\u270d",fitzpatrick_scale:!0,category:"people"},selfie:{keywords:["camera","phone"],char:"\u{1f933}",fitzpatrick_scale:!0,category:"people"},nail_care:{keywords:["beauty","manicure","finger","fashion","nail"],char:"\u{1f485}",fitzpatrick_scale:!0,category:"people"},lips:{keywords:["mouth","kiss"],char:"\u{1f444}",fitzpatrick_scale:!1,category:"people"},tooth:{keywords:["teeth","dentist"],char:"\u{1f9b7}",fitzpatrick_scale:!1,category:"people"},tongue:{keywords:["mouth","playful"],char:"\u{1f445}",fitzpatrick_scale:!1,category:"people"},ear:{keywords:["face","hear","sound","listen"],char:"\u{1f442}",fitzpatrick_scale:!0,category:"people"},nose:{keywords:["smell","sniff"],char:"\u{1f443}",fitzpatrick_scale:!0,category:"people"},eye:{keywords:["face","look","see","watch","stare"],char:"\u{1f441}",fitzpatrick_scale:!1,category:"people"},eyes:{keywords:["look","watch","stalk","peek","see"],char:"\u{1f440}",fitzpatrick_scale:!1,category:"people"},brain:{keywords:["smart","intelligent"],char:"\u{1f9e0}",fitzpatrick_scale:!1,category:"people"},bust_in_silhouette:{keywords:["user","person","human"],char:"\u{1f464}",fitzpatrick_scale:!1,category:"people"},busts_in_silhouette:{keywords:["user","person","human","group","team"],char:"\u{1f465}",fitzpatrick_scale:!1,category:"people"},speaking_head:{keywords:["user","person","human","sing","say","talk"],char:"\u{1f5e3}",fitzpatrick_scale:!1,category:"people"},baby:{keywords:["child","boy","girl","toddler"],char:"\u{1f476}",fitzpatrick_scale:!0,category:"people"},child:{keywords:["gender-neutral","young"],char:"\u{1f9d2}",fitzpatrick_scale:!0,category:"people"},boy:{keywords:["man","male","guy","teenager"],char:"\u{1f466}",fitzpatrick_scale:!0,category:"people"},girl:{keywords:["female","woman","teenager"],char:"\u{1f467}",fitzpatrick_scale:!0,category:"people"},adult:{keywords:["gender-neutral","person"],char:"\u{1f9d1}",fitzpatrick_scale:!0,category:"people"},man:{keywords:["mustache","father","dad","guy","classy","sir","moustache"],char:"\u{1f468}",fitzpatrick_scale:!0,category:"people"},woman:{keywords:["female","girls","lady"],char:"\u{1f469}",fitzpatrick_scale:!0,category:"people"},blonde_woman:{keywords:["woman","female","girl","blonde","person"],char:"\u{1f471}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},blonde_man:{keywords:["man","male","boy","blonde","guy","person"],char:"\u{1f471}",fitzpatrick_scale:!0,category:"people"},bearded_person:{keywords:["person","bewhiskered"],char:"\u{1f9d4}",fitzpatrick_scale:!0,category:"people"},older_adult:{keywords:["human","elder","senior","gender-neutral"],char:"\u{1f9d3}",fitzpatrick_scale:!0,category:"people"},older_man:{keywords:["human","male","men","old","elder","senior"],char:"\u{1f474}",fitzpatrick_scale:!0,category:"people"},older_woman:{keywords:["human","female","women","lady","old","elder","senior"],char:"\u{1f475}",fitzpatrick_scale:!0,category:"people"},man_with_gua_pi_mao:{keywords:["male","boy","chinese"],char:"\u{1f472}",fitzpatrick_scale:!0,category:"people"},woman_with_headscarf:{keywords:["female","hijab","mantilla","tichel"],char:"\u{1f9d5}",fitzpatrick_scale:!0,category:"people"},woman_with_turban:{keywords:["female","indian","hinduism","arabs","woman"],char:"\u{1f473}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_with_turban:{keywords:["male","indian","hinduism","arabs"],char:"\u{1f473}",fitzpatrick_scale:!0,category:"people"},policewoman:{keywords:["woman","police","law","legal","enforcement","arrest","911","female"],char:"\u{1f46e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},policeman:{keywords:["man","police","law","legal","enforcement","arrest","911"],char:"\u{1f46e}",fitzpatrick_scale:!0,category:"people"},construction_worker_woman:{keywords:["female","human","wip","build","construction","worker","labor","woman"],char:"\u{1f477}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},construction_worker_man:{keywords:["male","human","wip","guy","build","construction","worker","labor"],char:"\u{1f477}",fitzpatrick_scale:!0,category:"people"},guardswoman:{keywords:["uk","gb","british","female","royal","woman"],char:"\u{1f482}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},guardsman:{keywords:["uk","gb","british","male","guy","royal"],char:"\u{1f482}",fitzpatrick_scale:!0,category:"people"},female_detective:{keywords:["human","spy","detective","female","woman"],char:"\u{1f575}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},male_detective:{keywords:["human","spy","detective"],char:"\u{1f575}",fitzpatrick_scale:!0,category:"people"},woman_health_worker:{keywords:["doctor","nurse","therapist","healthcare","woman","human"],char:"\u{1f469}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},man_health_worker:{keywords:["doctor","nurse","therapist","healthcare","man","human"],char:"\u{1f468}\u200d\u2695\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_farmer:{keywords:["rancher","gardener","woman","human"],char:"\u{1f469}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},man_farmer:{keywords:["rancher","gardener","man","human"],char:"\u{1f468}\u200d\u{1f33e}",fitzpatrick_scale:!0,category:"people"},woman_cook:{keywords:["chef","woman","human"],char:"\u{1f469}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},man_cook:{keywords:["chef","man","human"],char:"\u{1f468}\u200d\u{1f373}",fitzpatrick_scale:!0,category:"people"},woman_student:{keywords:["graduate","woman","human"],char:"\u{1f469}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},man_student:{keywords:["graduate","man","human"],char:"\u{1f468}\u200d\u{1f393}",fitzpatrick_scale:!0,category:"people"},woman_singer:{keywords:["rockstar","entertainer","woman","human"],char:"\u{1f469}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},man_singer:{keywords:["rockstar","entertainer","man","human"],char:"\u{1f468}\u200d\u{1f3a4}",fitzpatrick_scale:!0,category:"people"},woman_teacher:{keywords:["instructor","professor","woman","human"],char:"\u{1f469}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},man_teacher:{keywords:["instructor","professor","man","human"],char:"\u{1f468}\u200d\u{1f3eb}",fitzpatrick_scale:!0,category:"people"},woman_factory_worker:{keywords:["assembly","industrial","woman","human"],char:"\u{1f469}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},man_factory_worker:{keywords:["assembly","industrial","man","human"],char:"\u{1f468}\u200d\u{1f3ed}",fitzpatrick_scale:!0,category:"people"},woman_technologist:{keywords:["coder","developer","engineer","programmer","software","woman","human","laptop","computer"],char:"\u{1f469}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},man_technologist:{keywords:["coder","developer","engineer","programmer","software","man","human","laptop","computer"],char:"\u{1f468}\u200d\u{1f4bb}",fitzpatrick_scale:!0,category:"people"},woman_office_worker:{keywords:["business","manager","woman","human"],char:"\u{1f469}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},man_office_worker:{keywords:["business","manager","man","human"],char:"\u{1f468}\u200d\u{1f4bc}",fitzpatrick_scale:!0,category:"people"},woman_mechanic:{keywords:["plumber","woman","human","wrench"],char:"\u{1f469}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},man_mechanic:{keywords:["plumber","man","human","wrench"],char:"\u{1f468}\u200d\u{1f527}",fitzpatrick_scale:!0,category:"people"},woman_scientist:{keywords:["biologist","chemist","engineer","physicist","woman","human"],char:"\u{1f469}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},man_scientist:{keywords:["biologist","chemist","engineer","physicist","man","human"],char:"\u{1f468}\u200d\u{1f52c}",fitzpatrick_scale:!0,category:"people"},woman_artist:{keywords:["painter","woman","human"],char:"\u{1f469}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},man_artist:{keywords:["painter","man","human"],char:"\u{1f468}\u200d\u{1f3a8}",fitzpatrick_scale:!0,category:"people"},woman_firefighter:{keywords:["fireman","woman","human"],char:"\u{1f469}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},man_firefighter:{keywords:["fireman","man","human"],char:"\u{1f468}\u200d\u{1f692}",fitzpatrick_scale:!0,category:"people"},woman_pilot:{keywords:["aviator","plane","woman","human"],char:"\u{1f469}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},man_pilot:{keywords:["aviator","plane","man","human"],char:"\u{1f468}\u200d\u2708\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_astronaut:{keywords:["space","rocket","woman","human"],char:"\u{1f469}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},man_astronaut:{keywords:["space","rocket","man","human"],char:"\u{1f468}\u200d\u{1f680}",fitzpatrick_scale:!0,category:"people"},woman_judge:{keywords:["justice","court","woman","human"],char:"\u{1f469}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},man_judge:{keywords:["justice","court","man","human"],char:"\u{1f468}\u200d\u2696\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_superhero:{keywords:["woman","female","good","heroine","superpowers"],char:"\u{1f9b8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_superhero:{keywords:["man","male","good","hero","superpowers"],char:"\u{1f9b8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_supervillain:{keywords:["woman","female","evil","bad","criminal","heroine","superpowers"],char:"\u{1f9b9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_supervillain:{keywords:["man","male","evil","bad","criminal","hero","superpowers"],char:"\u{1f9b9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},mrs_claus:{keywords:["woman","female","xmas","mother christmas"],char:"\u{1f936}",fitzpatrick_scale:!0,category:"people"},santa:{keywords:["festival","man","male","xmas","father christmas"],char:"\u{1f385}",fitzpatrick_scale:!0,category:"people"},sorceress:{keywords:["woman","female","mage","witch"],char:"\u{1f9d9}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},wizard:{keywords:["man","male","mage","sorcerer"],char:"\u{1f9d9}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_elf:{keywords:["woman","female"],char:"\u{1f9dd}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_elf:{keywords:["man","male"],char:"\u{1f9dd}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_vampire:{keywords:["woman","female"],char:"\u{1f9db}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_vampire:{keywords:["man","male","dracula"],char:"\u{1f9db}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_zombie:{keywords:["woman","female","undead","walking dead"],char:"\u{1f9df}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_zombie:{keywords:["man","male","dracula","undead","walking dead"],char:"\u{1f9df}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},woman_genie:{keywords:["woman","female"],char:"\u{1f9de}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"people"},man_genie:{keywords:["man","male"],char:"\u{1f9de}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},mermaid:{keywords:["woman","female","merwoman","ariel"],char:"\u{1f9dc}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},merman:{keywords:["man","male","triton"],char:"\u{1f9dc}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_fairy:{keywords:["woman","female"],char:"\u{1f9da}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_fairy:{keywords:["man","male"],char:"\u{1f9da}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},angel:{keywords:["heaven","wings","halo"],char:"\u{1f47c}",fitzpatrick_scale:!0,category:"people"},pregnant_woman:{keywords:["baby"],char:"\u{1f930}",fitzpatrick_scale:!0,category:"people"},breastfeeding:{keywords:["nursing","baby"],char:"\u{1f931}",fitzpatrick_scale:!0,category:"people"},princess:{keywords:["girl","woman","female","blond","crown","royal","queen"],char:"\u{1f478}",fitzpatrick_scale:!0,category:"people"},prince:{keywords:["boy","man","male","crown","royal","king"],char:"\u{1f934}",fitzpatrick_scale:!0,category:"people"},bride_with_veil:{keywords:["couple","marriage","wedding","woman","bride"],char:"\u{1f470}",fitzpatrick_scale:!0,category:"people"},man_in_tuxedo:{keywords:["couple","marriage","wedding","groom"],char:"\u{1f935}",fitzpatrick_scale:!0,category:"people"},running_woman:{keywords:["woman","walking","exercise","race","running","female"],char:"\u{1f3c3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},running_man:{keywords:["man","walking","exercise","race","running"],char:"\u{1f3c3}",fitzpatrick_scale:!0,category:"people"},walking_woman:{keywords:["human","feet","steps","woman","female"],char:"\u{1f6b6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},walking_man:{keywords:["human","feet","steps"],char:"\u{1f6b6}",fitzpatrick_scale:!0,category:"people"},dancer:{keywords:["female","girl","woman","fun"],char:"\u{1f483}",fitzpatrick_scale:!0,category:"people"},man_dancing:{keywords:["male","boy","fun","dancer"],char:"\u{1f57a}",fitzpatrick_scale:!0,category:"people"},dancing_women:{keywords:["female","bunny","women","girls"],char:"\u{1f46f}",fitzpatrick_scale:!1,category:"people"},dancing_men:{keywords:["male","bunny","men","boys"],char:"\u{1f46f}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"people"},couple:{keywords:["pair","people","human","love","date","dating","like","affection","valentines","marriage"],char:"\u{1f46b}",fitzpatrick_scale:!1,category:"people"},two_men_holding_hands:{keywords:["pair","couple","love","like","bromance","friendship","people","human"],char:"\u{1f46c}",fitzpatrick_scale:!1,category:"people"},two_women_holding_hands:{keywords:["pair","friendship","couple","love","like","female","people","human"],char:"\u{1f46d}",fitzpatrick_scale:!1,category:"people"},bowing_woman:{keywords:["woman","female","girl"],char:"\u{1f647}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},bowing_man:{keywords:["man","male","boy"],char:"\u{1f647}",fitzpatrick_scale:!0,category:"people"},man_facepalming:{keywords:["man","male","boy","disbelief"],char:"\u{1f926}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_facepalming:{keywords:["woman","female","girl","disbelief"],char:"\u{1f926}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_shrugging:{keywords:["woman","female","girl","confused","indifferent","doubt"],char:"\u{1f937}",fitzpatrick_scale:!0,category:"people"},man_shrugging:{keywords:["man","male","boy","confused","indifferent","doubt"],char:"\u{1f937}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},tipping_hand_woman:{keywords:["female","girl","woman","human","information"],char:"\u{1f481}",fitzpatrick_scale:!0,category:"people"},tipping_hand_man:{keywords:["male","boy","man","human","information"],char:"\u{1f481}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},no_good_woman:{keywords:["female","girl","woman","nope"],char:"\u{1f645}",fitzpatrick_scale:!0,category:"people"},no_good_man:{keywords:["male","boy","man","nope"],char:"\u{1f645}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},ok_woman:{keywords:["women","girl","female","pink","human","woman"],char:"\u{1f646}",fitzpatrick_scale:!0,category:"people"},ok_man:{keywords:["men","boy","male","blue","human","man"],char:"\u{1f646}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},raising_hand_woman:{keywords:["female","girl","woman"],char:"\u{1f64b}",fitzpatrick_scale:!0,category:"people"},raising_hand_man:{keywords:["male","boy","man"],char:"\u{1f64b}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},pouting_woman:{keywords:["female","girl","woman"],char:"\u{1f64e}",fitzpatrick_scale:!0,category:"people"},pouting_man:{keywords:["male","boy","man"],char:"\u{1f64e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},frowning_woman:{keywords:["female","girl","woman","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}",fitzpatrick_scale:!0,category:"people"},frowning_man:{keywords:["male","boy","man","sad","depressed","discouraged","unhappy"],char:"\u{1f64d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},haircut_woman:{keywords:["female","girl","woman"],char:"\u{1f487}",fitzpatrick_scale:!0,category:"people"},haircut_man:{keywords:["male","boy","man"],char:"\u{1f487}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},massage_woman:{keywords:["female","girl","woman","head"],char:"\u{1f486}",fitzpatrick_scale:!0,category:"people"},massage_man:{keywords:["male","boy","man","head"],char:"\u{1f486}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},woman_in_steamy_room:{keywords:["female","woman","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"people"},man_in_steamy_room:{keywords:["male","man","spa","steamroom","sauna"],char:"\u{1f9d6}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"people"},couple_with_heart_woman_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f491}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_woman_woman:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couple_with_heart_man_man:{keywords:["pair","love","like","affection","human","dating","valentines","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f48f}",fitzpatrick_scale:!1,category:"people"},couplekiss_woman_woman:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f469}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f469}",fitzpatrick_scale:!1,category:"people"},couplekiss_man_man:{keywords:["pair","valentines","love","like","dating","marriage"],char:"\u{1f468}\u200d\u2764\ufe0f\u200d\u{1f48b}\u200d\u{1f468}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy:{keywords:["home","parents","child","mom","dad","father","mother","people","human"],char:"\u{1f46a}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl:{keywords:["home","parents","people","human","child"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_woman_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f469}\u200d\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_boy_boy:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_man_girl_girl:{keywords:["home","parents","people","human","children"],char:"\u{1f468}\u200d\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f469}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_woman_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f469}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_boy:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl:{keywords:["home","parent","people","human","child"],char:"\u{1f468}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},family_man_girl_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_boy_boy:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f466}\u200d\u{1f466}",fitzpatrick_scale:!1,category:"people"},family_man_girl_girl:{keywords:["home","parent","people","human","children"],char:"\u{1f468}\u200d\u{1f467}\u200d\u{1f467}",fitzpatrick_scale:!1,category:"people"},yarn:{keywords:["ball","crochet","knit"],char:"\u{1f9f6}",fitzpatrick_scale:!1,category:"people"},thread:{keywords:["needle","sewing","spool","string"],char:"\u{1f9f5}",fitzpatrick_scale:!1,category:"people"},coat:{keywords:["jacket"],char:"\u{1f9e5}",fitzpatrick_scale:!1,category:"people"},labcoat:{keywords:["doctor","experiment","scientist","chemist"],char:"\u{1f97c}",fitzpatrick_scale:!1,category:"people"},womans_clothes:{keywords:["fashion","shopping_bags","female"],char:"\u{1f45a}",fitzpatrick_scale:!1,category:"people"},tshirt:{keywords:["fashion","cloth","casual","shirt","tee"],char:"\u{1f455}",fitzpatrick_scale:!1,category:"people"},jeans:{keywords:["fashion","shopping"],char:"\u{1f456}",fitzpatrick_scale:!1,category:"people"},necktie:{keywords:["shirt","suitup","formal","fashion","cloth","business"],char:"\u{1f454}",fitzpatrick_scale:!1,category:"people"},dress:{keywords:["clothes","fashion","shopping"],char:"\u{1f457}",fitzpatrick_scale:!1,category:"people"},bikini:{keywords:["swimming","female","woman","girl","fashion","beach","summer"],char:"\u{1f459}",fitzpatrick_scale:!1,category:"people"},kimono:{keywords:["dress","fashion","women","female","japanese"],char:"\u{1f458}",fitzpatrick_scale:!1,category:"people"},lipstick:{keywords:["female","girl","fashion","woman"],char:"\u{1f484}",fitzpatrick_scale:!1,category:"people"},kiss:{keywords:["face","lips","love","like","affection","valentines"],char:"\u{1f48b}",fitzpatrick_scale:!1,category:"people"},footprints:{keywords:["feet","tracking","walking","beach"],char:"\u{1f463}",fitzpatrick_scale:!1,category:"people"},flat_shoe:{keywords:["ballet","slip-on","slipper"],char:"\u{1f97f}",fitzpatrick_scale:!1,category:"people"},high_heel:{keywords:["fashion","shoes","female","pumps","stiletto"],char:"\u{1f460}",fitzpatrick_scale:!1,category:"people"},sandal:{keywords:["shoes","fashion","flip flops"],char:"\u{1f461}",fitzpatrick_scale:!1,category:"people"},boot:{keywords:["shoes","fashion"],char:"\u{1f462}",fitzpatrick_scale:!1,category:"people"},mans_shoe:{keywords:["fashion","male"],char:"\u{1f45e}",fitzpatrick_scale:!1,category:"people"},athletic_shoe:{keywords:["shoes","sports","sneakers"],char:"\u{1f45f}",fitzpatrick_scale:!1,category:"people"},hiking_boot:{keywords:["backpacking","camping","hiking"],char:"\u{1f97e}",fitzpatrick_scale:!1,category:"people"},socks:{keywords:["stockings","clothes"],char:"\u{1f9e6}",fitzpatrick_scale:!1,category:"people"},gloves:{keywords:["hands","winter","clothes"],char:"\u{1f9e4}",fitzpatrick_scale:!1,category:"people"},scarf:{keywords:["neck","winter","clothes"],char:"\u{1f9e3}",fitzpatrick_scale:!1,category:"people"},womans_hat:{keywords:["fashion","accessories","female","lady","spring"],char:"\u{1f452}",fitzpatrick_scale:!1,category:"people"},tophat:{keywords:["magic","gentleman","classy","circus"],char:"\u{1f3a9}",fitzpatrick_scale:!1,category:"people"},billed_hat:{keywords:["cap","baseball"],char:"\u{1f9e2}",fitzpatrick_scale:!1,category:"people"},rescue_worker_helmet:{keywords:["construction","build"],char:"\u26d1",fitzpatrick_scale:!1,category:"people"},mortar_board:{keywords:["school","college","degree","university","graduation","cap","hat","legal","learn","education"],char:"\u{1f393}",fitzpatrick_scale:!1,category:"people"},crown:{keywords:["king","kod","leader","royalty","lord"],char:"\u{1f451}",fitzpatrick_scale:!1,category:"people"},school_satchel:{keywords:["student","education","bag","backpack"],char:"\u{1f392}",fitzpatrick_scale:!1,category:"people"},luggage:{keywords:["packing","travel"],char:"\u{1f9f3}",fitzpatrick_scale:!1,category:"people"},pouch:{keywords:["bag","accessories","shopping"],char:"\u{1f45d}",fitzpatrick_scale:!1,category:"people"},purse:{keywords:["fashion","accessories","money","sales","shopping"],char:"\u{1f45b}",fitzpatrick_scale:!1,category:"people"},handbag:{keywords:["fashion","accessory","accessories","shopping"],char:"\u{1f45c}",fitzpatrick_scale:!1,category:"people"},briefcase:{keywords:["business","documents","work","law","legal","job","career"],char:"\u{1f4bc}",fitzpatrick_scale:!1,category:"people"},eyeglasses:{keywords:["fashion","accessories","eyesight","nerdy","dork","geek"],char:"\u{1f453}",fitzpatrick_scale:!1,category:"people"},dark_sunglasses:{keywords:["face","cool","accessories"],char:"\u{1f576}",fitzpatrick_scale:!1,category:"people"},goggles:{keywords:["eyes","protection","safety"],char:"\u{1f97d}",fitzpatrick_scale:!1,category:"people"},ring:{keywords:["wedding","propose","marriage","valentines","diamond","fashion","jewelry","gem","engagement"],char:"\u{1f48d}",fitzpatrick_scale:!1,category:"people"},closed_umbrella:{keywords:["weather","rain","drizzle"],char:"\u{1f302}",fitzpatrick_scale:!1,category:"people"},dog:{keywords:["animal","friend","nature","woof","puppy","pet","faithful"],char:"\u{1f436}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat:{keywords:["animal","meow","nature","pet","kitten"],char:"\u{1f431}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse:{keywords:["animal","nature","cheese_wedge","rodent"],char:"\u{1f42d}",fitzpatrick_scale:!1,category:"animals_and_nature"},hamster:{keywords:["animal","nature"],char:"\u{1f439}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit:{keywords:["animal","nature","pet","spring","magic","bunny"],char:"\u{1f430}",fitzpatrick_scale:!1,category:"animals_and_nature"},fox_face:{keywords:["animal","nature","face"],char:"\u{1f98a}",fitzpatrick_scale:!1,category:"animals_and_nature"},bear:{keywords:["animal","nature","wild"],char:"\u{1f43b}",fitzpatrick_scale:!1,category:"animals_and_nature"},panda_face:{keywords:["animal","nature","panda"],char:"\u{1f43c}",fitzpatrick_scale:!1,category:"animals_and_nature"},koala:{keywords:["animal","nature"],char:"\u{1f428}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger:{keywords:["animal","cat","danger","wild","nature","roar"],char:"\u{1f42f}",fitzpatrick_scale:!1,category:"animals_and_nature"},lion:{keywords:["animal","nature"],char:"\u{1f981}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f42e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig:{keywords:["animal","oink","nature"],char:"\u{1f437}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig_nose:{keywords:["animal","oink"],char:"\u{1f43d}",fitzpatrick_scale:!1,category:"animals_and_nature"},frog:{keywords:["animal","nature","croak","toad"],char:"\u{1f438}",fitzpatrick_scale:!1,category:"animals_and_nature"},squid:{keywords:["animal","nature","ocean","sea"],char:"\u{1f991}",fitzpatrick_scale:!1,category:"animals_and_nature"},octopus:{keywords:["animal","creature","ocean","sea","nature","beach"],char:"\u{1f419}",fitzpatrick_scale:!1,category:"animals_and_nature"},shrimp:{keywords:["animal","ocean","nature","seafood"],char:"\u{1f990}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey_face:{keywords:["animal","nature","circus"],char:"\u{1f435}",fitzpatrick_scale:!1,category:"animals_and_nature"},gorilla:{keywords:["animal","nature","circus"],char:"\u{1f98d}",fitzpatrick_scale:!1,category:"animals_and_nature"},see_no_evil:{keywords:["monkey","animal","nature","haha"],char:"\u{1f648}",fitzpatrick_scale:!1,category:"animals_and_nature"},hear_no_evil:{keywords:["animal","monkey","nature"],char:"\u{1f649}",fitzpatrick_scale:!1,category:"animals_and_nature"},speak_no_evil:{keywords:["monkey","animal","nature","omg"],char:"\u{1f64a}",fitzpatrick_scale:!1,category:"animals_and_nature"},monkey:{keywords:["animal","nature","banana","circus"],char:"\u{1f412}",fitzpatrick_scale:!1,category:"animals_and_nature"},chicken:{keywords:["animal","cluck","nature","bird"],char:"\u{1f414}",fitzpatrick_scale:!1,category:"animals_and_nature"},penguin:{keywords:["animal","nature"],char:"\u{1f427}",fitzpatrick_scale:!1,category:"animals_and_nature"},bird:{keywords:["animal","nature","fly","tweet","spring"],char:"\u{1f426}",fitzpatrick_scale:!1,category:"animals_and_nature"},baby_chick:{keywords:["animal","chicken","bird"],char:"\u{1f424}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatching_chick:{keywords:["animal","chicken","egg","born","baby","bird"],char:"\u{1f423}",fitzpatrick_scale:!1,category:"animals_and_nature"},hatched_chick:{keywords:["animal","chicken","baby","bird"],char:"\u{1f425}",fitzpatrick_scale:!1,category:"animals_and_nature"},duck:{keywords:["animal","nature","bird","mallard"],char:"\u{1f986}",fitzpatrick_scale:!1,category:"animals_and_nature"},eagle:{keywords:["animal","nature","bird"],char:"\u{1f985}",fitzpatrick_scale:!1,category:"animals_and_nature"},owl:{keywords:["animal","nature","bird","hoot"],char:"\u{1f989}",fitzpatrick_scale:!1,category:"animals_and_nature"},bat:{keywords:["animal","nature","blind","vampire"],char:"\u{1f987}",fitzpatrick_scale:!1,category:"animals_and_nature"},wolf:{keywords:["animal","nature","wild"],char:"\u{1f43a}",fitzpatrick_scale:!1,category:"animals_and_nature"},boar:{keywords:["animal","nature"],char:"\u{1f417}",fitzpatrick_scale:!1,category:"animals_and_nature"},horse:{keywords:["animal","brown","nature"],char:"\u{1f434}",fitzpatrick_scale:!1,category:"animals_and_nature"},unicorn:{keywords:["animal","nature","mystical"],char:"\u{1f984}",fitzpatrick_scale:!1,category:"animals_and_nature"},honeybee:{keywords:["animal","insect","nature","bug","spring","honey"],char:"\u{1f41d}",fitzpatrick_scale:!1,category:"animals_and_nature"},bug:{keywords:["animal","insect","nature","worm"],char:"\u{1f41b}",fitzpatrick_scale:!1,category:"animals_and_nature"},butterfly:{keywords:["animal","insect","nature","caterpillar"],char:"\u{1f98b}",fitzpatrick_scale:!1,category:"animals_and_nature"},snail:{keywords:["slow","animal","shell"],char:"\u{1f40c}",fitzpatrick_scale:!1,category:"animals_and_nature"},beetle:{keywords:["animal","insect","nature","ladybug"],char:"\u{1f41e}",fitzpatrick_scale:!1,category:"animals_and_nature"},ant:{keywords:["animal","insect","nature","bug"],char:"\u{1f41c}",fitzpatrick_scale:!1,category:"animals_and_nature"},grasshopper:{keywords:["animal","cricket","chirp"],char:"\u{1f997}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider:{keywords:["animal","arachnid"],char:"\u{1f577}",fitzpatrick_scale:!1,category:"animals_and_nature"},scorpion:{keywords:["animal","arachnid"],char:"\u{1f982}",fitzpatrick_scale:!1,category:"animals_and_nature"},crab:{keywords:["animal","crustacean"],char:"\u{1f980}",fitzpatrick_scale:!1,category:"animals_and_nature"},snake:{keywords:["animal","evil","nature","hiss","python"],char:"\u{1f40d}",fitzpatrick_scale:!1,category:"animals_and_nature"},lizard:{keywords:["animal","nature","reptile"],char:"\u{1f98e}",fitzpatrick_scale:!1,category:"animals_and_nature"},"t-rex":{keywords:["animal","nature","dinosaur","tyrannosaurus","extinct"],char:"\u{1f996}",fitzpatrick_scale:!1,category:"animals_and_nature"},sauropod:{keywords:["animal","nature","dinosaur","brachiosaurus","brontosaurus","diplodocus","extinct"],char:"\u{1f995}",fitzpatrick_scale:!1,category:"animals_and_nature"},turtle:{keywords:["animal","slow","nature","tortoise"],char:"\u{1f422}",fitzpatrick_scale:!1,category:"animals_and_nature"},tropical_fish:{keywords:["animal","swim","ocean","beach","nemo"],char:"\u{1f420}",fitzpatrick_scale:!1,category:"animals_and_nature"},fish:{keywords:["animal","food","nature"],char:"\u{1f41f}",fitzpatrick_scale:!1,category:"animals_and_nature"},blowfish:{keywords:["animal","nature","food","sea","ocean"],char:"\u{1f421}",fitzpatrick_scale:!1,category:"animals_and_nature"},dolphin:{keywords:["animal","nature","fish","sea","ocean","flipper","fins","beach"],char:"\u{1f42c}",fitzpatrick_scale:!1,category:"animals_and_nature"},shark:{keywords:["animal","nature","fish","sea","ocean","jaws","fins","beach"],char:"\u{1f988}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale:{keywords:["animal","nature","sea","ocean"],char:"\u{1f433}",fitzpatrick_scale:!1,category:"animals_and_nature"},whale2:{keywords:["animal","nature","sea","ocean"],char:"\u{1f40b}",fitzpatrick_scale:!1,category:"animals_and_nature"},crocodile:{keywords:["animal","nature","reptile","lizard","alligator"],char:"\u{1f40a}",fitzpatrick_scale:!1,category:"animals_and_nature"},leopard:{keywords:["animal","nature"],char:"\u{1f406}",fitzpatrick_scale:!1,category:"animals_and_nature"},zebra:{keywords:["animal","nature","stripes","safari"],char:"\u{1f993}",fitzpatrick_scale:!1,category:"animals_and_nature"},tiger2:{keywords:["animal","nature","roar"],char:"\u{1f405}",fitzpatrick_scale:!1,category:"animals_and_nature"},water_buffalo:{keywords:["animal","nature","ox","cow"],char:"\u{1f403}",fitzpatrick_scale:!1,category:"animals_and_nature"},ox:{keywords:["animal","cow","beef"],char:"\u{1f402}",fitzpatrick_scale:!1,category:"animals_and_nature"},cow2:{keywords:["beef","ox","animal","nature","moo","milk"],char:"\u{1f404}",fitzpatrick_scale:!1,category:"animals_and_nature"},deer:{keywords:["animal","nature","horns","venison"],char:"\u{1f98c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dromedary_camel:{keywords:["animal","hot","desert","hump"],char:"\u{1f42a}",fitzpatrick_scale:!1,category:"animals_and_nature"},camel:{keywords:["animal","nature","hot","desert","hump"],char:"\u{1f42b}",fitzpatrick_scale:!1,category:"animals_and_nature"},giraffe:{keywords:["animal","nature","spots","safari"],char:"\u{1f992}",fitzpatrick_scale:!1,category:"animals_and_nature"},elephant:{keywords:["animal","nature","nose","th","circus"],char:"\u{1f418}",fitzpatrick_scale:!1,category:"animals_and_nature"},rhinoceros:{keywords:["animal","nature","horn"],char:"\u{1f98f}",fitzpatrick_scale:!1,category:"animals_and_nature"},goat:{keywords:["animal","nature"],char:"\u{1f410}",fitzpatrick_scale:!1,category:"animals_and_nature"},ram:{keywords:["animal","sheep","nature"],char:"\u{1f40f}",fitzpatrick_scale:!1,category:"animals_and_nature"},sheep:{keywords:["animal","nature","wool","shipit"],char:"\u{1f411}",fitzpatrick_scale:!1,category:"animals_and_nature"},racehorse:{keywords:["animal","gamble","luck"],char:"\u{1f40e}",fitzpatrick_scale:!1,category:"animals_and_nature"},pig2:{keywords:["animal","nature"],char:"\u{1f416}",fitzpatrick_scale:!1,category:"animals_and_nature"},rat:{keywords:["animal","mouse","rodent"],char:"\u{1f400}",fitzpatrick_scale:!1,category:"animals_and_nature"},mouse2:{keywords:["animal","nature","rodent"],char:"\u{1f401}",fitzpatrick_scale:!1,category:"animals_and_nature"},rooster:{keywords:["animal","nature","chicken"],char:"\u{1f413}",fitzpatrick_scale:!1,category:"animals_and_nature"},turkey:{keywords:["animal","bird"],char:"\u{1f983}",fitzpatrick_scale:!1,category:"animals_and_nature"},dove:{keywords:["animal","bird"],char:"\u{1f54a}",fitzpatrick_scale:!1,category:"animals_and_nature"},dog2:{keywords:["animal","nature","friend","doge","pet","faithful"],char:"\u{1f415}",fitzpatrick_scale:!1,category:"animals_and_nature"},poodle:{keywords:["dog","animal","101","nature","pet"],char:"\u{1f429}",fitzpatrick_scale:!1,category:"animals_and_nature"},cat2:{keywords:["animal","meow","pet","cats"],char:"\u{1f408}",fitzpatrick_scale:!1,category:"animals_and_nature"},rabbit2:{keywords:["animal","nature","pet","magic","spring"],char:"\u{1f407}",fitzpatrick_scale:!1,category:"animals_and_nature"},chipmunk:{keywords:["animal","nature","rodent","squirrel"],char:"\u{1f43f}",fitzpatrick_scale:!1,category:"animals_and_nature"},hedgehog:{keywords:["animal","nature","spiny"],char:"\u{1f994}",fitzpatrick_scale:!1,category:"animals_and_nature"},raccoon:{keywords:["animal","nature"],char:"\u{1f99d}",fitzpatrick_scale:!1,category:"animals_and_nature"},llama:{keywords:["animal","nature","alpaca"],char:"\u{1f999}",fitzpatrick_scale:!1,category:"animals_and_nature"},hippopotamus:{keywords:["animal","nature"],char:"\u{1f99b}",fitzpatrick_scale:!1,category:"animals_and_nature"},kangaroo:{keywords:["animal","nature","australia","joey","hop","marsupial"],char:"\u{1f998}",fitzpatrick_scale:!1,category:"animals_and_nature"},badger:{keywords:["animal","nature","honey"],char:"\u{1f9a1}",fitzpatrick_scale:!1,category:"animals_and_nature"},swan:{keywords:["animal","nature","bird"],char:"\u{1f9a2}",fitzpatrick_scale:!1,category:"animals_and_nature"},peacock:{keywords:["animal","nature","peahen","bird"],char:"\u{1f99a}",fitzpatrick_scale:!1,category:"animals_and_nature"},parrot:{keywords:["animal","nature","bird","pirate","talk"],char:"\u{1f99c}",fitzpatrick_scale:!1,category:"animals_and_nature"},lobster:{keywords:["animal","nature","bisque","claws","seafood"],char:"\u{1f99e}",fitzpatrick_scale:!1,category:"animals_and_nature"},mosquito:{keywords:["animal","nature","insect","malaria"],char:"\u{1f99f}",fitzpatrick_scale:!1,category:"animals_and_nature"},paw_prints:{keywords:["animal","tracking","footprints","dog","cat","pet","feet"],char:"\u{1f43e}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f409}",fitzpatrick_scale:!1,category:"animals_and_nature"},dragon_face:{keywords:["animal","myth","nature","chinese","green"],char:"\u{1f432}",fitzpatrick_scale:!1,category:"animals_and_nature"},cactus:{keywords:["vegetable","plant","nature"],char:"\u{1f335}",fitzpatrick_scale:!1,category:"animals_and_nature"},christmas_tree:{keywords:["festival","vacation","december","xmas","celebration"],char:"\u{1f384}",fitzpatrick_scale:!1,category:"animals_and_nature"},evergreen_tree:{keywords:["plant","nature"],char:"\u{1f332}",fitzpatrick_scale:!1,category:"animals_and_nature"},deciduous_tree:{keywords:["plant","nature"],char:"\u{1f333}",fitzpatrick_scale:!1,category:"animals_and_nature"},palm_tree:{keywords:["plant","vegetable","nature","summer","beach","mojito","tropical"],char:"\u{1f334}",fitzpatrick_scale:!1,category:"animals_and_nature"},seedling:{keywords:["plant","nature","grass","lawn","spring"],char:"\u{1f331}",fitzpatrick_scale:!1,category:"animals_and_nature"},herb:{keywords:["vegetable","plant","medicine","weed","grass","lawn"],char:"\u{1f33f}",fitzpatrick_scale:!1,category:"animals_and_nature"},shamrock:{keywords:["vegetable","plant","nature","irish","clover"],char:"\u2618",fitzpatrick_scale:!1,category:"animals_and_nature"},four_leaf_clover:{keywords:["vegetable","plant","nature","lucky","irish"],char:"\u{1f340}",fitzpatrick_scale:!1,category:"animals_and_nature"},bamboo:{keywords:["plant","nature","vegetable","panda","pine_decoration"],char:"\u{1f38d}",fitzpatrick_scale:!1,category:"animals_and_nature"},tanabata_tree:{keywords:["plant","nature","branch","summer"],char:"\u{1f38b}",fitzpatrick_scale:!1,category:"animals_and_nature"},leaves:{keywords:["nature","plant","tree","vegetable","grass","lawn","spring"],char:"\u{1f343}",fitzpatrick_scale:!1,category:"animals_and_nature"},fallen_leaf:{keywords:["nature","plant","vegetable","leaves"],char:"\u{1f342}",fitzpatrick_scale:!1,category:"animals_and_nature"},maple_leaf:{keywords:["nature","plant","vegetable","ca","fall"],char:"\u{1f341}",fitzpatrick_scale:!1,category:"animals_and_nature"},ear_of_rice:{keywords:["nature","plant"],char:"\u{1f33e}",fitzpatrick_scale:!1,category:"animals_and_nature"},hibiscus:{keywords:["plant","vegetable","flowers","beach"],char:"\u{1f33a}",fitzpatrick_scale:!1,category:"animals_and_nature"},sunflower:{keywords:["nature","plant","fall"],char:"\u{1f33b}",fitzpatrick_scale:!1,category:"animals_and_nature"},rose:{keywords:["flowers","valentines","love","spring"],char:"\u{1f339}",fitzpatrick_scale:!1,category:"animals_and_nature"},wilted_flower:{keywords:["plant","nature","flower"],char:"\u{1f940}",fitzpatrick_scale:!1,category:"animals_and_nature"},tulip:{keywords:["flowers","plant","nature","summer","spring"],char:"\u{1f337}",fitzpatrick_scale:!1,category:"animals_and_nature"},blossom:{keywords:["nature","flowers","yellow"],char:"\u{1f33c}",fitzpatrick_scale:!1,category:"animals_and_nature"},cherry_blossom:{keywords:["nature","plant","spring","flower"],char:"\u{1f338}",fitzpatrick_scale:!1,category:"animals_and_nature"},bouquet:{keywords:["flowers","nature","spring"],char:"\u{1f490}",fitzpatrick_scale:!1,category:"animals_and_nature"},mushroom:{keywords:["plant","vegetable"],char:"\u{1f344}",fitzpatrick_scale:!1,category:"animals_and_nature"},chestnut:{keywords:["food","squirrel"],char:"\u{1f330}",fitzpatrick_scale:!1,category:"animals_and_nature"},jack_o_lantern:{keywords:["halloween","light","pumpkin","creepy","fall"],char:"\u{1f383}",fitzpatrick_scale:!1,category:"animals_and_nature"},shell:{keywords:["nature","sea","beach"],char:"\u{1f41a}",fitzpatrick_scale:!1,category:"animals_and_nature"},spider_web:{keywords:["animal","insect","arachnid","silk"],char:"\u{1f578}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_americas:{keywords:["globe","world","USA","international"],char:"\u{1f30e}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_africa:{keywords:["globe","world","international"],char:"\u{1f30d}",fitzpatrick_scale:!1,category:"animals_and_nature"},earth_asia:{keywords:["globe","world","east","international"],char:"\u{1f30f}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon:{keywords:["nature","yellow","twilight","planet","space","night","evening","sleep"],char:"\u{1f315}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_gibbous_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep","waxing_gibbous_moon"],char:"\u{1f316}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f317}",fitzpatrick_scale:!1,category:"animals_and_nature"},waning_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f318}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f311}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_crescent_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f312}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f313}",fitzpatrick_scale:!1,category:"animals_and_nature"},waxing_gibbous_moon:{keywords:["nature","night","sky","gray","twilight","planet","space","evening","sleep"],char:"\u{1f314}",fitzpatrick_scale:!1,category:"animals_and_nature"},new_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31a}",fitzpatrick_scale:!1,category:"animals_and_nature"},full_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31d}",fitzpatrick_scale:!1,category:"animals_and_nature"},first_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31b}",fitzpatrick_scale:!1,category:"animals_and_nature"},last_quarter_moon_with_face:{keywords:["nature","twilight","planet","space","night","evening","sleep"],char:"\u{1f31c}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_with_face:{keywords:["nature","morning","sky"],char:"\u{1f31e}",fitzpatrick_scale:!1,category:"animals_and_nature"},crescent_moon:{keywords:["night","sleep","sky","evening","magic"],char:"\u{1f319}",fitzpatrick_scale:!1,category:"animals_and_nature"},star:{keywords:["night","yellow"],char:"\u2b50",fitzpatrick_scale:!1,category:"animals_and_nature"},star2:{keywords:["night","sparkle","awesome","good","magic"],char:"\u{1f31f}",fitzpatrick_scale:!1,category:"animals_and_nature"},dizzy:{keywords:["star","sparkle","shoot","magic"],char:"\u{1f4ab}",fitzpatrick_scale:!1,category:"animals_and_nature"},sparkles:{keywords:["stars","shine","shiny","cool","awesome","good","magic"],char:"\u2728",fitzpatrick_scale:!1,category:"animals_and_nature"},comet:{keywords:["space"],char:"\u2604",fitzpatrick_scale:!1,category:"animals_and_nature"},sunny:{keywords:["weather","nature","brightness","summer","beach","spring"],char:"\u2600\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_small_cloud:{keywords:["weather"],char:"\u{1f324}",fitzpatrick_scale:!1,category:"animals_and_nature"},partly_sunny:{keywords:["weather","nature","cloudy","morning","fall","spring"],char:"\u26c5",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_large_cloud:{keywords:["weather"],char:"\u{1f325}",fitzpatrick_scale:!1,category:"animals_and_nature"},sun_behind_rain_cloud:{keywords:["weather"],char:"\u{1f326}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud:{keywords:["weather","sky"],char:"\u2601\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_rain:{keywords:["weather"],char:"\u{1f327}",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning_and_rain:{keywords:["weather","lightning"],char:"\u26c8",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_lightning:{keywords:["weather","thunder"],char:"\u{1f329}",fitzpatrick_scale:!1,category:"animals_and_nature"},zap:{keywords:["thunder","weather","lightning bolt","fast"],char:"\u26a1",fitzpatrick_scale:!1,category:"animals_and_nature"},fire:{keywords:["hot","cook","flame"],char:"\u{1f525}",fitzpatrick_scale:!1,category:"animals_and_nature"},boom:{keywords:["bomb","explode","explosion","collision","blown"],char:"\u{1f4a5}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowflake:{keywords:["winter","season","cold","weather","christmas","xmas"],char:"\u2744\ufe0f",fitzpatrick_scale:!1,category:"animals_and_nature"},cloud_with_snow:{keywords:["weather"],char:"\u{1f328}",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman:{keywords:["winter","season","cold","weather","christmas","xmas","frozen","without_snow"],char:"\u26c4",fitzpatrick_scale:!1,category:"animals_and_nature"},snowman_with_snow:{keywords:["winter","season","cold","weather","christmas","xmas","frozen"],char:"\u2603",fitzpatrick_scale:!1,category:"animals_and_nature"},wind_face:{keywords:["gust","air"],char:"\u{1f32c}",fitzpatrick_scale:!1,category:"animals_and_nature"},dash:{keywords:["wind","air","fast","shoo","fart","smoke","puff"],char:"\u{1f4a8}",fitzpatrick_scale:!1,category:"animals_and_nature"},tornado:{keywords:["weather","cyclone","twister"],char:"\u{1f32a}",fitzpatrick_scale:!1,category:"animals_and_nature"},fog:{keywords:["weather"],char:"\u{1f32b}",fitzpatrick_scale:!1,category:"animals_and_nature"},open_umbrella:{keywords:["weather","spring"],char:"\u2602",fitzpatrick_scale:!1,category:"animals_and_nature"},umbrella:{keywords:["rainy","weather","spring"],char:"\u2614",fitzpatrick_scale:!1,category:"animals_and_nature"},droplet:{keywords:["water","drip","faucet","spring"],char:"\u{1f4a7}",fitzpatrick_scale:!1,category:"animals_and_nature"},sweat_drops:{keywords:["water","drip","oops"],char:"\u{1f4a6}",fitzpatrick_scale:!1,category:"animals_and_nature"},ocean:{keywords:["sea","water","wave","nature","tsunami","disaster"],char:"\u{1f30a}",fitzpatrick_scale:!1,category:"animals_and_nature"},green_apple:{keywords:["fruit","nature"],char:"\u{1f34f}",fitzpatrick_scale:!1,category:"food_and_drink"},apple:{keywords:["fruit","mac","school"],char:"\u{1f34e}",fitzpatrick_scale:!1,category:"food_and_drink"},pear:{keywords:["fruit","nature","food"],char:"\u{1f350}",fitzpatrick_scale:!1,category:"food_and_drink"},tangerine:{keywords:["food","fruit","nature","orange"],char:"\u{1f34a}",fitzpatrick_scale:!1,category:"food_and_drink"},lemon:{keywords:["fruit","nature"],char:"\u{1f34b}",fitzpatrick_scale:!1,category:"food_and_drink"},banana:{keywords:["fruit","food","monkey"],char:"\u{1f34c}",fitzpatrick_scale:!1,category:"food_and_drink"},watermelon:{keywords:["fruit","food","picnic","summer"],char:"\u{1f349}",fitzpatrick_scale:!1,category:"food_and_drink"},grapes:{keywords:["fruit","food","wine"],char:"\u{1f347}",fitzpatrick_scale:!1,category:"food_and_drink"},strawberry:{keywords:["fruit","food","nature"],char:"\u{1f353}",fitzpatrick_scale:!1,category:"food_and_drink"},melon:{keywords:["fruit","nature","food"],char:"\u{1f348}",fitzpatrick_scale:!1,category:"food_and_drink"},cherries:{keywords:["food","fruit"],char:"\u{1f352}",fitzpatrick_scale:!1,category:"food_and_drink"},peach:{keywords:["fruit","nature","food"],char:"\u{1f351}",fitzpatrick_scale:!1,category:"food_and_drink"},pineapple:{keywords:["fruit","nature","food"],char:"\u{1f34d}",fitzpatrick_scale:!1,category:"food_and_drink"},coconut:{keywords:["fruit","nature","food","palm"],char:"\u{1f965}",fitzpatrick_scale:!1,category:"food_and_drink"},kiwi_fruit:{keywords:["fruit","food"],char:"\u{1f95d}",fitzpatrick_scale:!1,category:"food_and_drink"},mango:{keywords:["fruit","food","tropical"],char:"\u{1f96d}",fitzpatrick_scale:!1,category:"food_and_drink"},avocado:{keywords:["fruit","food"],char:"\u{1f951}",fitzpatrick_scale:!1,category:"food_and_drink"},broccoli:{keywords:["fruit","food","vegetable"],char:"\u{1f966}",fitzpatrick_scale:!1,category:"food_and_drink"},tomato:{keywords:["fruit","vegetable","nature","food"],char:"\u{1f345}",fitzpatrick_scale:!1,category:"food_and_drink"},eggplant:{keywords:["vegetable","nature","food","aubergine"],char:"\u{1f346}",fitzpatrick_scale:!1,category:"food_and_drink"},cucumber:{keywords:["fruit","food","pickle"],char:"\u{1f952}",fitzpatrick_scale:!1,category:"food_and_drink"},carrot:{keywords:["vegetable","food","orange"],char:"\u{1f955}",fitzpatrick_scale:!1,category:"food_and_drink"},hot_pepper:{keywords:["food","spicy","chilli","chili"],char:"\u{1f336}",fitzpatrick_scale:!1,category:"food_and_drink"},potato:{keywords:["food","tuber","vegatable","starch"],char:"\u{1f954}",fitzpatrick_scale:!1,category:"food_and_drink"},corn:{keywords:["food","vegetable","plant"],char:"\u{1f33d}",fitzpatrick_scale:!1,category:"food_and_drink"},leafy_greens:{keywords:["food","vegetable","plant","bok choy","cabbage","kale","lettuce"],char:"\u{1f96c}",fitzpatrick_scale:!1,category:"food_and_drink"},sweet_potato:{keywords:["food","nature"],char:"\u{1f360}",fitzpatrick_scale:!1,category:"food_and_drink"},peanuts:{keywords:["food","nut"],char:"\u{1f95c}",fitzpatrick_scale:!1,category:"food_and_drink"},honey_pot:{keywords:["bees","sweet","kitchen"],char:"\u{1f36f}",fitzpatrick_scale:!1,category:"food_and_drink"},croissant:{keywords:["food","bread","french"],char:"\u{1f950}",fitzpatrick_scale:!1,category:"food_and_drink"},bread:{keywords:["food","wheat","breakfast","toast"],char:"\u{1f35e}",fitzpatrick_scale:!1,category:"food_and_drink"},baguette_bread:{keywords:["food","bread","french"],char:"\u{1f956}",fitzpatrick_scale:!1,category:"food_and_drink"},bagel:{keywords:["food","bread","bakery","schmear"],char:"\u{1f96f}",fitzpatrick_scale:!1,category:"food_and_drink"},pretzel:{keywords:["food","bread","twisted"],char:"\u{1f968}",fitzpatrick_scale:!1,category:"food_and_drink"},cheese:{keywords:["food","chadder"],char:"\u{1f9c0}",fitzpatrick_scale:!1,category:"food_and_drink"},egg:{keywords:["food","chicken","breakfast"],char:"\u{1f95a}",fitzpatrick_scale:!1,category:"food_and_drink"},bacon:{keywords:["food","breakfast","pork","pig","meat"],char:"\u{1f953}",fitzpatrick_scale:!1,category:"food_and_drink"},steak:{keywords:["food","cow","meat","cut","chop","lambchop","porkchop"],char:"\u{1f969}",fitzpatrick_scale:!1,category:"food_and_drink"},pancakes:{keywords:["food","breakfast","flapjacks","hotcakes"],char:"\u{1f95e}",fitzpatrick_scale:!1,category:"food_and_drink"},poultry_leg:{keywords:["food","meat","drumstick","bird","chicken","turkey"],char:"\u{1f357}",fitzpatrick_scale:!1,category:"food_and_drink"},meat_on_bone:{keywords:["good","food","drumstick"],char:"\u{1f356}",fitzpatrick_scale:!1,category:"food_and_drink"},bone:{keywords:["skeleton"],char:"\u{1f9b4}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_shrimp:{keywords:["food","animal","appetizer","summer"],char:"\u{1f364}",fitzpatrick_scale:!1,category:"food_and_drink"},fried_egg:{keywords:["food","breakfast","kitchen","egg"],char:"\u{1f373}",fitzpatrick_scale:!1,category:"food_and_drink"},hamburger:{keywords:["meat","fast food","beef","cheeseburger","mcdonalds","burger king"],char:"\u{1f354}",fitzpatrick_scale:!1,category:"food_and_drink"},fries:{keywords:["chips","snack","fast food"],char:"\u{1f35f}",fitzpatrick_scale:!1,category:"food_and_drink"},stuffed_flatbread:{keywords:["food","flatbread","stuffed","gyro"],char:"\u{1f959}",fitzpatrick_scale:!1,category:"food_and_drink"},hotdog:{keywords:["food","frankfurter"],char:"\u{1f32d}",fitzpatrick_scale:!1,category:"food_and_drink"},pizza:{keywords:["food","party"],char:"\u{1f355}",fitzpatrick_scale:!1,category:"food_and_drink"},sandwich:{keywords:["food","lunch","bread"],char:"\u{1f96a}",fitzpatrick_scale:!1,category:"food_and_drink"},canned_food:{keywords:["food","soup"],char:"\u{1f96b}",fitzpatrick_scale:!1,category:"food_and_drink"},spaghetti:{keywords:["food","italian","noodle"],char:"\u{1f35d}",fitzpatrick_scale:!1,category:"food_and_drink"},taco:{keywords:["food","mexican"],char:"\u{1f32e}",fitzpatrick_scale:!1,category:"food_and_drink"},burrito:{keywords:["food","mexican"],char:"\u{1f32f}",fitzpatrick_scale:!1,category:"food_and_drink"},green_salad:{keywords:["food","healthy","lettuce"],char:"\u{1f957}",fitzpatrick_scale:!1,category:"food_and_drink"},shallow_pan_of_food:{keywords:["food","cooking","casserole","paella"],char:"\u{1f958}",fitzpatrick_scale:!1,category:"food_and_drink"},ramen:{keywords:["food","japanese","noodle","chopsticks"],char:"\u{1f35c}",fitzpatrick_scale:!1,category:"food_and_drink"},stew:{keywords:["food","meat","soup"],char:"\u{1f372}",fitzpatrick_scale:!1,category:"food_and_drink"},fish_cake:{keywords:["food","japan","sea","beach","narutomaki","pink","swirl","kamaboko","surimi","ramen"],char:"\u{1f365}",fitzpatrick_scale:!1,category:"food_and_drink"},fortune_cookie:{keywords:["food","prophecy"],char:"\u{1f960}",fitzpatrick_scale:!1,category:"food_and_drink"},sushi:{keywords:["food","fish","japanese","rice"],char:"\u{1f363}",fitzpatrick_scale:!1,category:"food_and_drink"},bento:{keywords:["food","japanese","box"],char:"\u{1f371}",fitzpatrick_scale:!1,category:"food_and_drink"},curry:{keywords:["food","spicy","hot","indian"],char:"\u{1f35b}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_ball:{keywords:["food","japanese"],char:"\u{1f359}",fitzpatrick_scale:!1,category:"food_and_drink"},rice:{keywords:["food","china","asian"],char:"\u{1f35a}",fitzpatrick_scale:!1,category:"food_and_drink"},rice_cracker:{keywords:["food","japanese"],char:"\u{1f358}",fitzpatrick_scale:!1,category:"food_and_drink"},oden:{keywords:["food","japanese"],char:"\u{1f362}",fitzpatrick_scale:!1,category:"food_and_drink"},dango:{keywords:["food","dessert","sweet","japanese","barbecue","meat"],char:"\u{1f361}",fitzpatrick_scale:!1,category:"food_and_drink"},shaved_ice:{keywords:["hot","dessert","summer"],char:"\u{1f367}",fitzpatrick_scale:!1,category:"food_and_drink"},ice_cream:{keywords:["food","hot","dessert"],char:"\u{1f368}",fitzpatrick_scale:!1,category:"food_and_drink"},icecream:{keywords:["food","hot","dessert","summer"],char:"\u{1f366}",fitzpatrick_scale:!1,category:"food_and_drink"},pie:{keywords:["food","dessert","pastry"],char:"\u{1f967}",fitzpatrick_scale:!1,category:"food_and_drink"},cake:{keywords:["food","dessert"],char:"\u{1f370}",fitzpatrick_scale:!1,category:"food_and_drink"},cupcake:{keywords:["food","dessert","bakery","sweet"],char:"\u{1f9c1}",fitzpatrick_scale:!1,category:"food_and_drink"},moon_cake:{keywords:["food","autumn"],char:"\u{1f96e}",fitzpatrick_scale:!1,category:"food_and_drink"},birthday:{keywords:["food","dessert","cake"],char:"\u{1f382}",fitzpatrick_scale:!1,category:"food_and_drink"},custard:{keywords:["dessert","food"],char:"\u{1f36e}",fitzpatrick_scale:!1,category:"food_and_drink"},candy:{keywords:["snack","dessert","sweet","lolly"],char:"\u{1f36c}",fitzpatrick_scale:!1,category:"food_and_drink"},lollipop:{keywords:["food","snack","candy","sweet"],char:"\u{1f36d}",fitzpatrick_scale:!1,category:"food_and_drink"},chocolate_bar:{keywords:["food","snack","dessert","sweet"],char:"\u{1f36b}",fitzpatrick_scale:!1,category:"food_and_drink"},popcorn:{keywords:["food","movie theater","films","snack"],char:"\u{1f37f}",fitzpatrick_scale:!1,category:"food_and_drink"},dumpling:{keywords:["food","empanada","pierogi","potsticker"],char:"\u{1f95f}",fitzpatrick_scale:!1,category:"food_and_drink"},doughnut:{keywords:["food","dessert","snack","sweet","donut"],char:"\u{1f369}",fitzpatrick_scale:!1,category:"food_and_drink"},cookie:{keywords:["food","snack","oreo","chocolate","sweet","dessert"],char:"\u{1f36a}",fitzpatrick_scale:!1,category:"food_and_drink"},milk_glass:{keywords:["beverage","drink","cow"],char:"\u{1f95b}",fitzpatrick_scale:!1,category:"food_and_drink"},beer:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37a}",fitzpatrick_scale:!1,category:"food_and_drink"},beers:{keywords:["relax","beverage","drink","drunk","party","pub","summer","alcohol","booze"],char:"\u{1f37b}",fitzpatrick_scale:!1,category:"food_and_drink"},clinking_glasses:{keywords:["beverage","drink","party","alcohol","celebrate","cheers","wine","champagne","toast"],char:"\u{1f942}",fitzpatrick_scale:!1,category:"food_and_drink"},wine_glass:{keywords:["drink","beverage","drunk","alcohol","booze"],char:"\u{1f377}",fitzpatrick_scale:!1,category:"food_and_drink"},tumbler_glass:{keywords:["drink","beverage","drunk","alcohol","liquor","booze","bourbon","scotch","whisky","glass","shot"],char:"\u{1f943}",fitzpatrick_scale:!1,category:"food_and_drink"},cocktail:{keywords:["drink","drunk","alcohol","beverage","booze","mojito"],char:"\u{1f378}",fitzpatrick_scale:!1,category:"food_and_drink"},tropical_drink:{keywords:["beverage","cocktail","summer","beach","alcohol","booze","mojito"],char:"\u{1f379}",fitzpatrick_scale:!1,category:"food_and_drink"},champagne:{keywords:["drink","wine","bottle","celebration"],char:"\u{1f37e}",fitzpatrick_scale:!1,category:"food_and_drink"},sake:{keywords:["wine","drink","drunk","beverage","japanese","alcohol","booze"],char:"\u{1f376}",fitzpatrick_scale:!1,category:"food_and_drink"},tea:{keywords:["drink","bowl","breakfast","green","british"],char:"\u{1f375}",fitzpatrick_scale:!1,category:"food_and_drink"},cup_with_straw:{keywords:["drink","soda"],char:"\u{1f964}",fitzpatrick_scale:!1,category:"food_and_drink"},coffee:{keywords:["beverage","caffeine","latte","espresso"],char:"\u2615",fitzpatrick_scale:!1,category:"food_and_drink"},baby_bottle:{keywords:["food","container","milk"],char:"\u{1f37c}",fitzpatrick_scale:!1,category:"food_and_drink"},salt:{keywords:["condiment","shaker"],char:"\u{1f9c2}",fitzpatrick_scale:!1,category:"food_and_drink"},spoon:{keywords:["cutlery","kitchen","tableware"],char:"\u{1f944}",fitzpatrick_scale:!1,category:"food_and_drink"},fork_and_knife:{keywords:["cutlery","kitchen"],char:"\u{1f374}",fitzpatrick_scale:!1,category:"food_and_drink"},plate_with_cutlery:{keywords:["food","eat","meal","lunch","dinner","restaurant"],char:"\u{1f37d}",fitzpatrick_scale:!1,category:"food_and_drink"},bowl_with_spoon:{keywords:["food","breakfast","cereal","oatmeal","porridge"],char:"\u{1f963}",fitzpatrick_scale:!1,category:"food_and_drink"},takeout_box:{keywords:["food","leftovers"],char:"\u{1f961}",fitzpatrick_scale:!1,category:"food_and_drink"},chopsticks:{keywords:["food"],char:"\u{1f962}",fitzpatrick_scale:!1,category:"food_and_drink"},soccer:{keywords:["sports","football"],char:"\u26bd",fitzpatrick_scale:!1,category:"activity"},basketball:{keywords:["sports","balls","NBA"],char:"\u{1f3c0}",fitzpatrick_scale:!1,category:"activity"},football:{keywords:["sports","balls","NFL"],char:"\u{1f3c8}",fitzpatrick_scale:!1,category:"activity"},baseball:{keywords:["sports","balls"],char:"\u26be",fitzpatrick_scale:!1,category:"activity"},softball:{keywords:["sports","balls"],char:"\u{1f94e}",fitzpatrick_scale:!1,category:"activity"},tennis:{keywords:["sports","balls","green"],char:"\u{1f3be}",fitzpatrick_scale:!1,category:"activity"},volleyball:{keywords:["sports","balls"],char:"\u{1f3d0}",fitzpatrick_scale:!1,category:"activity"},rugby_football:{keywords:["sports","team"],char:"\u{1f3c9}",fitzpatrick_scale:!1,category:"activity"},flying_disc:{keywords:["sports","frisbee","ultimate"],char:"\u{1f94f}",fitzpatrick_scale:!1,category:"activity"},"8ball":{keywords:["pool","hobby","game","luck","magic"],char:"\u{1f3b1}",fitzpatrick_scale:!1,category:"activity"},golf:{keywords:["sports","business","flag","hole","summer"],char:"\u26f3",fitzpatrick_scale:!1,category:"activity"},golfing_woman:{keywords:["sports","business","woman","female"],char:"\u{1f3cc}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},golfing_man:{keywords:["sports","business"],char:"\u{1f3cc}",fitzpatrick_scale:!0,category:"activity"},ping_pong:{keywords:["sports","pingpong"],char:"\u{1f3d3}",fitzpatrick_scale:!1,category:"activity"},badminton:{keywords:["sports"],char:"\u{1f3f8}",fitzpatrick_scale:!1,category:"activity"},goal_net:{keywords:["sports"],char:"\u{1f945}",fitzpatrick_scale:!1,category:"activity"},ice_hockey:{keywords:["sports"],char:"\u{1f3d2}",fitzpatrick_scale:!1,category:"activity"},field_hockey:{keywords:["sports"],char:"\u{1f3d1}",fitzpatrick_scale:!1,category:"activity"},lacrosse:{keywords:["sports","ball","stick"],char:"\u{1f94d}",fitzpatrick_scale:!1,category:"activity"},cricket:{keywords:["sports"],char:"\u{1f3cf}",fitzpatrick_scale:!1,category:"activity"},ski:{keywords:["sports","winter","cold","snow"],char:"\u{1f3bf}",fitzpatrick_scale:!1,category:"activity"},skier:{keywords:["sports","winter","snow"],char:"\u26f7",fitzpatrick_scale:!1,category:"activity"},snowboarder:{keywords:["sports","winter"],char:"\u{1f3c2}",fitzpatrick_scale:!0,category:"activity"},person_fencing:{keywords:["sports","fencing","sword"],char:"\u{1f93a}",fitzpatrick_scale:!1,category:"activity"},women_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2640\ufe0f",fitzpatrick_scale:!1,category:"activity"},men_wrestling:{keywords:["sports","wrestlers"],char:"\u{1f93c}\u200d\u2642\ufe0f",fitzpatrick_scale:!1,category:"activity"},woman_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_cartwheeling:{keywords:["gymnastics"],char:"\u{1f938}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_handball:{keywords:["sports"],char:"\u{1f93e}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},ice_skate:{keywords:["sports"],char:"\u26f8",fitzpatrick_scale:!1,category:"activity"},curling_stone:{keywords:["sports"],char:"\u{1f94c}",fitzpatrick_scale:!1,category:"activity"},skateboard:{keywords:["board"],char:"\u{1f6f9}",fitzpatrick_scale:!1,category:"activity"},sled:{keywords:["sleigh","luge","toboggan"],char:"\u{1f6f7}",fitzpatrick_scale:!1,category:"activity"},bow_and_arrow:{keywords:["sports"],char:"\u{1f3f9}",fitzpatrick_scale:!1,category:"activity"},fishing_pole_and_fish:{keywords:["food","hobby","summer"],char:"\u{1f3a3}",fitzpatrick_scale:!1,category:"activity"},boxing_glove:{keywords:["sports","fighting"],char:"\u{1f94a}",fitzpatrick_scale:!1,category:"activity"},martial_arts_uniform:{keywords:["judo","karate","taekwondo"],char:"\u{1f94b}",fitzpatrick_scale:!1,category:"activity"},rowing_woman:{keywords:["sports","hobby","water","ship","woman","female"],char:"\u{1f6a3}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},rowing_man:{keywords:["sports","hobby","water","ship"],char:"\u{1f6a3}",fitzpatrick_scale:!0,category:"activity"},climbing_woman:{keywords:["sports","hobby","woman","female","rock"],char:"\u{1f9d7}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},climbing_man:{keywords:["sports","hobby","man","male","rock"],char:"\u{1f9d7}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_woman:{keywords:["sports","exercise","human","athlete","water","summer","woman","female"],char:"\u{1f3ca}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},swimming_man:{keywords:["sports","exercise","human","athlete","water","summer"],char:"\u{1f3ca}",fitzpatrick_scale:!0,category:"activity"},woman_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_playing_water_polo:{keywords:["sports","pool"],char:"\u{1f93d}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},woman_in_lotus_position:{keywords:["woman","female","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_in_lotus_position:{keywords:["man","male","meditation","yoga","serenity","zen","mindfulness"],char:"\u{1f9d8}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_woman:{keywords:["sports","ocean","sea","summer","beach","woman","female"],char:"\u{1f3c4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},surfing_man:{keywords:["sports","ocean","sea","summer","beach"],char:"\u{1f3c4}",fitzpatrick_scale:!0,category:"activity"},bath:{keywords:["clean","shower","bathroom"],char:"\u{1f6c0}",fitzpatrick_scale:!0,category:"activity"},basketball_woman:{keywords:["sports","human","woman","female"],char:"\u26f9\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},basketball_man:{keywords:["sports","human"],char:"\u26f9",fitzpatrick_scale:!0,category:"activity"},weight_lifting_woman:{keywords:["sports","training","exercise","woman","female"],char:"\u{1f3cb}\ufe0f\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},weight_lifting_man:{keywords:["sports","training","exercise"],char:"\u{1f3cb}",fitzpatrick_scale:!0,category:"activity"},biking_woman:{keywords:["sports","bike","exercise","hipster","woman","female"],char:"\u{1f6b4}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},biking_man:{keywords:["sports","bike","exercise","hipster"],char:"\u{1f6b4}",fitzpatrick_scale:!0,category:"activity"},mountain_biking_woman:{keywords:["transportation","sports","human","race","bike","woman","female"],char:"\u{1f6b5}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},mountain_biking_man:{keywords:["transportation","sports","human","race","bike"],char:"\u{1f6b5}",fitzpatrick_scale:!0,category:"activity"},horse_racing:{keywords:["animal","betting","competition","gambling","luck"],char:"\u{1f3c7}",fitzpatrick_scale:!0,category:"activity"},business_suit_levitating:{keywords:["suit","business","levitate","hover","jump"],char:"\u{1f574}",fitzpatrick_scale:!0,category:"activity"},trophy:{keywords:["win","award","contest","place","ftw","ceremony"],char:"\u{1f3c6}",fitzpatrick_scale:!1,category:"activity"},running_shirt_with_sash:{keywords:["play","pageant"],char:"\u{1f3bd}",fitzpatrick_scale:!1,category:"activity"},medal_sports:{keywords:["award","winning"],char:"\u{1f3c5}",fitzpatrick_scale:!1,category:"activity"},medal_military:{keywords:["award","winning","army"],char:"\u{1f396}",fitzpatrick_scale:!1,category:"activity"},"1st_place_medal":{keywords:["award","winning","first"],char:"\u{1f947}",fitzpatrick_scale:!1,category:"activity"},"2nd_place_medal":{keywords:["award","second"],char:"\u{1f948}",fitzpatrick_scale:!1,category:"activity"},"3rd_place_medal":{keywords:["award","third"],char:"\u{1f949}",fitzpatrick_scale:!1,category:"activity"},reminder_ribbon:{keywords:["sports","cause","support","awareness"],char:"\u{1f397}",fitzpatrick_scale:!1,category:"activity"},rosette:{keywords:["flower","decoration","military"],char:"\u{1f3f5}",fitzpatrick_scale:!1,category:"activity"},ticket:{keywords:["event","concert","pass"],char:"\u{1f3ab}",fitzpatrick_scale:!1,category:"activity"},tickets:{keywords:["sports","concert","entrance"],char:"\u{1f39f}",fitzpatrick_scale:!1,category:"activity"},performing_arts:{keywords:["acting","theater","drama"],char:"\u{1f3ad}",fitzpatrick_scale:!1,category:"activity"},art:{keywords:["design","paint","draw","colors"],char:"\u{1f3a8}",fitzpatrick_scale:!1,category:"activity"},circus_tent:{keywords:["festival","carnival","party"],char:"\u{1f3aa}",fitzpatrick_scale:!1,category:"activity"},woman_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2640\ufe0f",fitzpatrick_scale:!0,category:"activity"},man_juggling:{keywords:["juggle","balance","skill","multitask"],char:"\u{1f939}\u200d\u2642\ufe0f",fitzpatrick_scale:!0,category:"activity"},microphone:{keywords:["sound","music","PA","sing","talkshow"],char:"\u{1f3a4}",fitzpatrick_scale:!1,category:"activity"},headphones:{keywords:["music","score","gadgets"],char:"\u{1f3a7}",fitzpatrick_scale:!1,category:"activity"},musical_score:{keywords:["treble","clef","compose"],char:"\u{1f3bc}",fitzpatrick_scale:!1,category:"activity"},musical_keyboard:{keywords:["piano","instrument","compose"],char:"\u{1f3b9}",fitzpatrick_scale:!1,category:"activity"},drum:{keywords:["music","instrument","drumsticks","snare"],char:"\u{1f941}",fitzpatrick_scale:!1,category:"activity"},saxophone:{keywords:["music","instrument","jazz","blues"],char:"\u{1f3b7}",fitzpatrick_scale:!1,category:"activity"},trumpet:{keywords:["music","brass"],char:"\u{1f3ba}",fitzpatrick_scale:!1,category:"activity"},guitar:{keywords:["music","instrument"],char:"\u{1f3b8}",fitzpatrick_scale:!1,category:"activity"},violin:{keywords:["music","instrument","orchestra","symphony"],char:"\u{1f3bb}",fitzpatrick_scale:!1,category:"activity"},clapper:{keywords:["movie","film","record"],char:"\u{1f3ac}",fitzpatrick_scale:!1,category:"activity"},video_game:{keywords:["play","console","PS4","controller"],char:"\u{1f3ae}",fitzpatrick_scale:!1,category:"activity"},space_invader:{keywords:["game","arcade","play"],char:"\u{1f47e}",fitzpatrick_scale:!1,category:"activity"},dart:{keywords:["game","play","bar","target","bullseye"],char:"\u{1f3af}",fitzpatrick_scale:!1,category:"activity"},game_die:{keywords:["dice","random","tabletop","play","luck"],char:"\u{1f3b2}",fitzpatrick_scale:!1,category:"activity"},chess_pawn:{keywords:["expendable"],char:"\u265f",fitzpatrick_scale:!1,category:"activity"},slot_machine:{keywords:["bet","gamble","vegas","fruit machine","luck","casino"],char:"\u{1f3b0}",fitzpatrick_scale:!1,category:"activity"},jigsaw:{keywords:["interlocking","puzzle","piece"],char:"\u{1f9e9}",fitzpatrick_scale:!1,category:"activity"},bowling:{keywords:["sports","fun","play"],char:"\u{1f3b3}",fitzpatrick_scale:!1,category:"activity"},red_car:{keywords:["red","transportation","vehicle"],char:"\u{1f697}",fitzpatrick_scale:!1,category:"travel_and_places"},taxi:{keywords:["uber","vehicle","cars","transportation"],char:"\u{1f695}",fitzpatrick_scale:!1,category:"travel_and_places"},blue_car:{keywords:["transportation","vehicle"],char:"\u{1f699}",fitzpatrick_scale:!1,category:"travel_and_places"},bus:{keywords:["car","vehicle","transportation"],char:"\u{1f68c}",fitzpatrick_scale:!1,category:"travel_and_places"},trolleybus:{keywords:["bart","transportation","vehicle"],char:"\u{1f68e}",fitzpatrick_scale:!1,category:"travel_and_places"},racing_car:{keywords:["sports","race","fast","formula","f1"],char:"\u{1f3ce}",fitzpatrick_scale:!1,category:"travel_and_places"},police_car:{keywords:["vehicle","cars","transportation","law","legal","enforcement"],char:"\u{1f693}",fitzpatrick_scale:!1,category:"travel_and_places"},ambulance:{keywords:["health","911","hospital"],char:"\u{1f691}",fitzpatrick_scale:!1,category:"travel_and_places"},fire_engine:{keywords:["transportation","cars","vehicle"],char:"\u{1f692}",fitzpatrick_scale:!1,category:"travel_and_places"},minibus:{keywords:["vehicle","car","transportation"],char:"\u{1f690}",fitzpatrick_scale:!1,category:"travel_and_places"},truck:{keywords:["cars","transportation"],char:"\u{1f69a}",fitzpatrick_scale:!1,category:"travel_and_places"},articulated_lorry:{keywords:["vehicle","cars","transportation","express"],char:"\u{1f69b}",fitzpatrick_scale:!1,category:"travel_and_places"},tractor:{keywords:["vehicle","car","farming","agriculture"],char:"\u{1f69c}",fitzpatrick_scale:!1,category:"travel_and_places"},kick_scooter:{keywords:["vehicle","kick","razor"],char:"\u{1f6f4}",fitzpatrick_scale:!1,category:"travel_and_places"},motorcycle:{keywords:["race","sports","fast"],char:"\u{1f3cd}",fitzpatrick_scale:!1,category:"travel_and_places"},bike:{keywords:["sports","bicycle","exercise","hipster"],char:"\u{1f6b2}",fitzpatrick_scale:!1,category:"travel_and_places"},motor_scooter:{keywords:["vehicle","vespa","sasha"],char:"\u{1f6f5}",fitzpatrick_scale:!1,category:"travel_and_places"},rotating_light:{keywords:["police","ambulance","911","emergency","alert","error","pinged","law","legal"],char:"\u{1f6a8}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_police_car:{keywords:["vehicle","law","legal","enforcement","911"],char:"\u{1f694}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_bus:{keywords:["vehicle","transportation"],char:"\u{1f68d}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_automobile:{keywords:["car","vehicle","transportation"],char:"\u{1f698}",fitzpatrick_scale:!1,category:"travel_and_places"},oncoming_taxi:{keywords:["vehicle","cars","uber"],char:"\u{1f696}",fitzpatrick_scale:!1,category:"travel_and_places"},aerial_tramway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a1}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_cableway:{keywords:["transportation","vehicle","ski"],char:"\u{1f6a0}",fitzpatrick_scale:!1,category:"travel_and_places"},suspension_railway:{keywords:["vehicle","transportation"],char:"\u{1f69f}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_car:{keywords:["transportation","vehicle"],char:"\u{1f683}",fitzpatrick_scale:!1,category:"travel_and_places"},train:{keywords:["transportation","vehicle","carriage","public","travel"],char:"\u{1f68b}",fitzpatrick_scale:!1,category:"travel_and_places"},monorail:{keywords:["transportation","vehicle"],char:"\u{1f69d}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_side:{keywords:["transportation","vehicle"],char:"\u{1f684}",fitzpatrick_scale:!1,category:"travel_and_places"},bullettrain_front:{keywords:["transportation","vehicle","speed","fast","public","travel"],char:"\u{1f685}",fitzpatrick_scale:!1,category:"travel_and_places"},light_rail:{keywords:["transportation","vehicle"],char:"\u{1f688}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_railway:{keywords:["transportation","vehicle"],char:"\u{1f69e}",fitzpatrick_scale:!1,category:"travel_and_places"},steam_locomotive:{keywords:["transportation","vehicle","train"],char:"\u{1f682}",fitzpatrick_scale:!1,category:"travel_and_places"},train2:{keywords:["transportation","vehicle"],char:"\u{1f686}",fitzpatrick_scale:!1,category:"travel_and_places"},metro:{keywords:["transportation","blue-square","mrt","underground","tube"],char:"\u{1f687}",fitzpatrick_scale:!1,category:"travel_and_places"},tram:{keywords:["transportation","vehicle"],char:"\u{1f68a}",fitzpatrick_scale:!1,category:"travel_and_places"},station:{keywords:["transportation","vehicle","public"],char:"\u{1f689}",fitzpatrick_scale:!1,category:"travel_and_places"},flying_saucer:{keywords:["transportation","vehicle","ufo"],char:"\u{1f6f8}",fitzpatrick_scale:!1,category:"travel_and_places"},helicopter:{keywords:["transportation","vehicle","fly"],char:"\u{1f681}",fitzpatrick_scale:!1,category:"travel_and_places"},small_airplane:{keywords:["flight","transportation","fly","vehicle"],char:"\u{1f6e9}",fitzpatrick_scale:!1,category:"travel_and_places"},airplane:{keywords:["vehicle","transportation","flight","fly"],char:"\u2708\ufe0f",fitzpatrick_scale:!1,category:"travel_and_places"},flight_departure:{keywords:["airport","flight","landing"],char:"\u{1f6eb}",fitzpatrick_scale:!1,category:"travel_and_places"},flight_arrival:{keywords:["airport","flight","boarding"],char:"\u{1f6ec}",fitzpatrick_scale:!1,category:"travel_and_places"},sailboat:{keywords:["ship","summer","transportation","water","sailing"],char:"\u26f5",fitzpatrick_scale:!1,category:"travel_and_places"},motor_boat:{keywords:["ship"],char:"\u{1f6e5}",fitzpatrick_scale:!1,category:"travel_and_places"},speedboat:{keywords:["ship","transportation","vehicle","summer"],char:"\u{1f6a4}",fitzpatrick_scale:!1,category:"travel_and_places"},ferry:{keywords:["boat","ship","yacht"],char:"\u26f4",fitzpatrick_scale:!1,category:"travel_and_places"},passenger_ship:{keywords:["yacht","cruise","ferry"],char:"\u{1f6f3}",fitzpatrick_scale:!1,category:"travel_and_places"},rocket:{keywords:["launch","ship","staffmode","NASA","outer space","outer_space","fly"],char:"\u{1f680}",fitzpatrick_scale:!1,category:"travel_and_places"},artificial_satellite:{keywords:["communication","gps","orbit","spaceflight","NASA","ISS"],char:"\u{1f6f0}",fitzpatrick_scale:!1,category:"travel_and_places"},seat:{keywords:["sit","airplane","transport","bus","flight","fly"],char:"\u{1f4ba}",fitzpatrick_scale:!1,category:"travel_and_places"},canoe:{keywords:["boat","paddle","water","ship"],char:"\u{1f6f6}",fitzpatrick_scale:!1,category:"travel_and_places"},anchor:{keywords:["ship","ferry","sea","boat"],char:"\u2693",fitzpatrick_scale:!1,category:"travel_and_places"},construction:{keywords:["wip","progress","caution","warning"],char:"\u{1f6a7}",fitzpatrick_scale:!1,category:"travel_and_places"},fuelpump:{keywords:["gas station","petroleum"],char:"\u26fd",fitzpatrick_scale:!1,category:"travel_and_places"},busstop:{keywords:["transportation","wait"],char:"\u{1f68f}",fitzpatrick_scale:!1,category:"travel_and_places"},vertical_traffic_light:{keywords:["transportation","driving"],char:"\u{1f6a6}",fitzpatrick_scale:!1,category:"travel_and_places"},traffic_light:{keywords:["transportation","signal"],char:"\u{1f6a5}",fitzpatrick_scale:!1,category:"travel_and_places"},checkered_flag:{keywords:["contest","finishline","race","gokart"],char:"\u{1f3c1}",fitzpatrick_scale:!1,category:"travel_and_places"},ship:{keywords:["transportation","titanic","deploy"],char:"\u{1f6a2}",fitzpatrick_scale:!1,category:"travel_and_places"},ferris_wheel:{keywords:["photo","carnival","londoneye"],char:"\u{1f3a1}",fitzpatrick_scale:!1,category:"travel_and_places"},roller_coaster:{keywords:["carnival","playground","photo","fun"],char:"\u{1f3a2}",fitzpatrick_scale:!1,category:"travel_and_places"},carousel_horse:{keywords:["photo","carnival"],char:"\u{1f3a0}",fitzpatrick_scale:!1,category:"travel_and_places"},building_construction:{keywords:["wip","working","progress"],char:"\u{1f3d7}",fitzpatrick_scale:!1,category:"travel_and_places"},foggy:{keywords:["photo","mountain"],char:"\u{1f301}",fitzpatrick_scale:!1,category:"travel_and_places"},tokyo_tower:{keywords:["photo","japanese"],char:"\u{1f5fc}",fitzpatrick_scale:!1,category:"travel_and_places"},factory:{keywords:["building","industry","pollution","smoke"],char:"\u{1f3ed}",fitzpatrick_scale:!1,category:"travel_and_places"},fountain:{keywords:["photo","summer","water","fresh"],char:"\u26f2",fitzpatrick_scale:!1,category:"travel_and_places"},rice_scene:{keywords:["photo","japan","asia","tsukimi"],char:"\u{1f391}",fitzpatrick_scale:!1,category:"travel_and_places"},mountain:{keywords:["photo","nature","environment"],char:"\u26f0",fitzpatrick_scale:!1,category:"travel_and_places"},mountain_snow:{keywords:["photo","nature","environment","winter","cold"],char:"\u{1f3d4}",fitzpatrick_scale:!1,category:"travel_and_places"},mount_fuji:{keywords:["photo","mountain","nature","japanese"],char:"\u{1f5fb}",fitzpatrick_scale:!1,category:"travel_and_places"},volcano:{keywords:["photo","nature","disaster"],char:"\u{1f30b}",fitzpatrick_scale:!1,category:"travel_and_places"},japan:{keywords:["nation","country","japanese","asia"],char:"\u{1f5fe}",fitzpatrick_scale:!1,category:"travel_and_places"},camping:{keywords:["photo","outdoors","tent"],char:"\u{1f3d5}",fitzpatrick_scale:!1,category:"travel_and_places"},tent:{keywords:["photo","camping","outdoors"],char:"\u26fa",fitzpatrick_scale:!1,category:"travel_and_places"},national_park:{keywords:["photo","environment","nature"],char:"\u{1f3de}",fitzpatrick_scale:!1,category:"travel_and_places"},motorway:{keywords:["road","cupertino","interstate","highway"],char:"\u{1f6e3}",fitzpatrick_scale:!1,category:"travel_and_places"},railway_track:{keywords:["train","transportation"],char:"\u{1f6e4}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise:{keywords:["morning","view","vacation","photo"],char:"\u{1f305}",fitzpatrick_scale:!1,category:"travel_and_places"},sunrise_over_mountains:{keywords:["view","vacation","photo"],char:"\u{1f304}",fitzpatrick_scale:!1,category:"travel_and_places"},desert:{keywords:["photo","warm","saharah"],char:"\u{1f3dc}",fitzpatrick_scale:!1,category:"travel_and_places"},beach_umbrella:{keywords:["weather","summer","sunny","sand","mojito"],char:"\u{1f3d6}",fitzpatrick_scale:!1,category:"travel_and_places"},desert_island:{keywords:["photo","tropical","mojito"],char:"\u{1f3dd}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunrise:{keywords:["photo","good morning","dawn"],char:"\u{1f307}",fitzpatrick_scale:!1,category:"travel_and_places"},city_sunset:{keywords:["photo","evening","sky","buildings"],char:"\u{1f306}",fitzpatrick_scale:!1,category:"travel_and_places"},cityscape:{keywords:["photo","night life","urban"],char:"\u{1f3d9}",fitzpatrick_scale:!1,category:"travel_and_places"},night_with_stars:{keywords:["evening","city","downtown"],char:"\u{1f303}",fitzpatrick_scale:!1,category:"travel_and_places"},bridge_at_night:{keywords:["photo","sanfrancisco"],char:"\u{1f309}",fitzpatrick_scale:!1,category:"travel_and_places"},milky_way:{keywords:["photo","space","stars"],char:"\u{1f30c}",fitzpatrick_scale:!1,category:"travel_and_places"},stars:{keywords:["night","photo"],char:"\u{1f320}",fitzpatrick_scale:!1,category:"travel_and_places"},sparkler:{keywords:["stars","night","shine"],char:"\u{1f387}",fitzpatrick_scale:!1,category:"travel_and_places"},fireworks:{keywords:["photo","festival","carnival","congratulations"],char:"\u{1f386}",fitzpatrick_scale:!1,category:"travel_and_places"},rainbow:{keywords:["nature","happy","unicorn_face","photo","sky","spring"],char:"\u{1f308}",fitzpatrick_scale:!1,category:"travel_and_places"},houses:{keywords:["buildings","photo"],char:"\u{1f3d8}",fitzpatrick_scale:!1,category:"travel_and_places"},european_castle:{keywords:["building","royalty","history"],char:"\u{1f3f0}",fitzpatrick_scale:!1,category:"travel_and_places"},japanese_castle:{keywords:["photo","building"],char:"\u{1f3ef}",fitzpatrick_scale:!1,category:"travel_and_places"},stadium:{keywords:["photo","place","sports","concert","venue"],char:"\u{1f3df}",fitzpatrick_scale:!1,category:"travel_and_places"},statue_of_liberty:{keywords:["american","newyork"],char:"\u{1f5fd}",fitzpatrick_scale:!1,category:"travel_and_places"},house:{keywords:["building","home"],char:"\u{1f3e0}",fitzpatrick_scale:!1,category:"travel_and_places"},house_with_garden:{keywords:["home","plant","nature"],char:"\u{1f3e1}",fitzpatrick_scale:!1,category:"travel_and_places"},derelict_house:{keywords:["abandon","evict","broken","building"],char:"\u{1f3da}",fitzpatrick_scale:!1,category:"travel_and_places"},office:{keywords:["building","bureau","work"],char:"\u{1f3e2}",fitzpatrick_scale:!1,category:"travel_and_places"},department_store:{keywords:["building","shopping","mall"],char:"\u{1f3ec}",fitzpatrick_scale:!1,category:"travel_and_places"},post_office:{keywords:["building","envelope","communication"],char:"\u{1f3e3}",fitzpatrick_scale:!1,category:"travel_and_places"},european_post_office:{keywords:["building","email"],char:"\u{1f3e4}",fitzpatrick_scale:!1,category:"travel_and_places"},hospital:{keywords:["building","health","surgery","doctor"],char:"\u{1f3e5}",fitzpatrick_scale:!1,category:"travel_and_places"},bank:{keywords:["building","money","sales","cash","business","enterprise"],char:"\u{1f3e6}",fitzpatrick_scale:!1,category:"travel_and_places"},hotel:{keywords:["building","accomodation","checkin"],char:"\u{1f3e8}",fitzpatrick_scale:!1,category:"travel_and_places"},convenience_store:{keywords:["building","shopping","groceries"],char:"\u{1f3ea}",fitzpatrick_scale:!1,category:"travel_and_places"},school:{keywords:["building","student","education","learn","teach"],char:"\u{1f3eb}",fitzpatrick_scale:!1,category:"travel_and_places"},love_hotel:{keywords:["like","affection","dating"],char:"\u{1f3e9}",fitzpatrick_scale:!1,category:"travel_and_places"},wedding:{keywords:["love","like","affection","couple","marriage","bride","groom"],char:"\u{1f492}",fitzpatrick_scale:!1,category:"travel_and_places"},classical_building:{keywords:["art","culture","history"],char:"\u{1f3db}",fitzpatrick_scale:!1,category:"travel_and_places"},church:{keywords:["building","religion","christ"],char:"\u26ea",fitzpatrick_scale:!1,category:"travel_and_places"},mosque:{keywords:["islam","worship","minaret"],char:"\u{1f54c}",fitzpatrick_scale:!1,category:"travel_and_places"},synagogue:{keywords:["judaism","worship","temple","jewish"],char:"\u{1f54d}",fitzpatrick_scale:!1,category:"travel_and_places"},kaaba:{keywords:["mecca","mosque","islam"],char:"\u{1f54b}",fitzpatrick_scale:!1,category:"travel_and_places"},shinto_shrine:{keywords:["temple","japan","kyoto"],char:"\u26e9",fitzpatrick_scale:!1,category:"travel_and_places"},watch:{keywords:["time","accessories"],char:"\u231a",fitzpatrick_scale:!1,category:"objects"},iphone:{keywords:["technology","apple","gadgets","dial"],char:"\u{1f4f1}",fitzpatrick_scale:!1,category:"objects"},calling:{keywords:["iphone","incoming"],char:"\u{1f4f2}",fitzpatrick_scale:!1,category:"objects"},computer:{keywords:["technology","laptop","screen","display","monitor"],char:"\u{1f4bb}",fitzpatrick_scale:!1,category:"objects"},keyboard:{keywords:["technology","computer","type","input","text"],char:"\u2328",fitzpatrick_scale:!1,category:"objects"},desktop_computer:{keywords:["technology","computing","screen"],char:"\u{1f5a5}",fitzpatrick_scale:!1,category:"objects"},printer:{keywords:["paper","ink"],char:"\u{1f5a8}",fitzpatrick_scale:!1,category:"objects"},computer_mouse:{keywords:["click"],char:"\u{1f5b1}",fitzpatrick_scale:!1,category:"objects"},trackball:{keywords:["technology","trackpad"],char:"\u{1f5b2}",fitzpatrick_scale:!1,category:"objects"},joystick:{keywords:["game","play"],char:"\u{1f579}",fitzpatrick_scale:!1,category:"objects"},clamp:{keywords:["tool"],char:"\u{1f5dc}",fitzpatrick_scale:!1,category:"objects"},minidisc:{keywords:["technology","record","data","disk","90s"],char:"\u{1f4bd}",fitzpatrick_scale:!1,category:"objects"},floppy_disk:{keywords:["oldschool","technology","save","90s","80s"],char:"\u{1f4be}",fitzpatrick_scale:!1,category:"objects"},cd:{keywords:["technology","dvd","disk","disc","90s"],char:"\u{1f4bf}",fitzpatrick_scale:!1,category:"objects"},dvd:{keywords:["cd","disk","disc"],char:"\u{1f4c0}",fitzpatrick_scale:!1,category:"objects"},vhs:{keywords:["record","video","oldschool","90s","80s"],char:"\u{1f4fc}",fitzpatrick_scale:!1,category:"objects"},camera:{keywords:["gadgets","photography"],char:"\u{1f4f7}",fitzpatrick_scale:!1,category:"objects"},camera_flash:{keywords:["photography","gadgets"],char:"\u{1f4f8}",fitzpatrick_scale:!1,category:"objects"},video_camera:{keywords:["film","record"],char:"\u{1f4f9}",fitzpatrick_scale:!1,category:"objects"},movie_camera:{keywords:["film","record"],char:"\u{1f3a5}",fitzpatrick_scale:!1,category:"objects"},film_projector:{keywords:["video","tape","record","movie"],char:"\u{1f4fd}",fitzpatrick_scale:!1,category:"objects"},film_strip:{keywords:["movie"],char:"\u{1f39e}",fitzpatrick_scale:!1,category:"objects"},telephone_receiver:{keywords:["technology","communication","dial"],char:"\u{1f4de}",fitzpatrick_scale:!1,category:"objects"},phone:{keywords:["technology","communication","dial","telephone"],char:"\u260e\ufe0f",fitzpatrick_scale:!1,category:"objects"},pager:{keywords:["bbcall","oldschool","90s"],char:"\u{1f4df}",fitzpatrick_scale:!1,category:"objects"},fax:{keywords:["communication","technology"],char:"\u{1f4e0}",fitzpatrick_scale:!1,category:"objects"},tv:{keywords:["technology","program","oldschool","show","television"],char:"\u{1f4fa}",fitzpatrick_scale:!1,category:"objects"},radio:{keywords:["communication","music","podcast","program"],char:"\u{1f4fb}",fitzpatrick_scale:!1,category:"objects"},studio_microphone:{keywords:["sing","recording","artist","talkshow"],char:"\u{1f399}",fitzpatrick_scale:!1,category:"objects"},level_slider:{keywords:["scale"],char:"\u{1f39a}",fitzpatrick_scale:!1,category:"objects"},control_knobs:{keywords:["dial"],char:"\u{1f39b}",fitzpatrick_scale:!1,category:"objects"},compass:{keywords:["magnetic","navigation","orienteering"],char:"\u{1f9ed}",fitzpatrick_scale:!1,category:"objects"},stopwatch:{keywords:["time","deadline"],char:"\u23f1",fitzpatrick_scale:!1,category:"objects"},timer_clock:{keywords:["alarm"],char:"\u23f2",fitzpatrick_scale:!1,category:"objects"},alarm_clock:{keywords:["time","wake"],char:"\u23f0",fitzpatrick_scale:!1,category:"objects"},mantelpiece_clock:{keywords:["time"],char:"\u{1f570}",fitzpatrick_scale:!1,category:"objects"},hourglass_flowing_sand:{keywords:["oldschool","time","countdown"],char:"\u23f3",fitzpatrick_scale:!1,category:"objects"},hourglass:{keywords:["time","clock","oldschool","limit","exam","quiz","test"],char:"\u231b",fitzpatrick_scale:!1,category:"objects"},satellite:{keywords:["communication","future","radio","space"],char:"\u{1f4e1}",fitzpatrick_scale:!1,category:"objects"},battery:{keywords:["power","energy","sustain"],char:"\u{1f50b}",fitzpatrick_scale:!1,category:"objects"},electric_plug:{keywords:["charger","power"],char:"\u{1f50c}",fitzpatrick_scale:!1,category:"objects"},bulb:{keywords:["light","electricity","idea"],char:"\u{1f4a1}",fitzpatrick_scale:!1,category:"objects"},flashlight:{keywords:["dark","camping","sight","night"],char:"\u{1f526}",fitzpatrick_scale:!1,category:"objects"},candle:{keywords:["fire","wax"],char:"\u{1f56f}",fitzpatrick_scale:!1,category:"objects"},fire_extinguisher:{keywords:["quench"],char:"\u{1f9ef}",fitzpatrick_scale:!1,category:"objects"},wastebasket:{keywords:["bin","trash","rubbish","garbage","toss"],char:"\u{1f5d1}",fitzpatrick_scale:!1,category:"objects"},oil_drum:{keywords:["barrell"],char:"\u{1f6e2}",fitzpatrick_scale:!1,category:"objects"},money_with_wings:{keywords:["dollar","bills","payment","sale"],char:"\u{1f4b8}",fitzpatrick_scale:!1,category:"objects"},dollar:{keywords:["money","sales","bill","currency"],char:"\u{1f4b5}",fitzpatrick_scale:!1,category:"objects"},yen:{keywords:["money","sales","japanese","dollar","currency"],char:"\u{1f4b4}",fitzpatrick_scale:!1,category:"objects"},euro:{keywords:["money","sales","dollar","currency"],char:"\u{1f4b6}",fitzpatrick_scale:!1,category:"objects"},pound:{keywords:["british","sterling","money","sales","bills","uk","england","currency"],char:"\u{1f4b7}",fitzpatrick_scale:!1,category:"objects"},moneybag:{keywords:["dollar","payment","coins","sale"],char:"\u{1f4b0}",fitzpatrick_scale:!1,category:"objects"},credit_card:{keywords:["money","sales","dollar","bill","payment","shopping"],char:"\u{1f4b3}",fitzpatrick_scale:!1,category:"objects"},gem:{keywords:["blue","ruby","diamond","jewelry"],char:"\u{1f48e}",fitzpatrick_scale:!1,category:"objects"},balance_scale:{keywords:["law","fairness","weight"],char:"\u2696",fitzpatrick_scale:!1,category:"objects"},toolbox:{keywords:["tools","diy","fix","maintainer","mechanic"],char:"\u{1f9f0}",fitzpatrick_scale:!1,category:"objects"},wrench:{keywords:["tools","diy","ikea","fix","maintainer"],char:"\u{1f527}",fitzpatrick_scale:!1,category:"objects"},hammer:{keywords:["tools","build","create"],char:"\u{1f528}",fitzpatrick_scale:!1,category:"objects"},hammer_and_pick:{keywords:["tools","build","create"],char:"\u2692",fitzpatrick_scale:!1,category:"objects"},hammer_and_wrench:{keywords:["tools","build","create"],char:"\u{1f6e0}",fitzpatrick_scale:!1,category:"objects"},pick:{keywords:["tools","dig"],char:"\u26cf",fitzpatrick_scale:!1,category:"objects"},nut_and_bolt:{keywords:["handy","tools","fix"],char:"\u{1f529}",fitzpatrick_scale:!1,category:"objects"},gear:{keywords:["cog"],char:"\u2699",fitzpatrick_scale:!1,category:"objects"},brick:{keywords:["bricks"],char:"\u{1f9f1}",fitzpatrick_scale:!1,category:"objects"},chains:{keywords:["lock","arrest"],char:"\u26d3",fitzpatrick_scale:!1,category:"objects"},magnet:{keywords:["attraction","magnetic"],char:"\u{1f9f2}",fitzpatrick_scale:!1,category:"objects"},gun:{keywords:["violence","weapon","pistol","revolver"],char:"\u{1f52b}",fitzpatrick_scale:!1,category:"objects"},bomb:{keywords:["boom","explode","explosion","terrorism"],char:"\u{1f4a3}",fitzpatrick_scale:!1,category:"objects"},firecracker:{keywords:["dynamite","boom","explode","explosion","explosive"],char:"\u{1f9e8}",fitzpatrick_scale:!1,category:"objects"},hocho:{keywords:["knife","blade","cutlery","kitchen","weapon"],char:"\u{1f52a}",fitzpatrick_scale:!1,category:"objects"},dagger:{keywords:["weapon"],char:"\u{1f5e1}",fitzpatrick_scale:!1,category:"objects"},crossed_swords:{keywords:["weapon"],char:"\u2694",fitzpatrick_scale:!1,category:"objects"},shield:{keywords:["protection","security"],char:"\u{1f6e1}",fitzpatrick_scale:!1,category:"objects"},smoking:{keywords:["kills","tobacco","cigarette","joint","smoke"],char:"\u{1f6ac}",fitzpatrick_scale:!1,category:"objects"},skull_and_crossbones:{keywords:["poison","danger","deadly","scary","death","pirate","evil"],char:"\u2620",fitzpatrick_scale:!1,category:"objects"},coffin:{keywords:["vampire","dead","die","death","rip","graveyard","cemetery","casket","funeral","box"],char:"\u26b0",fitzpatrick_scale:!1,category:"objects"},funeral_urn:{keywords:["dead","die","death","rip","ashes"],char:"\u26b1",fitzpatrick_scale:!1,category:"objects"},amphora:{keywords:["vase","jar"],char:"\u{1f3fa}",fitzpatrick_scale:!1,category:"objects"},crystal_ball:{keywords:["disco","party","magic","circus","fortune_teller"],char:"\u{1f52e}",fitzpatrick_scale:!1,category:"objects"},prayer_beads:{keywords:["dhikr","religious"],char:"\u{1f4ff}",fitzpatrick_scale:!1,category:"objects"},nazar_amulet:{keywords:["bead","charm"],char:"\u{1f9ff}",fitzpatrick_scale:!1,category:"objects"},barber:{keywords:["hair","salon","style"],char:"\u{1f488}",fitzpatrick_scale:!1,category:"objects"},alembic:{keywords:["distilling","science","experiment","chemistry"],char:"\u2697",fitzpatrick_scale:!1,category:"objects"},telescope:{keywords:["stars","space","zoom","science","astronomy"],char:"\u{1f52d}",fitzpatrick_scale:!1,category:"objects"},microscope:{keywords:["laboratory","experiment","zoomin","science","study"],char:"\u{1f52c}",fitzpatrick_scale:!1,category:"objects"},hole:{keywords:["embarrassing"],char:"\u{1f573}",fitzpatrick_scale:!1,category:"objects"},pill:{keywords:["health","medicine","doctor","pharmacy","drug"],char:"\u{1f48a}",fitzpatrick_scale:!1,category:"objects"},syringe:{keywords:["health","hospital","drugs","blood","medicine","needle","doctor","nurse"],char:"\u{1f489}",fitzpatrick_scale:!1,category:"objects"},dna:{keywords:["biologist","genetics","life"],char:"\u{1f9ec}",fitzpatrick_scale:!1,category:"objects"},microbe:{keywords:["amoeba","bacteria","germs"],char:"\u{1f9a0}",fitzpatrick_scale:!1,category:"objects"},petri_dish:{keywords:["bacteria","biology","culture","lab"],char:"\u{1f9eb}",fitzpatrick_scale:!1,category:"objects"},test_tube:{keywords:["chemistry","experiment","lab","science"],char:"\u{1f9ea}",fitzpatrick_scale:!1,category:"objects"},thermometer:{keywords:["weather","temperature","hot","cold"],char:"\u{1f321}",fitzpatrick_scale:!1,category:"objects"},broom:{keywords:["cleaning","sweeping","witch"],char:"\u{1f9f9}",fitzpatrick_scale:!1,category:"objects"},basket:{keywords:["laundry"],char:"\u{1f9fa}",fitzpatrick_scale:!1,category:"objects"},toilet_paper:{keywords:["roll"],char:"\u{1f9fb}",fitzpatrick_scale:!1,category:"objects"},label:{keywords:["sale","tag"],char:"\u{1f3f7}",fitzpatrick_scale:!1,category:"objects"},bookmark:{keywords:["favorite","label","save"],char:"\u{1f516}",fitzpatrick_scale:!1,category:"objects"},toilet:{keywords:["restroom","wc","washroom","bathroom","potty"],char:"\u{1f6bd}",fitzpatrick_scale:!1,category:"objects"},shower:{keywords:["clean","water","bathroom"],char:"\u{1f6bf}",fitzpatrick_scale:!1,category:"objects"},bathtub:{keywords:["clean","shower","bathroom"],char:"\u{1f6c1}",fitzpatrick_scale:!1,category:"objects"},soap:{keywords:["bar","bathing","cleaning","lather"],char:"\u{1f9fc}",fitzpatrick_scale:!1,category:"objects"},sponge:{keywords:["absorbing","cleaning","porous"],char:"\u{1f9fd}",fitzpatrick_scale:!1,category:"objects"},lotion_bottle:{keywords:["moisturizer","sunscreen"],char:"\u{1f9f4}",fitzpatrick_scale:!1,category:"objects"},key:{keywords:["lock","door","password"],char:"\u{1f511}",fitzpatrick_scale:!1,category:"objects"},old_key:{keywords:["lock","door","password"],char:"\u{1f5dd}",fitzpatrick_scale:!1,category:"objects"},couch_and_lamp:{keywords:["read","chill"],char:"\u{1f6cb}",fitzpatrick_scale:!1,category:"objects"},sleeping_bed:{keywords:["bed","rest"],char:"\u{1f6cc}",fitzpatrick_scale:!0,category:"objects"},bed:{keywords:["sleep","rest"],char:"\u{1f6cf}",fitzpatrick_scale:!1,category:"objects"},door:{keywords:["house","entry","exit"],char:"\u{1f6aa}",fitzpatrick_scale:!1,category:"objects"},bellhop_bell:{keywords:["service"],char:"\u{1f6ce}",fitzpatrick_scale:!1,category:"objects"},teddy_bear:{keywords:["plush","stuffed"],char:"\u{1f9f8}",fitzpatrick_scale:!1,category:"objects"},framed_picture:{keywords:["photography"],char:"\u{1f5bc}",fitzpatrick_scale:!1,category:"objects"},world_map:{keywords:["location","direction"],char:"\u{1f5fa}",fitzpatrick_scale:!1,category:"objects"},parasol_on_ground:{keywords:["weather","summer"],char:"\u26f1",fitzpatrick_scale:!1,category:"objects"},moyai:{keywords:["rock","easter island","moai"],char:"\u{1f5ff}",fitzpatrick_scale:!1,category:"objects"},shopping:{keywords:["mall","buy","purchase"],char:"\u{1f6cd}",fitzpatrick_scale:!1,category:"objects"},shopping_cart:{keywords:["trolley"],char:"\u{1f6d2}",fitzpatrick_scale:!1,category:"objects"},balloon:{keywords:["party","celebration","birthday","circus"],char:"\u{1f388}",fitzpatrick_scale:!1,category:"objects"},flags:{keywords:["fish","japanese","koinobori","carp","banner"],char:"\u{1f38f}",fitzpatrick_scale:!1,category:"objects"},ribbon:{keywords:["decoration","pink","girl","bowtie"],char:"\u{1f380}",fitzpatrick_scale:!1,category:"objects"},gift:{keywords:["present","birthday","christmas","xmas"],char:"\u{1f381}",fitzpatrick_scale:!1,category:"objects"},confetti_ball:{keywords:["festival","party","birthday","circus"],char:"\u{1f38a}",fitzpatrick_scale:!1,category:"objects"},tada:{keywords:["party","congratulations","birthday","magic","circus","celebration"],char:"\u{1f389}",fitzpatrick_scale:!1,category:"objects"},dolls:{keywords:["japanese","toy","kimono"],char:"\u{1f38e}",fitzpatrick_scale:!1,category:"objects"},wind_chime:{keywords:["nature","ding","spring","bell"],char:"\u{1f390}",fitzpatrick_scale:!1,category:"objects"},crossed_flags:{keywords:["japanese","nation","country","border"],char:"\u{1f38c}",fitzpatrick_scale:!1,category:"objects"},izakaya_lantern:{keywords:["light","paper","halloween","spooky"],char:"\u{1f3ee}",fitzpatrick_scale:!1,category:"objects"},red_envelope:{keywords:["gift"],char:"\u{1f9e7}",fitzpatrick_scale:!1,category:"objects"},email:{keywords:["letter","postal","inbox","communication"],char:"\u2709\ufe0f",fitzpatrick_scale:!1,category:"objects"},envelope_with_arrow:{keywords:["email","communication"],char:"\u{1f4e9}",fitzpatrick_scale:!1,category:"objects"},incoming_envelope:{keywords:["email","inbox"],char:"\u{1f4e8}",fitzpatrick_scale:!1,category:"objects"},"e-mail":{keywords:["communication","inbox"],char:"\u{1f4e7}",fitzpatrick_scale:!1,category:"objects"},love_letter:{keywords:["email","like","affection","envelope","valentines"],char:"\u{1f48c}",fitzpatrick_scale:!1,category:"objects"},postbox:{keywords:["email","letter","envelope"],char:"\u{1f4ee}",fitzpatrick_scale:!1,category:"objects"},mailbox_closed:{keywords:["email","communication","inbox"],char:"\u{1f4ea}",fitzpatrick_scale:!1,category:"objects"},mailbox:{keywords:["email","inbox","communication"],char:"\u{1f4eb}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_mail:{keywords:["email","inbox","communication"],char:"\u{1f4ec}",fitzpatrick_scale:!1,category:"objects"},mailbox_with_no_mail:{keywords:["email","inbox"],char:"\u{1f4ed}",fitzpatrick_scale:!1,category:"objects"},package:{keywords:["mail","gift","cardboard","box","moving"],char:"\u{1f4e6}",fitzpatrick_scale:!1,category:"objects"},postal_horn:{keywords:["instrument","music"],char:"\u{1f4ef}",fitzpatrick_scale:!1,category:"objects"},inbox_tray:{keywords:["email","documents"],char:"\u{1f4e5}",fitzpatrick_scale:!1,category:"objects"},outbox_tray:{keywords:["inbox","email"],char:"\u{1f4e4}",fitzpatrick_scale:!1,category:"objects"},scroll:{keywords:["documents","ancient","history","paper"],char:"\u{1f4dc}",fitzpatrick_scale:!1,category:"objects"},page_with_curl:{keywords:["documents","office","paper"],char:"\u{1f4c3}",fitzpatrick_scale:!1,category:"objects"},bookmark_tabs:{keywords:["favorite","save","order","tidy"],char:"\u{1f4d1}",fitzpatrick_scale:!1,category:"objects"},receipt:{keywords:["accounting","expenses"],char:"\u{1f9fe}",fitzpatrick_scale:!1,category:"objects"},bar_chart:{keywords:["graph","presentation","stats"],char:"\u{1f4ca}",fitzpatrick_scale:!1,category:"objects"},chart_with_upwards_trend:{keywords:["graph","presentation","stats","recovery","business","economics","money","sales","good","success"],char:"\u{1f4c8}",fitzpatrick_scale:!1,category:"objects"},chart_with_downwards_trend:{keywords:["graph","presentation","stats","recession","business","economics","money","sales","bad","failure"],char:"\u{1f4c9}",fitzpatrick_scale:!1,category:"objects"},page_facing_up:{keywords:["documents","office","paper","information"],char:"\u{1f4c4}",fitzpatrick_scale:!1,category:"objects"},date:{keywords:["calendar","schedule"],char:"\u{1f4c5}",fitzpatrick_scale:!1,category:"objects"},calendar:{keywords:["schedule","date","planning"],char:"\u{1f4c6}",fitzpatrick_scale:!1,category:"objects"},spiral_calendar:{keywords:["date","schedule","planning"],char:"\u{1f5d3}",fitzpatrick_scale:!1,category:"objects"},card_index:{keywords:["business","stationery"],char:"\u{1f4c7}",fitzpatrick_scale:!1,category:"objects"},card_file_box:{keywords:["business","stationery"],char:"\u{1f5c3}",fitzpatrick_scale:!1,category:"objects"},ballot_box:{keywords:["election","vote"],char:"\u{1f5f3}",fitzpatrick_scale:!1,category:"objects"},file_cabinet:{keywords:["filing","organizing"],char:"\u{1f5c4}",fitzpatrick_scale:!1,category:"objects"},clipboard:{keywords:["stationery","documents"],char:"\u{1f4cb}",fitzpatrick_scale:!1,category:"objects"},spiral_notepad:{keywords:["memo","stationery"],char:"\u{1f5d2}",fitzpatrick_scale:!1,category:"objects"},file_folder:{keywords:["documents","business","office"],char:"\u{1f4c1}",fitzpatrick_scale:!1,category:"objects"},open_file_folder:{keywords:["documents","load"],char:"\u{1f4c2}",fitzpatrick_scale:!1,category:"objects"},card_index_dividers:{keywords:["organizing","business","stationery"],char:"\u{1f5c2}",fitzpatrick_scale:!1,category:"objects"},newspaper_roll:{keywords:["press","headline"],char:"\u{1f5de}",fitzpatrick_scale:!1,category:"objects"},newspaper:{keywords:["press","headline"],char:"\u{1f4f0}",fitzpatrick_scale:!1,category:"objects"},notebook:{keywords:["stationery","record","notes","paper","study"],char:"\u{1f4d3}",fitzpatrick_scale:!1,category:"objects"},closed_book:{keywords:["read","library","knowledge","textbook","learn"],char:"\u{1f4d5}",fitzpatrick_scale:!1,category:"objects"},green_book:{keywords:["read","library","knowledge","study"],char:"\u{1f4d7}",fitzpatrick_scale:!1,category:"objects"},blue_book:{keywords:["read","library","knowledge","learn","study"],char:"\u{1f4d8}",fitzpatrick_scale:!1,category:"objects"},orange_book:{keywords:["read","library","knowledge","textbook","study"],char:"\u{1f4d9}",fitzpatrick_scale:!1,category:"objects"},notebook_with_decorative_cover:{keywords:["classroom","notes","record","paper","study"],char:"\u{1f4d4}",fitzpatrick_scale:!1,category:"objects"},ledger:{keywords:["notes","paper"],char:"\u{1f4d2}",fitzpatrick_scale:!1,category:"objects"},books:{keywords:["literature","library","study"],char:"\u{1f4da}",fitzpatrick_scale:!1,category:"objects"},open_book:{keywords:["book","read","library","knowledge","literature","learn","study"],char:"\u{1f4d6}",fitzpatrick_scale:!1,category:"objects"},safety_pin:{keywords:["diaper"],char:"\u{1f9f7}",fitzpatrick_scale:!1,category:"objects"},link:{keywords:["rings","url"],char:"\u{1f517}",fitzpatrick_scale:!1,category:"objects"},paperclip:{keywords:["documents","stationery"],char:"\u{1f4ce}",fitzpatrick_scale:!1,category:"objects"},paperclips:{keywords:["documents","stationery"],char:"\u{1f587}",fitzpatrick_scale:!1,category:"objects"},scissors:{keywords:["stationery","cut"],char:"\u2702\ufe0f",fitzpatrick_scale:!1,category:"objects"},triangular_ruler:{keywords:["stationery","math","architect","sketch"],char:"\u{1f4d0}",fitzpatrick_scale:!1,category:"objects"},straight_ruler:{keywords:["stationery","calculate","length","math","school","drawing","architect","sketch"],char:"\u{1f4cf}",fitzpatrick_scale:!1,category:"objects"},abacus:{keywords:["calculation"],char:"\u{1f9ee}",fitzpatrick_scale:!1,category:"objects"},pushpin:{keywords:["stationery","mark","here"],char:"\u{1f4cc}",fitzpatrick_scale:!1,category:"objects"},round_pushpin:{keywords:["stationery","location","map","here"],char:"\u{1f4cd}",fitzpatrick_scale:!1,category:"objects"},triangular_flag_on_post:{keywords:["mark","milestone","place"],char:"\u{1f6a9}",fitzpatrick_scale:!1,category:"objects"},white_flag:{keywords:["losing","loser","lost","surrender","give up","fail"],char:"\u{1f3f3}",fitzpatrick_scale:!1,category:"objects"},black_flag:{keywords:["pirate"],char:"\u{1f3f4}",fitzpatrick_scale:!1,category:"objects"},rainbow_flag:{keywords:["flag","rainbow","pride","gay","lgbt","glbt","queer","homosexual","lesbian","bisexual","transgender"],char:"\u{1f3f3}\ufe0f\u200d\u{1f308}",fitzpatrick_scale:!1,category:"objects"},closed_lock_with_key:{keywords:["security","privacy"],char:"\u{1f510}",fitzpatrick_scale:!1,category:"objects"},lock:{keywords:["security","password","padlock"],char:"\u{1f512}",fitzpatrick_scale:!1,category:"objects"},unlock:{keywords:["privacy","security"],char:"\u{1f513}",fitzpatrick_scale:!1,category:"objects"},lock_with_ink_pen:{keywords:["security","secret"],char:"\u{1f50f}",fitzpatrick_scale:!1,category:"objects"},pen:{keywords:["stationery","writing","write"],char:"\u{1f58a}",fitzpatrick_scale:!1,category:"objects"},fountain_pen:{keywords:["stationery","writing","write"],char:"\u{1f58b}",fitzpatrick_scale:!1,category:"objects"},black_nib:{keywords:["pen","stationery","writing","write"],char:"\u2712\ufe0f",fitzpatrick_scale:!1,category:"objects"},memo:{keywords:["write","documents","stationery","pencil","paper","writing","legal","exam","quiz","test","study","compose"],char:"\u{1f4dd}",fitzpatrick_scale:!1,category:"objects"},pencil2:{keywords:["stationery","write","paper","writing","school","study"],char:"\u270f\ufe0f",fitzpatrick_scale:!1,category:"objects"},crayon:{keywords:["drawing","creativity"],char:"\u{1f58d}",fitzpatrick_scale:!1,category:"objects"},paintbrush:{keywords:["drawing","creativity","art"],char:"\u{1f58c}",fitzpatrick_scale:!1,category:"objects"},mag:{keywords:["search","zoom","find","detective"],char:"\u{1f50d}",fitzpatrick_scale:!1,category:"objects"},mag_right:{keywords:["search","zoom","find","detective"],char:"\u{1f50e}",fitzpatrick_scale:!1,category:"objects"},heart:{keywords:["love","like","valentines"],char:"\u2764\ufe0f",fitzpatrick_scale:!1,category:"symbols"},orange_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f9e1}",fitzpatrick_scale:!1,category:"symbols"},yellow_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49b}",fitzpatrick_scale:!1,category:"symbols"},green_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49a}",fitzpatrick_scale:!1,category:"symbols"},blue_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f499}",fitzpatrick_scale:!1,category:"symbols"},purple_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f49c}",fitzpatrick_scale:!1,category:"symbols"},black_heart:{keywords:["evil"],char:"\u{1f5a4}",fitzpatrick_scale:!1,category:"symbols"},broken_heart:{keywords:["sad","sorry","break","heart","heartbreak"],char:"\u{1f494}",fitzpatrick_scale:!1,category:"symbols"},heavy_heart_exclamation:{keywords:["decoration","love"],char:"\u2763",fitzpatrick_scale:!1,category:"symbols"},two_hearts:{keywords:["love","like","affection","valentines","heart"],char:"\u{1f495}",fitzpatrick_scale:!1,category:"symbols"},revolving_hearts:{keywords:["love","like","affection","valentines"],char:"\u{1f49e}",fitzpatrick_scale:!1,category:"symbols"},heartbeat:{keywords:["love","like","affection","valentines","pink","heart"],char:"\u{1f493}",fitzpatrick_scale:!1,category:"symbols"},heartpulse:{keywords:["like","love","affection","valentines","pink"],char:"\u{1f497}",fitzpatrick_scale:!1,category:"symbols"},sparkling_heart:{keywords:["love","like","affection","valentines"],char:"\u{1f496}",fitzpatrick_scale:!1,category:"symbols"},cupid:{keywords:["love","like","heart","affection","valentines"],char:"\u{1f498}",fitzpatrick_scale:!1,category:"symbols"},gift_heart:{keywords:["love","valentines"],char:"\u{1f49d}",fitzpatrick_scale:!1,category:"symbols"},heart_decoration:{keywords:["purple-square","love","like"],char:"\u{1f49f}",fitzpatrick_scale:!1,category:"symbols"},peace_symbol:{keywords:["hippie"],char:"\u262e",fitzpatrick_scale:!1,category:"symbols"},latin_cross:{keywords:["christianity"],char:"\u271d",fitzpatrick_scale:!1,category:"symbols"},star_and_crescent:{keywords:["islam"],char:"\u262a",fitzpatrick_scale:!1,category:"symbols"},om:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u{1f549}",fitzpatrick_scale:!1,category:"symbols"},wheel_of_dharma:{keywords:["hinduism","buddhism","sikhism","jainism"],char:"\u2638",fitzpatrick_scale:!1,category:"symbols"},star_of_david:{keywords:["judaism"],char:"\u2721",fitzpatrick_scale:!1,category:"symbols"},six_pointed_star:{keywords:["purple-square","religion","jewish","hexagram"],char:"\u{1f52f}",fitzpatrick_scale:!1,category:"symbols"},menorah:{keywords:["hanukkah","candles","jewish"],char:"\u{1f54e}",fitzpatrick_scale:!1,category:"symbols"},yin_yang:{keywords:["balance"],char:"\u262f",fitzpatrick_scale:!1,category:"symbols"},orthodox_cross:{keywords:["suppedaneum","religion"],char:"\u2626",fitzpatrick_scale:!1,category:"symbols"},place_of_worship:{keywords:["religion","church","temple","prayer"],char:"\u{1f6d0}",fitzpatrick_scale:!1,category:"symbols"},ophiuchus:{keywords:["sign","purple-square","constellation","astrology"],char:"\u26ce",fitzpatrick_scale:!1,category:"symbols"},aries:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2648",fitzpatrick_scale:!1,category:"symbols"},taurus:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2649",fitzpatrick_scale:!1,category:"symbols"},gemini:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264a",fitzpatrick_scale:!1,category:"symbols"},cancer:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264b",fitzpatrick_scale:!1,category:"symbols"},leo:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264c",fitzpatrick_scale:!1,category:"symbols"},virgo:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u264d",fitzpatrick_scale:!1,category:"symbols"},libra:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u264e",fitzpatrick_scale:!1,category:"symbols"},scorpius:{keywords:["sign","zodiac","purple-square","astrology","scorpio"],char:"\u264f",fitzpatrick_scale:!1,category:"symbols"},sagittarius:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2650",fitzpatrick_scale:!1,category:"symbols"},capricorn:{keywords:["sign","zodiac","purple-square","astrology"],char:"\u2651",fitzpatrick_scale:!1,category:"symbols"},aquarius:{keywords:["sign","purple-square","zodiac","astrology"],char:"\u2652",fitzpatrick_scale:!1,category:"symbols"},pisces:{keywords:["purple-square","sign","zodiac","astrology"],char:"\u2653",fitzpatrick_scale:!1,category:"symbols"},id:{keywords:["purple-square","words"],char:"\u{1f194}",fitzpatrick_scale:!1,category:"symbols"},atom_symbol:{keywords:["science","physics","chemistry"],char:"\u269b",fitzpatrick_scale:!1,category:"symbols"},u7a7a:{keywords:["kanji","japanese","chinese","empty","sky","blue-square"],char:"\u{1f233}",fitzpatrick_scale:!1,category:"symbols"},u5272:{keywords:["cut","divide","chinese","kanji","pink-square"],char:"\u{1f239}",fitzpatrick_scale:!1,category:"symbols"},radioactive:{keywords:["nuclear","danger"],char:"\u2622",fitzpatrick_scale:!1,category:"symbols"},biohazard:{keywords:["danger"],char:"\u2623",fitzpatrick_scale:!1,category:"symbols"},mobile_phone_off:{keywords:["mute","orange-square","silence","quiet"],char:"\u{1f4f4}",fitzpatrick_scale:!1,category:"symbols"},vibration_mode:{keywords:["orange-square","phone"],char:"\u{1f4f3}",fitzpatrick_scale:!1,category:"symbols"},u6709:{keywords:["orange-square","chinese","have","kanji"],char:"\u{1f236}",fitzpatrick_scale:!1,category:"symbols"},u7121:{keywords:["nothing","chinese","kanji","japanese","orange-square"],char:"\u{1f21a}",fitzpatrick_scale:!1,category:"symbols"},u7533:{keywords:["chinese","japanese","kanji","orange-square"],char:"\u{1f238}",fitzpatrick_scale:!1,category:"symbols"},u55b6:{keywords:["japanese","opening hours","orange-square"],char:"\u{1f23a}",fitzpatrick_scale:!1,category:"symbols"},u6708:{keywords:["chinese","month","moon","japanese","orange-square","kanji"],char:"\u{1f237}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_pointed_black_star:{keywords:["orange-square","shape","polygon"],char:"\u2734\ufe0f",fitzpatrick_scale:!1,category:"symbols"},vs:{keywords:["words","orange-square"],char:"\u{1f19a}",fitzpatrick_scale:!1,category:"symbols"},accept:{keywords:["ok","good","chinese","kanji","agree","yes","orange-circle"],char:"\u{1f251}",fitzpatrick_scale:!1,category:"symbols"},white_flower:{keywords:["japanese","spring"],char:"\u{1f4ae}",fitzpatrick_scale:!1,category:"symbols"},ideograph_advantage:{keywords:["chinese","kanji","obtain","get","circle"],char:"\u{1f250}",fitzpatrick_scale:!1,category:"symbols"},secret:{keywords:["privacy","chinese","sshh","kanji","red-circle"],char:"\u3299\ufe0f",fitzpatrick_scale:!1,category:"symbols"},congratulations:{keywords:["chinese","kanji","japanese","red-circle"],char:"\u3297\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u5408:{keywords:["japanese","chinese","join","kanji","red-square"],char:"\u{1f234}",fitzpatrick_scale:!1,category:"symbols"},u6e80:{keywords:["full","chinese","japanese","red-square","kanji"],char:"\u{1f235}",fitzpatrick_scale:!1,category:"symbols"},u7981:{keywords:["kanji","japanese","chinese","forbidden","limit","restricted","red-square"],char:"\u{1f232}",fitzpatrick_scale:!1,category:"symbols"},a:{keywords:["red-square","alphabet","letter"],char:"\u{1f170}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},b:{keywords:["red-square","alphabet","letter"],char:"\u{1f171}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},ab:{keywords:["red-square","alphabet"],char:"\u{1f18e}",fitzpatrick_scale:!1,category:"symbols"},cl:{keywords:["alphabet","words","red-square"],char:"\u{1f191}",fitzpatrick_scale:!1,category:"symbols"},o2:{keywords:["alphabet","red-square","letter"],char:"\u{1f17e}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},sos:{keywords:["help","red-square","words","emergency","911"],char:"\u{1f198}",fitzpatrick_scale:!1,category:"symbols"},no_entry:{keywords:["limit","security","privacy","bad","denied","stop","circle"],char:"\u26d4",fitzpatrick_scale:!1,category:"symbols"},name_badge:{keywords:["fire","forbid"],char:"\u{1f4db}",fitzpatrick_scale:!1,category:"symbols"},no_entry_sign:{keywords:["forbid","stop","limit","denied","disallow","circle"],char:"\u{1f6ab}",fitzpatrick_scale:!1,category:"symbols"},x:{keywords:["no","delete","remove","cancel","red"],char:"\u274c",fitzpatrick_scale:!1,category:"symbols"},o:{keywords:["circle","round"],char:"\u2b55",fitzpatrick_scale:!1,category:"symbols"},stop_sign:{keywords:["stop"],char:"\u{1f6d1}",fitzpatrick_scale:!1,category:"symbols"},anger:{keywords:["angry","mad"],char:"\u{1f4a2}",fitzpatrick_scale:!1,category:"symbols"},hotsprings:{keywords:["bath","warm","relax"],char:"\u2668\ufe0f",fitzpatrick_scale:!1,category:"symbols"},no_pedestrians:{keywords:["rules","crossing","walking","circle"],char:"\u{1f6b7}",fitzpatrick_scale:!1,category:"symbols"},do_not_litter:{keywords:["trash","bin","garbage","circle"],char:"\u{1f6af}",fitzpatrick_scale:!1,category:"symbols"},no_bicycles:{keywords:["cyclist","prohibited","circle"],char:"\u{1f6b3}",fitzpatrick_scale:!1,category:"symbols"},"non-potable_water":{keywords:["drink","faucet","tap","circle"],char:"\u{1f6b1}",fitzpatrick_scale:!1,category:"symbols"},underage:{keywords:["18","drink","pub","night","minor","circle"],char:"\u{1f51e}",fitzpatrick_scale:!1,category:"symbols"},no_mobile_phones:{keywords:["iphone","mute","circle"],char:"\u{1f4f5}",fitzpatrick_scale:!1,category:"symbols"},exclamation:{keywords:["heavy_exclamation_mark","danger","surprise","punctuation","wow","warning"],char:"\u2757",fitzpatrick_scale:!1,category:"symbols"},grey_exclamation:{keywords:["surprise","punctuation","gray","wow","warning"],char:"\u2755",fitzpatrick_scale:!1,category:"symbols"},question:{keywords:["doubt","confused"],char:"\u2753",fitzpatrick_scale:!1,category:"symbols"},grey_question:{keywords:["doubts","gray","huh","confused"],char:"\u2754",fitzpatrick_scale:!1,category:"symbols"},bangbang:{keywords:["exclamation","surprise"],char:"\u203c\ufe0f",fitzpatrick_scale:!1,category:"symbols"},interrobang:{keywords:["wat","punctuation","surprise"],char:"\u2049\ufe0f",fitzpatrick_scale:!1,category:"symbols"},100:{keywords:["score","perfect","numbers","century","exam","quiz","test","pass","hundred"],char:"\u{1f4af}",fitzpatrick_scale:!1,category:"symbols"},low_brightness:{keywords:["sun","afternoon","warm","summer"],char:"\u{1f505}",fitzpatrick_scale:!1,category:"symbols"},high_brightness:{keywords:["sun","light"],char:"\u{1f506}",fitzpatrick_scale:!1,category:"symbols"},trident:{keywords:["weapon","spear"],char:"\u{1f531}",fitzpatrick_scale:!1,category:"symbols"},fleur_de_lis:{keywords:["decorative","scout"],char:"\u269c",fitzpatrick_scale:!1,category:"symbols"},part_alternation_mark:{keywords:["graph","presentation","stats","business","economics","bad"],char:"\u303d\ufe0f",fitzpatrick_scale:!1,category:"symbols"},warning:{keywords:["exclamation","wip","alert","error","problem","issue"],char:"\u26a0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},children_crossing:{keywords:["school","warning","danger","sign","driving","yellow-diamond"],char:"\u{1f6b8}",fitzpatrick_scale:!1,category:"symbols"},beginner:{keywords:["badge","shield"],char:"\u{1f530}",fitzpatrick_scale:!1,category:"symbols"},recycle:{keywords:["arrow","environment","garbage","trash"],char:"\u267b\ufe0f",fitzpatrick_scale:!1,category:"symbols"},u6307:{keywords:["chinese","point","green-square","kanji"],char:"\u{1f22f}",fitzpatrick_scale:!1,category:"symbols"},chart:{keywords:["green-square","graph","presentation","stats"],char:"\u{1f4b9}",fitzpatrick_scale:!1,category:"symbols"},sparkle:{keywords:["stars","green-square","awesome","good","fireworks"],char:"\u2747\ufe0f",fitzpatrick_scale:!1,category:"symbols"},eight_spoked_asterisk:{keywords:["star","sparkle","green-square"],char:"\u2733\ufe0f",fitzpatrick_scale:!1,category:"symbols"},negative_squared_cross_mark:{keywords:["x","green-square","no","deny"],char:"\u274e",fitzpatrick_scale:!1,category:"symbols"},white_check_mark:{keywords:["green-square","ok","agree","vote","election","answer","tick"],char:"\u2705",fitzpatrick_scale:!1,category:"symbols"},diamond_shape_with_a_dot_inside:{keywords:["jewel","blue","gem","crystal","fancy"],char:"\u{1f4a0}",fitzpatrick_scale:!1,category:"symbols"},cyclone:{keywords:["weather","swirl","blue","cloud","vortex","spiral","whirlpool","spin","tornado","hurricane","typhoon"],char:"\u{1f300}",fitzpatrick_scale:!1,category:"symbols"},loop:{keywords:["tape","cassette"],char:"\u27bf",fitzpatrick_scale:!1,category:"symbols"},globe_with_meridians:{keywords:["earth","international","world","internet","interweb","i18n"],char:"\u{1f310}",fitzpatrick_scale:!1,category:"symbols"},m:{keywords:["alphabet","blue-circle","letter"],char:"\u24c2\ufe0f",fitzpatrick_scale:!1,category:"symbols"},atm:{keywords:["money","sales","cash","blue-square","payment","bank"],char:"\u{1f3e7}",fitzpatrick_scale:!1,category:"symbols"},sa:{keywords:["japanese","blue-square","katakana"],char:"\u{1f202}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},passport_control:{keywords:["custom","blue-square"],char:"\u{1f6c2}",fitzpatrick_scale:!1,category:"symbols"},customs:{keywords:["passport","border","blue-square"],char:"\u{1f6c3}",fitzpatrick_scale:!1,category:"symbols"},baggage_claim:{keywords:["blue-square","airport","transport"],char:"\u{1f6c4}",fitzpatrick_scale:!1,category:"symbols"},left_luggage:{keywords:["blue-square","travel"],char:"\u{1f6c5}",fitzpatrick_scale:!1,category:"symbols"},wheelchair:{keywords:["blue-square","disabled","a11y","accessibility"],char:"\u267f",fitzpatrick_scale:!1,category:"symbols"},no_smoking:{keywords:["cigarette","blue-square","smell","smoke"],char:"\u{1f6ad}",fitzpatrick_scale:!1,category:"symbols"},wc:{keywords:["toilet","restroom","blue-square"],char:"\u{1f6be}",fitzpatrick_scale:!1,category:"symbols"},parking:{keywords:["cars","blue-square","alphabet","letter"],char:"\u{1f17f}\ufe0f",fitzpatrick_scale:!1,category:"symbols"},potable_water:{keywords:["blue-square","liquid","restroom","cleaning","faucet"],char:"\u{1f6b0}",fitzpatrick_scale:!1,category:"symbols"},mens:{keywords:["toilet","restroom","wc","blue-square","gender","male"],char:"\u{1f6b9}",fitzpatrick_scale:!1,category:"symbols"},womens:{keywords:["purple-square","woman","female","toilet","loo","restroom","gender"],char:"\u{1f6ba}",fitzpatrick_scale:!1,category:"symbols"},baby_symbol:{keywords:["orange-square","child"],char:"\u{1f6bc}",fitzpatrick_scale:!1,category:"symbols"},restroom:{keywords:["blue-square","toilet","refresh","wc","gender"],char:"\u{1f6bb}",fitzpatrick_scale:!1,category:"symbols"},put_litter_in_its_place:{keywords:["blue-square","sign","human","info"],char:"\u{1f6ae}",fitzpatrick_scale:!1,category:"symbols"},cinema:{keywords:["blue-square","record","film","movie","curtain","stage","theater"],char:"\u{1f3a6}",fitzpatrick_scale:!1,category:"symbols"},signal_strength:{keywords:["blue-square","reception","phone","internet","connection","wifi","bluetooth","bars"],char:"\u{1f4f6}",fitzpatrick_scale:!1,category:"symbols"},koko:{keywords:["blue-square","here","katakana","japanese","destination"],char:"\u{1f201}",fitzpatrick_scale:!1,category:"symbols"},ng:{keywords:["blue-square","words","shape","icon"],char:"\u{1f196}",fitzpatrick_scale:!1,category:"symbols"},ok:{keywords:["good","agree","yes","blue-square"],char:"\u{1f197}",fitzpatrick_scale:!1,category:"symbols"},up:{keywords:["blue-square","above","high"],char:"\u{1f199}",fitzpatrick_scale:!1,category:"symbols"},cool:{keywords:["words","blue-square"],char:"\u{1f192}",fitzpatrick_scale:!1,category:"symbols"},new:{keywords:["blue-square","words","start"],char:"\u{1f195}",fitzpatrick_scale:!1,category:"symbols"},free:{keywords:["blue-square","words"],char:"\u{1f193}",fitzpatrick_scale:!1,category:"symbols"},zero:{keywords:["0","numbers","blue-square","null"],char:"0\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},one:{keywords:["blue-square","numbers","1"],char:"1\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},two:{keywords:["numbers","2","prime","blue-square"],char:"2\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},three:{keywords:["3","numbers","prime","blue-square"],char:"3\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},four:{keywords:["4","numbers","blue-square"],char:"4\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},five:{keywords:["5","numbers","blue-square","prime"],char:"5\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},six:{keywords:["6","numbers","blue-square"],char:"6\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},seven:{keywords:["7","numbers","blue-square","prime"],char:"7\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},eight:{keywords:["8","blue-square","numbers"],char:"8\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},nine:{keywords:["blue-square","numbers","9"],char:"9\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},keycap_ten:{keywords:["numbers","10","blue-square"],char:"\u{1f51f}",fitzpatrick_scale:!1,category:"symbols"},asterisk:{keywords:["star","keycap"],char:"*\u20e3",fitzpatrick_scale:!1,category:"symbols"},1234:{keywords:["numbers","blue-square"],char:"\u{1f522}",fitzpatrick_scale:!1,category:"symbols"},eject_button:{keywords:["blue-square"],char:"\u23cf\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_forward:{keywords:["blue-square","right","direction","play"],char:"\u25b6\ufe0f",fitzpatrick_scale:!1,category:"symbols"},pause_button:{keywords:["pause","blue-square"],char:"\u23f8",fitzpatrick_scale:!1,category:"symbols"},next_track_button:{keywords:["forward","next","blue-square"],char:"\u23ed",fitzpatrick_scale:!1,category:"symbols"},stop_button:{keywords:["blue-square"],char:"\u23f9",fitzpatrick_scale:!1,category:"symbols"},record_button:{keywords:["blue-square"],char:"\u23fa",fitzpatrick_scale:!1,category:"symbols"},play_or_pause_button:{keywords:["blue-square","play","pause"],char:"\u23ef",fitzpatrick_scale:!1,category:"symbols"},previous_track_button:{keywords:["backward"],char:"\u23ee",fitzpatrick_scale:!1,category:"symbols"},fast_forward:{keywords:["blue-square","play","speed","continue"],char:"\u23e9",fitzpatrick_scale:!1,category:"symbols"},rewind:{keywords:["play","blue-square"],char:"\u23ea",fitzpatrick_scale:!1,category:"symbols"},twisted_rightwards_arrows:{keywords:["blue-square","shuffle","music","random"],char:"\u{1f500}",fitzpatrick_scale:!1,category:"symbols"},repeat:{keywords:["loop","record"],char:"\u{1f501}",fitzpatrick_scale:!1,category:"symbols"},repeat_one:{keywords:["blue-square","loop"],char:"\u{1f502}",fitzpatrick_scale:!1,category:"symbols"},arrow_backward:{keywords:["blue-square","left","direction"],char:"\u25c0\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_small:{keywords:["blue-square","triangle","direction","point","forward","top"],char:"\u{1f53c}",fitzpatrick_scale:!1,category:"symbols"},arrow_down_small:{keywords:["blue-square","direction","bottom"],char:"\u{1f53d}",fitzpatrick_scale:!1,category:"symbols"},arrow_double_up:{keywords:["blue-square","direction","top"],char:"\u23eb",fitzpatrick_scale:!1,category:"symbols"},arrow_double_down:{keywords:["blue-square","direction","bottom"],char:"\u23ec",fitzpatrick_scale:!1,category:"symbols"},arrow_right:{keywords:["blue-square","next"],char:"\u27a1\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_left:{keywords:["blue-square","previous","back"],char:"\u2b05\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up:{keywords:["blue-square","continue","top","direction"],char:"\u2b06\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_down:{keywords:["blue-square","direction","bottom"],char:"\u2b07\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_right:{keywords:["blue-square","point","direction","diagonal","northeast"],char:"\u2197\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_right:{keywords:["blue-square","direction","diagonal","southeast"],char:"\u2198\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_lower_left:{keywords:["blue-square","direction","diagonal","southwest"],char:"\u2199\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_upper_left:{keywords:["blue-square","point","direction","diagonal","northwest"],char:"\u2196\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_up_down:{keywords:["blue-square","direction","way","vertical"],char:"\u2195\ufe0f",fitzpatrick_scale:!1,category:"symbols"},left_right_arrow:{keywords:["shape","direction","horizontal","sideways"],char:"\u2194\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_counterclockwise:{keywords:["blue-square","sync","cycle"],char:"\u{1f504}",fitzpatrick_scale:!1,category:"symbols"},arrow_right_hook:{keywords:["blue-square","return","rotate","direction"],char:"\u21aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},leftwards_arrow_with_hook:{keywords:["back","return","blue-square","undo","enter"],char:"\u21a9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_up:{keywords:["blue-square","direction","top"],char:"\u2934\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrow_heading_down:{keywords:["blue-square","direction","bottom"],char:"\u2935\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hash:{keywords:["symbol","blue-square","twitter"],char:"#\ufe0f\u20e3",fitzpatrick_scale:!1,category:"symbols"},information_source:{keywords:["blue-square","alphabet","letter"],char:"\u2139\ufe0f",fitzpatrick_scale:!1,category:"symbols"},abc:{keywords:["blue-square","alphabet"],char:"\u{1f524}",fitzpatrick_scale:!1,category:"symbols"},abcd:{keywords:["blue-square","alphabet"],char:"\u{1f521}",fitzpatrick_scale:!1,category:"symbols"},capital_abcd:{keywords:["alphabet","words","blue-square"],char:"\u{1f520}",fitzpatrick_scale:!1,category:"symbols"},symbols:{keywords:["blue-square","music","note","ampersand","percent","glyphs","characters"],char:"\u{1f523}",fitzpatrick_scale:!1,category:"symbols"},musical_note:{keywords:["score","tone","sound"],char:"\u{1f3b5}",fitzpatrick_scale:!1,category:"symbols"},notes:{keywords:["music","score"],char:"\u{1f3b6}",fitzpatrick_scale:!1,category:"symbols"},wavy_dash:{keywords:["draw","line","moustache","mustache","squiggle","scribble"],char:"\u3030\ufe0f",fitzpatrick_scale:!1,category:"symbols"},curly_loop:{keywords:["scribble","draw","shape","squiggle"],char:"\u27b0",fitzpatrick_scale:!1,category:"symbols"},heavy_check_mark:{keywords:["ok","nike","answer","yes","tick"],char:"\u2714\ufe0f",fitzpatrick_scale:!1,category:"symbols"},arrows_clockwise:{keywords:["sync","cycle","round","repeat"],char:"\u{1f503}",fitzpatrick_scale:!1,category:"symbols"},heavy_plus_sign:{keywords:["math","calculation","addition","more","increase"],char:"\u2795",fitzpatrick_scale:!1,category:"symbols"},heavy_minus_sign:{keywords:["math","calculation","subtract","less"],char:"\u2796",fitzpatrick_scale:!1,category:"symbols"},heavy_division_sign:{keywords:["divide","math","calculation"],char:"\u2797",fitzpatrick_scale:!1,category:"symbols"},heavy_multiplication_x:{keywords:["math","calculation"],char:"\u2716\ufe0f",fitzpatrick_scale:!1,category:"symbols"},infinity:{keywords:["forever"],char:"\u267e",fitzpatrick_scale:!1,category:"symbols"},heavy_dollar_sign:{keywords:["money","sales","payment","currency","buck"],char:"\u{1f4b2}",fitzpatrick_scale:!1,category:"symbols"},currency_exchange:{keywords:["money","sales","dollar","travel"],char:"\u{1f4b1}",fitzpatrick_scale:!1,category:"symbols"},copyright:{keywords:["ip","license","circle","law","legal"],char:"\xa9\ufe0f",fitzpatrick_scale:!1,category:"symbols"},registered:{keywords:["alphabet","circle"],char:"\xae\ufe0f",fitzpatrick_scale:!1,category:"symbols"},tm:{keywords:["trademark","brand","law","legal"],char:"\u2122\ufe0f",fitzpatrick_scale:!1,category:"symbols"},end:{keywords:["words","arrow"],char:"\u{1f51a}",fitzpatrick_scale:!1,category:"symbols"},back:{keywords:["arrow","words","return"],char:"\u{1f519}",fitzpatrick_scale:!1,category:"symbols"},on:{keywords:["arrow","words"],char:"\u{1f51b}",fitzpatrick_scale:!1,category:"symbols"},top:{keywords:["words","blue-square"],char:"\u{1f51d}",fitzpatrick_scale:!1,category:"symbols"},soon:{keywords:["arrow","words"],char:"\u{1f51c}",fitzpatrick_scale:!1,category:"symbols"},ballot_box_with_check:{keywords:["ok","agree","confirm","black-square","vote","election","yes","tick"],char:"\u2611\ufe0f",fitzpatrick_scale:!1,category:"symbols"},radio_button:{keywords:["input","old","music","circle"],char:"\u{1f518}",fitzpatrick_scale:!1,category:"symbols"},white_circle:{keywords:["shape","round"],char:"\u26aa",fitzpatrick_scale:!1,category:"symbols"},black_circle:{keywords:["shape","button","round"],char:"\u26ab",fitzpatrick_scale:!1,category:"symbols"},red_circle:{keywords:["shape","error","danger"],char:"\u{1f534}",fitzpatrick_scale:!1,category:"symbols"},large_blue_circle:{keywords:["shape","icon","button"],char:"\u{1f535}",fitzpatrick_scale:!1,category:"symbols"},small_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f538}",fitzpatrick_scale:!1,category:"symbols"},small_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f539}",fitzpatrick_scale:!1,category:"symbols"},large_orange_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f536}",fitzpatrick_scale:!1,category:"symbols"},large_blue_diamond:{keywords:["shape","jewel","gem"],char:"\u{1f537}",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle:{keywords:["shape","direction","up","top"],char:"\u{1f53a}",fitzpatrick_scale:!1,category:"symbols"},black_small_square:{keywords:["shape","icon"],char:"\u25aa\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_small_square:{keywords:["shape","icon"],char:"\u25ab\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_large_square:{keywords:["shape","icon","button"],char:"\u2b1b",fitzpatrick_scale:!1,category:"symbols"},white_large_square:{keywords:["shape","icon","stone","button"],char:"\u2b1c",fitzpatrick_scale:!1,category:"symbols"},small_red_triangle_down:{keywords:["shape","direction","bottom"],char:"\u{1f53b}",fitzpatrick_scale:!1,category:"symbols"},black_medium_square:{keywords:["shape","button","icon"],char:"\u25fc\ufe0f",fitzpatrick_scale:!1,category:"symbols"},white_medium_square:{keywords:["shape","stone","icon"],char:"\u25fb\ufe0f",fitzpatrick_scale:!1,category:"symbols"},black_medium_small_square:{keywords:["icon","shape","button"],char:"\u25fe",fitzpatrick_scale:!1,category:"symbols"},white_medium_small_square:{keywords:["shape","stone","icon","button"],char:"\u25fd",fitzpatrick_scale:!1,category:"symbols"},black_square_button:{keywords:["shape","input","frame"],char:"\u{1f532}",fitzpatrick_scale:!1,category:"symbols"},white_square_button:{keywords:["shape","input"],char:"\u{1f533}",fitzpatrick_scale:!1,category:"symbols"},speaker:{keywords:["sound","volume","silence","broadcast"],char:"\u{1f508}",fitzpatrick_scale:!1,category:"symbols"},sound:{keywords:["volume","speaker","broadcast"],char:"\u{1f509}",fitzpatrick_scale:!1,category:"symbols"},loud_sound:{keywords:["volume","noise","noisy","speaker","broadcast"],char:"\u{1f50a}",fitzpatrick_scale:!1,category:"symbols"},mute:{keywords:["sound","volume","silence","quiet"],char:"\u{1f507}",fitzpatrick_scale:!1,category:"symbols"},mega:{keywords:["sound","speaker","volume"],char:"\u{1f4e3}",fitzpatrick_scale:!1,category:"symbols"},loudspeaker:{keywords:["volume","sound"],char:"\u{1f4e2}",fitzpatrick_scale:!1,category:"symbols"},bell:{keywords:["sound","notification","christmas","xmas","chime"],char:"\u{1f514}",fitzpatrick_scale:!1,category:"symbols"},no_bell:{keywords:["sound","volume","mute","quiet","silent"],char:"\u{1f515}",fitzpatrick_scale:!1,category:"symbols"},black_joker:{keywords:["poker","cards","game","play","magic"],char:"\u{1f0cf}",fitzpatrick_scale:!1,category:"symbols"},mahjong:{keywords:["game","play","chinese","kanji"],char:"\u{1f004}",fitzpatrick_scale:!1,category:"symbols"},spades:{keywords:["poker","cards","suits","magic"],char:"\u2660\ufe0f",fitzpatrick_scale:!1,category:"symbols"},clubs:{keywords:["poker","cards","magic","suits"],char:"\u2663\ufe0f",fitzpatrick_scale:!1,category:"symbols"},hearts:{keywords:["poker","cards","magic","suits"],char:"\u2665\ufe0f",fitzpatrick_scale:!1,category:"symbols"},diamonds:{keywords:["poker","cards","magic","suits"],char:"\u2666\ufe0f",fitzpatrick_scale:!1,category:"symbols"},flower_playing_cards:{keywords:["game","sunset","red"],char:"\u{1f3b4}",fitzpatrick_scale:!1,category:"symbols"},thought_balloon:{keywords:["bubble","cloud","speech","thinking","dream"],char:"\u{1f4ad}",fitzpatrick_scale:!1,category:"symbols"},right_anger_bubble:{keywords:["caption","speech","thinking","mad"],char:"\u{1f5ef}",fitzpatrick_scale:!1,category:"symbols"},speech_balloon:{keywords:["bubble","words","message","talk","chatting"],char:"\u{1f4ac}",fitzpatrick_scale:!1,category:"symbols"},left_speech_bubble:{keywords:["words","message","talk","chatting"],char:"\u{1f5e8}",fitzpatrick_scale:!1,category:"symbols"},clock1:{keywords:["time","late","early","schedule"],char:"\u{1f550}",fitzpatrick_scale:!1,category:"symbols"},clock2:{keywords:["time","late","early","schedule"],char:"\u{1f551}",fitzpatrick_scale:!1,category:"symbols"},clock3:{keywords:["time","late","early","schedule"],char:"\u{1f552}",fitzpatrick_scale:!1,category:"symbols"},clock4:{keywords:["time","late","early","schedule"],char:"\u{1f553}",fitzpatrick_scale:!1,category:"symbols"},clock5:{keywords:["time","late","early","schedule"],char:"\u{1f554}",fitzpatrick_scale:!1,category:"symbols"},clock6:{keywords:["time","late","early","schedule","dawn","dusk"],char:"\u{1f555}",fitzpatrick_scale:!1,category:"symbols"},clock7:{keywords:["time","late","early","schedule"],char:"\u{1f556}",fitzpatrick_scale:!1,category:"symbols"},clock8:{keywords:["time","late","early","schedule"],char:"\u{1f557}",fitzpatrick_scale:!1,category:"symbols"},clock9:{keywords:["time","late","early","schedule"],char:"\u{1f558}",fitzpatrick_scale:!1,category:"symbols"},clock10:{keywords:["time","late","early","schedule"],char:"\u{1f559}",fitzpatrick_scale:!1,category:"symbols"},clock11:{keywords:["time","late","early","schedule"],char:"\u{1f55a}",fitzpatrick_scale:!1,category:"symbols"},clock12:{keywords:["time","noon","midnight","midday","late","early","schedule"],char:"\u{1f55b}",fitzpatrick_scale:!1,category:"symbols"},clock130:{keywords:["time","late","early","schedule"],char:"\u{1f55c}",fitzpatrick_scale:!1,category:"symbols"},clock230:{keywords:["time","late","early","schedule"],char:"\u{1f55d}",fitzpatrick_scale:!1,category:"symbols"},clock330:{keywords:["time","late","early","schedule"],char:"\u{1f55e}",fitzpatrick_scale:!1,category:"symbols"},clock430:{keywords:["time","late","early","schedule"],char:"\u{1f55f}",fitzpatrick_scale:!1,category:"symbols"},clock530:{keywords:["time","late","early","schedule"],char:"\u{1f560}",fitzpatrick_scale:!1,category:"symbols"},clock630:{keywords:["time","late","early","schedule"],char:"\u{1f561}",fitzpatrick_scale:!1,category:"symbols"},clock730:{keywords:["time","late","early","schedule"],char:"\u{1f562}",fitzpatrick_scale:!1,category:"symbols"},clock830:{keywords:["time","late","early","schedule"],char:"\u{1f563}",fitzpatrick_scale:!1,category:"symbols"},clock930:{keywords:["time","late","early","schedule"],char:"\u{1f564}",fitzpatrick_scale:!1,category:"symbols"},clock1030:{keywords:["time","late","early","schedule"],char:"\u{1f565}",fitzpatrick_scale:!1,category:"symbols"},clock1130:{keywords:["time","late","early","schedule"],char:"\u{1f566}",fitzpatrick_scale:!1,category:"symbols"},clock1230:{keywords:["time","late","early","schedule"],char:"\u{1f567}",fitzpatrick_scale:!1,category:"symbols"},afghanistan:{keywords:["af","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},aland_islands:{keywords:["\xc5land","islands","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},albania:{keywords:["al","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},algeria:{keywords:["dz","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},american_samoa:{keywords:["american","ws","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},andorra:{keywords:["ad","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},angola:{keywords:["ao","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},anguilla:{keywords:["ai","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},antarctica:{keywords:["aq","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},antigua_barbuda:{keywords:["antigua","barbuda","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},argentina:{keywords:["ar","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},armenia:{keywords:["am","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},aruba:{keywords:["aw","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},australia:{keywords:["au","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},austria:{keywords:["at","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},azerbaijan:{keywords:["az","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},bahamas:{keywords:["bs","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},bahrain:{keywords:["bh","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},bangladesh:{keywords:["bd","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},barbados:{keywords:["bb","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},belarus:{keywords:["by","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},belgium:{keywords:["be","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},belize:{keywords:["bz","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},benin:{keywords:["bj","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},bermuda:{keywords:["bm","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},bhutan:{keywords:["bt","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},bolivia:{keywords:["bo","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},caribbean_netherlands:{keywords:["bonaire","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},bosnia_herzegovina:{keywords:["bosnia","herzegovina","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},botswana:{keywords:["bw","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},brazil:{keywords:["br","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},british_indian_ocean_territory:{keywords:["british","indian","ocean","territory","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},british_virgin_islands:{keywords:["british","virgin","islands","bvi","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},brunei:{keywords:["bn","darussalam","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},bulgaria:{keywords:["bg","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},burkina_faso:{keywords:["burkina","faso","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},burundi:{keywords:["bi","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},cape_verde:{keywords:["cabo","verde","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},cambodia:{keywords:["kh","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},cameroon:{keywords:["cm","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},canada:{keywords:["ca","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},canary_islands:{keywords:["canary","islands","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},cayman_islands:{keywords:["cayman","islands","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},central_african_republic:{keywords:["central","african","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},chad:{keywords:["td","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},chile:{keywords:["flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},cn:{keywords:["china","chinese","prc","flag","country","nation","banner"],char:"\u{1f1e8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},christmas_island:{keywords:["christmas","island","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},cocos_islands:{keywords:["cocos","keeling","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},colombia:{keywords:["co","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},comoros:{keywords:["km","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},congo_brazzaville:{keywords:["congo","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},congo_kinshasa:{keywords:["congo","democratic","republic","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},cook_islands:{keywords:["cook","islands","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},costa_rica:{keywords:["costa","rica","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},croatia:{keywords:["hr","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},cuba:{keywords:["cu","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},curacao:{keywords:["cura\xe7ao","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},cyprus:{keywords:["cy","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},czech_republic:{keywords:["cz","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},denmark:{keywords:["dk","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},djibouti:{keywords:["dj","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},dominica:{keywords:["dm","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},dominican_republic:{keywords:["dominican","republic","flag","nation","country","banner"],char:"\u{1f1e9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ecuador:{keywords:["ec","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},egypt:{keywords:["eg","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},el_salvador:{keywords:["el","salvador","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},equatorial_guinea:{keywords:["equatorial","gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},eritrea:{keywords:["er","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},estonia:{keywords:["ee","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ethiopia:{keywords:["et","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},eu:{keywords:["european","union","flag","banner"],char:"\u{1f1ea}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},falkland_islands:{keywords:["falkland","islands","malvinas","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},faroe_islands:{keywords:["faroe","islands","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},fiji:{keywords:["fj","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},finland:{keywords:["fi","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},fr:{keywords:["banner","flag","nation","france","french","country"],char:"\u{1f1eb}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},french_guiana:{keywords:["french","guiana","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_polynesia:{keywords:["french","polynesia","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},french_southern_territories:{keywords:["french","southern","territories","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},gabon:{keywords:["ga","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},gambia:{keywords:["gm","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},georgia:{keywords:["ge","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},de:{keywords:["german","nation","flag","country","banner"],char:"\u{1f1e9}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},ghana:{keywords:["gh","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},gibraltar:{keywords:["gi","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},greece:{keywords:["gr","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},greenland:{keywords:["gl","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},grenada:{keywords:["gd","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},guadeloupe:{keywords:["gp","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},guam:{keywords:["gu","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},guatemala:{keywords:["gt","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},guernsey:{keywords:["gg","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},guinea:{keywords:["gn","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},guinea_bissau:{keywords:["gw","bissau","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},guyana:{keywords:["gy","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},haiti:{keywords:["ht","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},honduras:{keywords:["hn","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},hong_kong:{keywords:["hong","kong","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},hungary:{keywords:["hu","flag","nation","country","banner"],char:"\u{1f1ed}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},iceland:{keywords:["is","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},india:{keywords:["in","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},indonesia:{keywords:["flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},iran:{keywords:["iran,","islamic","republic","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},iraq:{keywords:["iq","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},ireland:{keywords:["ie","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},isle_of_man:{keywords:["isle","man","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},israel:{keywords:["il","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},it:{keywords:["italy","flag","nation","country","banner"],char:"\u{1f1ee}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},cote_divoire:{keywords:["ivory","coast","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},jamaica:{keywords:["jm","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},jp:{keywords:["japanese","nation","flag","country","banner"],char:"\u{1f1ef}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},jersey:{keywords:["je","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},jordan:{keywords:["jo","flag","nation","country","banner"],char:"\u{1f1ef}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},kazakhstan:{keywords:["kz","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},kenya:{keywords:["ke","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},kiribati:{keywords:["ki","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},kosovo:{keywords:["xk","flag","nation","country","banner"],char:"\u{1f1fd}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},kuwait:{keywords:["kw","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},kyrgyzstan:{keywords:["kg","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},laos:{keywords:["lao","democratic","republic","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},latvia:{keywords:["lv","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},lebanon:{keywords:["lb","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},lesotho:{keywords:["ls","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},liberia:{keywords:["lr","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},libya:{keywords:["ly","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},liechtenstein:{keywords:["li","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},lithuania:{keywords:["lt","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},luxembourg:{keywords:["lu","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},macau:{keywords:["macao","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},macedonia:{keywords:["macedonia,","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},madagascar:{keywords:["mg","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},malawi:{keywords:["mw","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},malaysia:{keywords:["my","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},maldives:{keywords:["mv","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},mali:{keywords:["ml","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},malta:{keywords:["mt","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},marshall_islands:{keywords:["marshall","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},martinique:{keywords:["mq","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f6}",fitzpatrick_scale:!1,category:"flags"},mauritania:{keywords:["mr","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},mauritius:{keywords:["mu","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},mayotte:{keywords:["yt","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},mexico:{keywords:["mx","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},micronesia:{keywords:["micronesia,","federated","states","flag","nation","country","banner"],char:"\u{1f1eb}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},moldova:{keywords:["moldova,","republic","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},monaco:{keywords:["mc","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},mongolia:{keywords:["mn","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},montenegro:{keywords:["me","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},montserrat:{keywords:["ms","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},morocco:{keywords:["ma","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},mozambique:{keywords:["mz","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},myanmar:{keywords:["mm","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},namibia:{keywords:["na","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},nauru:{keywords:["nr","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},nepal:{keywords:["np","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},netherlands:{keywords:["nl","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},new_caledonia:{keywords:["new","caledonia","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},new_zealand:{keywords:["new","zealand","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},nicaragua:{keywords:["ni","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},niger:{keywords:["ne","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},nigeria:{keywords:["flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},niue:{keywords:["nu","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},norfolk_island:{keywords:["norfolk","island","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},northern_mariana_islands:{keywords:["northern","mariana","islands","flag","nation","country","banner"],char:"\u{1f1f2}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},north_korea:{keywords:["north","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f5}",fitzpatrick_scale:!1,category:"flags"},norway:{keywords:["no","flag","nation","country","banner"],char:"\u{1f1f3}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},oman:{keywords:["om_symbol","flag","nation","country","banner"],char:"\u{1f1f4}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},pakistan:{keywords:["pk","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},palau:{keywords:["pw","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},palestinian_territories:{keywords:["palestine","palestinian","territories","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},panama:{keywords:["pa","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},papua_new_guinea:{keywords:["papua","new","guinea","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},paraguay:{keywords:["py","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},peru:{keywords:["pe","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},philippines:{keywords:["ph","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},pitcairn_islands:{keywords:["pitcairn","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},poland:{keywords:["pl","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},portugal:{keywords:["pt","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},puerto_rico:{keywords:["puerto","rico","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},qatar:{keywords:["qa","flag","nation","country","banner"],char:"\u{1f1f6}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},reunion:{keywords:["r\xe9union","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},romania:{keywords:["ro","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},ru:{keywords:["russian","federation","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},rwanda:{keywords:["rw","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},st_barthelemy:{keywords:["saint","barth\xe9lemy","flag","nation","country","banner"],char:"\u{1f1e7}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},st_helena:{keywords:["saint","helena","ascension","tristan","cunha","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},st_kitts_nevis:{keywords:["saint","kitts","nevis","flag","nation","country","banner"],char:"\u{1f1f0}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},st_lucia:{keywords:["saint","lucia","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},st_pierre_miquelon:{keywords:["saint","pierre","miquelon","flag","nation","country","banner"],char:"\u{1f1f5}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},st_vincent_grenadines:{keywords:["saint","vincent","grenadines","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},samoa:{keywords:["ws","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},san_marino:{keywords:["san","marino","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},sao_tome_principe:{keywords:["sao","tome","principe","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},saudi_arabia:{keywords:["flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},senegal:{keywords:["sn","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},serbia:{keywords:["rs","flag","nation","country","banner"],char:"\u{1f1f7}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},seychelles:{keywords:["sc","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},sierra_leone:{keywords:["sierra","leone","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},singapore:{keywords:["sg","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},sint_maarten:{keywords:["sint","maarten","dutch","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fd}",fitzpatrick_scale:!1,category:"flags"},slovakia:{keywords:["sk","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},slovenia:{keywords:["si","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},solomon_islands:{keywords:["solomon","islands","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},somalia:{keywords:["so","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},south_africa:{keywords:["south","africa","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},south_georgia_south_sandwich_islands:{keywords:["south","georgia","sandwich","islands","flag","nation","country","banner"],char:"\u{1f1ec}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},kr:{keywords:["south","korea","nation","flag","country","banner"],char:"\u{1f1f0}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},south_sudan:{keywords:["south","sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},es:{keywords:["spain","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},sri_lanka:{keywords:["sri","lanka","flag","nation","country","banner"],char:"\u{1f1f1}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},sudan:{keywords:["sd","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1e9}",fitzpatrick_scale:!1,category:"flags"},suriname:{keywords:["sr","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},swaziland:{keywords:["sz","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},sweden:{keywords:["se","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},switzerland:{keywords:["ch","flag","nation","country","banner"],char:"\u{1f1e8}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},syria:{keywords:["syrian","arab","republic","flag","nation","country","banner"],char:"\u{1f1f8}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},taiwan:{keywords:["tw","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},tajikistan:{keywords:["tj","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ef}",fitzpatrick_scale:!1,category:"flags"},tanzania:{keywords:["tanzania,","united","republic","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},thailand:{keywords:["th","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},timor_leste:{keywords:["timor","leste","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f1}",fitzpatrick_scale:!1,category:"flags"},togo:{keywords:["tg","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},tokelau:{keywords:["tk","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f0}",fitzpatrick_scale:!1,category:"flags"},tonga:{keywords:["to","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f4}",fitzpatrick_scale:!1,category:"flags"},trinidad_tobago:{keywords:["trinidad","tobago","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f9}",fitzpatrick_scale:!1,category:"flags"},tunisia:{keywords:["tn","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},tr:{keywords:["turkey","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f7}",fitzpatrick_scale:!1,category:"flags"},turkmenistan:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},turks_caicos_islands:{keywords:["turks","caicos","islands","flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1e8}",fitzpatrick_scale:!1,category:"flags"},tuvalu:{keywords:["flag","nation","country","banner"],char:"\u{1f1f9}\u{1f1fb}",fitzpatrick_scale:!1,category:"flags"},uganda:{keywords:["ug","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ec}",fitzpatrick_scale:!1,category:"flags"},ukraine:{keywords:["ua","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},united_arab_emirates:{keywords:["united","arab","emirates","flag","nation","country","banner"],char:"\u{1f1e6}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},uk:{keywords:["united","kingdom","great","britain","northern","ireland","flag","nation","country","banner","british","UK","english","england","union jack"],char:"\u{1f1ec}\u{1f1e7}",fitzpatrick_scale:!1,category:"flags"},england:{keywords:["flag","english"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0065}\u{e006e}\u{e0067}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},scotland:{keywords:["flag","scottish"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0073}\u{e0063}\u{e0074}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},wales:{keywords:["flag","welsh"],char:"\u{1f3f4}\u{e0067}\u{e0062}\u{e0077}\u{e006c}\u{e0073}\u{e007f}",fitzpatrick_scale:!1,category:"flags"},us:{keywords:["united","states","america","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1f8}",fitzpatrick_scale:!1,category:"flags"},us_virgin_islands:{keywords:["virgin","islands","us","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ee}",fitzpatrick_scale:!1,category:"flags"},uruguay:{keywords:["uy","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1fe}",fitzpatrick_scale:!1,category:"flags"},uzbekistan:{keywords:["uz","flag","nation","country","banner"],char:"\u{1f1fa}\u{1f1ff}",fitzpatrick_scale:!1,category:"flags"},vanuatu:{keywords:["vu","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1fa}",fitzpatrick_scale:!1,category:"flags"},vatican_city:{keywords:["vatican","city","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1e6}",fitzpatrick_scale:!1,category:"flags"},venezuela:{keywords:["ve","bolivarian","republic","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},vietnam:{keywords:["viet","nam","flag","nation","country","banner"],char:"\u{1f1fb}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},wallis_futuna:{keywords:["wallis","futuna","flag","nation","country","banner"],char:"\u{1f1fc}\u{1f1eb}",fitzpatrick_scale:!1,category:"flags"},western_sahara:{keywords:["western","sahara","flag","nation","country","banner"],char:"\u{1f1ea}\u{1f1ed}",fitzpatrick_scale:!1,category:"flags"},yemen:{keywords:["ye","flag","nation","country","banner"],char:"\u{1f1fe}\u{1f1ea}",fitzpatrick_scale:!1,category:"flags"},zambia:{keywords:["zm","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1f2}",fitzpatrick_scale:!1,category:"flags"},zimbabwe:{keywords:["zw","flag","nation","country","banner"],char:"\u{1f1ff}\u{1f1fc}",fitzpatrick_scale:!1,category:"flags"},united_nations:{keywords:["un","flag","banner"],char:"\u{1f1fa}\u{1f1f3}",fitzpatrick_scale:!1,category:"flags"},pirate_flag:{keywords:["skull","crossbones","flag","banner"],char:"\u{1f3f4}\u200d\u2620\ufe0f",fitzpatrick_scale:!1,category:"flags"}}); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/emoticons/plugin.min.js b/src/assets/tinyMCE/plugins/emoticons/plugin.min.js deleted file mode 100644 index 69be32cf3..000000000 --- a/src/assets/tinyMCE/plugins/emoticons/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const e=t=>e=>t===e,o=e(null),n=e(void 0),s=()=>{},r=()=>!1;class a{constructor(t,e){this.tag=t,this.value=e}static some(t){return new a(!0,t)}static none(){return a.singletonNone}fold(t,e){return this.tag?e(this.value):t()}isSome(){return this.tag}isNone(){return!this.tag}map(t){return this.tag?a.some(t(this.value)):a.none()}bind(t){return this.tag?t(this.value):a.none()}exists(t){return this.tag&&t(this.value)}forall(t){return!this.tag||t(this.value)}filter(t){return!this.tag||t(this.value)?this:a.none()}getOr(t){return this.tag?this.value:t}or(t){return this.tag?this:t}getOrThunk(t){return this.tag?this.value:t()}orThunk(t){return this.tag?this:t()}getOrDie(t){if(this.tag)return this.value;throw new Error(null!=t?t:"Called getOrDie on None")}static from(t){return null==t?a.none():a.some(t)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(t){this.tag&&t(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}a.singletonNone=new a(!1);const i=(t,e)=>{const o=t.length,n=new Array(o);for(let s=0;s{let e=t;return{get:()=>e,set:t=>{e=t}}},c=Object.keys,u=Object.hasOwnProperty,g=(t,e)=>{const o=c(t);for(let n=0,s=o.length;nu.call(t,e),d=(h=(t,e)=>e,(...t)=>{if(0===t.length)throw new Error("Can't merge zero objects");const e={};for(let o=0;o{const t=(t=>{const e=l(a.none()),o=()=>e.get().each(t);return{clear:()=>{o(),e.set(a.none())},isSet:()=>e.get().isSome(),get:()=>e.get(),set:t=>{o(),e.set(a.some(t))}}})(s);return{...t,on:e=>t.get().each(e)}},v=(t,e,o=0,s)=>{const r=t.indexOf(e,o);return-1!==r&&(!!n(s)||r+e.length<=s)};var y=tinymce.util.Tools.resolve("tinymce.Resource");const f=t=>e=>e.options.get(t),b=f("emoticons_database"),w=f("emoticons_database_url"),C=f("emoticons_database_id"),_=f("emoticons_append"),j=f("emoticons_images_url"),k="All",A={symbols:"Symbols",people:"People",animals_and_nature:"Animals and Nature",food_and_drink:"Food and Drink",activity:"Activity",travel_and_places:"Travel and Places",objects:"Objects",flags:"Flags",user:"User Defined"},O=(t,e)=>m(t,e)?t[e]:e,x=t=>{const e=_(t);return o=t=>({keywords:[],category:"user",...t}),((t,e)=>{const o={};return g(t,((t,n)=>{const s=e(t,n);o[s.k]=s.v})),o})(e,((t,e)=>({k:e,v:o(t)})));var o},E=(t,e)=>v(t.title.toLowerCase(),e)||((t,o)=>{for(let o=0,s=t.length;o{const n=[],s=e.toLowerCase(),a=o.fold((()=>r),(t=>e=>e>=t));for(let o=0;o{const n={pattern:"",results:S(e.listAll(),"",a.some(300))},s=l(k),r=((t,e)=>{let n=null;const s=()=>{o(n)||(clearTimeout(n),n=null)};return{cancel:s,throttle:(...e)=>{s(),n=setTimeout((()=>{n=null,t.apply(null,e)}),200)}}})((t=>{(t=>{const o=t.getData(),n=s.get(),r=e.listCategory(n),i=S(r,o[L],n===k?a.some(300):a.none());t.setData({results:i})})(t)})),c={label:"Search",type:"input",name:L},u={type:"collection",name:"results"},g=()=>({title:"Emojis",size:"normal",body:{type:"tabpanel",tabs:i(e.listCategories(),(t=>({title:t,name:t,items:[c,u]})))},initialData:n,onTabChange:(t,e)=>{s.set(e.newTabName),r.throttle(t)},onChange:r.throttle,onAction:(e,o)=>{"results"===o.name&&(((t,e)=>{t.insertContent(e)})(t,o.value),e.close())},buttons:[{type:"cancel",text:"Close",primary:!0}]}),m=t.windowManager.open(g());m.focus(L),e.hasLoaded()||(m.block("Loading emojis..."),e.waitForLoad().then((()=>{m.redial(g()),r.throttle(m),m.focus(L),m.unblock()})).catch((t=>{m.redial({title:"Emojis",body:{type:"panel",items:[{type:"alertbanner",level:"error",icon:"warning",text:"Could not load emojis"}]},buttons:[{type:"cancel",text:"Close",primary:!0}],initialData:{pattern:"",results:[]}}),m.focus(L),m.unblock()})))},T=t=>e=>{const o=()=>{e.setEnabled(t.selection.isEditable())};return t.on("NodeChange",o),o(),()=>{t.off("NodeChange",o)}};t.add("emoticons",((t,e)=>{((t,e)=>{const o=t.options.register;o("emoticons_database",{processor:"string",default:"emojis"}),o("emoticons_database_url",{processor:"string",default:`${e}/js/${b(t)}${t.suffix}.js`}),o("emoticons_database_id",{processor:"string",default:"tinymce.plugins.emoticons"}),o("emoticons_append",{processor:"object",default:{}}),o("emoticons_images_url",{processor:"string",default:"https://twemoji.maxcdn.com/v/13.0.1/72x72/"})})(t,e);const o=((t,e,o)=>{const n=p(),s=p(),r=j(t),i=t=>{return o="=4&&e.substr(0,4)===o?t.char.replace(/src="([^"]+)"/,((t,e)=>`src="${r}${e}"`)):t.char;var e,o};t.on("init",(()=>{y.load(o,e).then((e=>{const o=x(t);(t=>{const e={},o=[];g(t,((t,n)=>{const s={title:n,keywords:t.keywords,char:i(t),category:O(A,t.category)},r=void 0!==e[s.category]?e[s.category]:[];e[s.category]=r.concat([s]),o.push(s)})),n.set(e),s.set(o)})(d(e,o))}),(t=>{console.log(`Failed to load emojis: ${t}`),n.set({}),s.set([])}))}));const l=()=>s.get().getOr([]),u=()=>n.isSet()&&s.isSet();return{listCategories:()=>[k].concat(c(n.get().getOr({}))),hasLoaded:u,waitForLoad:()=>u()?Promise.resolve(!0):new Promise(((t,o)=>{let n=15;const s=setInterval((()=>{u()?(clearInterval(s),t(!0)):(n--,n<0&&(console.log("Could not load emojis from url: "+e),clearInterval(s),o(!1)))}),100)})),listAll:l,listCategory:t=>t===k?l():n.get().bind((e=>a.from(e[t]))).getOr([])}})(t,w(t),C(t));((t,e)=>{t.addCommand("mceEmoticons",(()=>N(t,e)))})(t,o),(t=>{const e=()=>t.execCommand("mceEmoticons");t.ui.registry.addButton("emoticons",{tooltip:"Emojis",icon:"emoji",onAction:e,onSetup:T(t)}),t.ui.registry.addMenuItem("emoticons",{text:"Emojis...",icon:"emoji",onAction:e,onSetup:T(t)})})(t),((t,e)=>{t.ui.registry.addAutocompleter("emoticons",{trigger:":",columns:"auto",minChars:2,fetch:(t,o)=>e.waitForLoad().then((()=>{const n=e.listAll();return S(n,t,a.some(o))})),onAction:(e,o,n)=>{t.selection.setRng(o),t.insertContent(n),e.hide()}})})(t,o),(t=>{t.on("PreInit",(()=>{t.parser.addAttributeFilter("data-emoticon",(t=>{((t,e)=>{for(let e=0,n=t.length;e{let t=e;return{get:()=>t,set:e=>{t=e}}};var t=tinymce.util.Tools.resolve("tinymce.PluginManager");const n=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=r=e,(o=String).prototype.isPrototypeOf(n)||(null===(s=r.constructor)||void 0===s?void 0:s.name)===o.name)?"string":t;var n,r,o,s})(t)===e,r=e=>t=>typeof t===e,o=e=>t=>e===t,s=n("string"),i=n("array"),l=o(null),a=r("boolean"),c=o(void 0),u=e=>!(e=>null==e)(e),d=r("function"),m=r("number"),h=()=>{},g=e=>()=>e;function p(e,...t){return(...n)=>{const r=t.concat(n);return e.apply(null,r)}}const f=g(!1),v=g(!0);class w{constructor(e,t){this.tag=e,this.value=t}static some(e){return new w(!0,e)}static none(){return w.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?w.some(e(this.value)):w.none()}bind(e){return this.tag?e(this.value):w.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:w.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return u(e)?w.some(e):w.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}w.singletonNone=new w(!1);const y=t=>{const n=e(w.none()),r=()=>n.get().each(t);return{clear:()=>{r(),n.set(w.none())},isSet:()=>n.get().isSome(),get:()=>n.get(),set:e=>{r(),n.set(w.some(e))}}},b=()=>y((e=>e.unbind())),S=Array.prototype.push,x=(e,t)=>{const n=e.length,r=new Array(n);for(let o=0;o{for(let n=0,r=e.length;n{const n=[];for(let r=0,o=e.length;r((e,t,n)=>{for(let r=0,o=e.length;r{const o=e.indexOf(t,n);return-1!==o&&(!!c(r)||o+t.length<=r)},C=e=>void 0!==e.style&&d(e.style.getPropertyValue),A=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},R=A;"undefined"!=typeof window?window:Function("return this;")();const L=e=>t=>(e=>e.dom.nodeType)(t)===e,M=L(1),N=L(3),P=L(9),D=L(11),W=(e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}},q=e=>R(e.dom.ownerDocument),H=e=>x(e.dom.childNodes,R),I=d(Element.prototype.attachShadow)&&d(Node.prototype.getRootNode),B=g(I),V=I?e=>R(e.dom.getRootNode()):e=>P(e)?e:q(e),_=e=>{const t=V(e);return D(n=t)&&u(n.dom.host)?w.some(t):w.none();var n},j=e=>R(e.dom.host),z=e=>{const t=N(e)?e.dom.parentNode:e.dom;if(null==t||null===t.ownerDocument)return!1;const n=t.ownerDocument;return _(R(t)).fold((()=>n.body.contains(t)),(r=z,o=j,e=>r(o(e))));var r,o},$=(e,t)=>{const n=e.dom.getAttribute(t);return null===n?void 0:n},U=(e,t)=>{e.dom.removeAttribute(t)},K=(e,t)=>{const n=e.dom;((e,t)=>{const n=T(e);for(let r=0,o=n.length;r{((e,t,n)=>{if(!s(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);C(e)&&e.style.setProperty(t,n)})(n,t,e)}))},X=e=>{const t=R((e=>{if(B()&&u(e.target)){const t=R(e.target);if(M(t)&&u(t.dom.shadowRoot)&&e.composed&&e.composedPath){const t=e.composedPath();if(t)return((e,t)=>0e.stopPropagation(),r=()=>e.preventDefault(),o=(s=r,i=n,(...e)=>s(i.apply(null,e)));var s,i;return((e,t,n,r,o,s,i)=>({target:e,x:t,y:n,stop:r,prevent:o,kill:s,raw:i}))(t,e.clientX,e.clientY,n,r,o,e)},Y=(e,t,n,r)=>{e.dom.removeEventListener(t,n,r)},G=v,J=(e,t,n)=>((e,t,n,r)=>((e,t,n,r,o)=>{const s=((e,t)=>n=>{e(n)&&t(X(n))})(n,r);return e.dom.addEventListener(t,s,o),{unbind:p(Y,e,t,s,o)}})(e,t,n,r,!1))(e,t,G,n),Q=()=>Z(0,0),Z=(e,t)=>({major:e,minor:t}),ee={nu:Z,detect:(e,t)=>{const n=String(t).toLowerCase();return 0===e.length?Q():((e,t)=>{const n=((e,t)=>{for(let n=0;nNumber(t.replace(n,"$"+e));return Z(r(1),r(2))})(e,n)},unknown:Q},te=(e,t)=>{const n=String(t).toLowerCase();return O(e,(e=>e.search(n)))},ne=/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,re=e=>t=>k(t,e),oe=[{name:"Edge",versionRegexes:[/.*?edge\/ ?([0-9]+)\.([0-9]+)$/],search:e=>k(e,"edge/")&&k(e,"chrome")&&k(e,"safari")&&k(e,"applewebkit")},{name:"Chromium",brand:"Chromium",versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/,ne],search:e=>k(e,"chrome")&&!k(e,"chromeframe")},{name:"IE",versionRegexes:[/.*?msie\ ?([0-9]+)\.([0-9]+).*/,/.*?rv:([0-9]+)\.([0-9]+).*/],search:e=>k(e,"msie")||k(e,"trident")},{name:"Opera",versionRegexes:[ne,/.*?opera\/([0-9]+)\.([0-9]+).*/],search:re("opera")},{name:"Firefox",versionRegexes:[/.*?firefox\/\ ?([0-9]+)\.([0-9]+).*/],search:re("firefox")},{name:"Safari",versionRegexes:[ne,/.*?cpu os ([0-9]+)_([0-9]+).*/],search:e=>(k(e,"safari")||k(e,"mobile/"))&&k(e,"applewebkit")}],se=[{name:"Windows",search:re("win"),versionRegexes:[/.*?windows\ nt\ ?([0-9]+)\.([0-9]+).*/]},{name:"iOS",search:e=>k(e,"iphone")||k(e,"ipad"),versionRegexes:[/.*?version\/\ ?([0-9]+)\.([0-9]+).*/,/.*cpu os ([0-9]+)_([0-9]+).*/,/.*cpu iphone os ([0-9]+)_([0-9]+).*/]},{name:"Android",search:re("android"),versionRegexes:[/.*?android\ ?([0-9]+)\.([0-9]+).*/]},{name:"macOS",search:re("mac os x"),versionRegexes:[/.*?mac\ os\ x\ ?([0-9]+)_([0-9]+).*/]},{name:"Linux",search:re("linux"),versionRegexes:[]},{name:"Solaris",search:re("sunos"),versionRegexes:[]},{name:"FreeBSD",search:re("freebsd"),versionRegexes:[]},{name:"ChromeOS",search:re("cros"),versionRegexes:[/.*?chrome\/([0-9]+)\.([0-9]+).*/]}],ie={browsers:g(oe),oses:g(se)},le="Edge",ae="Chromium",ce="Opera",ue="Firefox",de="Safari",me=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isEdge:r(le),isChromium:r(ae),isIE:r("IE"),isOpera:r(ce),isFirefox:r(ue),isSafari:r(de)}},he=()=>me({current:void 0,version:ee.unknown()}),ge=me,pe=(g(le),g(ae),g("IE"),g(ce),g(ue),g(de),"Windows"),fe="Android",ve="Linux",we="macOS",ye="Solaris",be="FreeBSD",Se="ChromeOS",xe=e=>{const t=e.current,n=e.version,r=e=>()=>t===e;return{current:t,version:n,isWindows:r(pe),isiOS:r("iOS"),isAndroid:r(fe),isMacOS:r(we),isLinux:r(ve),isSolaris:r(ye),isFreeBSD:r(be),isChromeOS:r(Se)}},Ee=()=>xe({current:void 0,version:ee.unknown()}),Fe=xe,Oe=(g(pe),g("iOS"),g(fe),g(ve),g(we),g(ye),g(be),g(Se),(e,t,n)=>{const r=ie.browsers(),o=ie.oses(),s=t.bind((e=>((e,t)=>((e,t)=>{for(let n=0;n{const n=t.brand.toLowerCase();return O(e,(e=>{var t;return n===(null===(t=e.brand)||void 0===t?void 0:t.toLowerCase())})).map((e=>({current:e.name,version:ee.nu(parseInt(t.version,10),0)})))})))(r,e))).orThunk((()=>((e,t)=>te(e,t).map((e=>{const n=ee.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(r,e))).fold(he,ge),i=((e,t)=>te(e,t).map((e=>{const n=ee.detect(e.versionRegexes,t);return{current:e.name,version:n}})))(o,e).fold(Ee,Fe),l=((e,t,n,r)=>{const o=e.isiOS()&&!0===/ipad/i.test(n),s=e.isiOS()&&!o,i=e.isiOS()||e.isAndroid(),l=i||r("(pointer:coarse)"),a=o||!s&&i&&r("(min-device-width:768px)"),c=s||i&&!a,u=t.isSafari()&&e.isiOS()&&!1===/safari/i.test(n),d=!c&&!a&&!u;return{isiPad:g(o),isiPhone:g(s),isTablet:g(a),isPhone:g(c),isTouch:g(l),isAndroid:e.isAndroid,isiOS:e.isiOS,isWebView:g(u),isDesktop:g(d)}})(i,s,e,n);return{browser:s,os:i,deviceType:l}}),Te=e=>window.matchMedia(e).matches;let ke=(e=>{let t,n=!1;return(...r)=>(n||(n=!0,t=e.apply(null,r)),t)})((()=>Oe(navigator.userAgent,w.from(navigator.userAgentData),Te)));const Ce=(e,t)=>({left:e,top:t,translate:(n,r)=>Ce(e+n,t+r)}),Ae=Ce,Re=e=>{const t=void 0===e?window:e;return ke().browser.isFirefox()?w.none():w.from(t.visualViewport)},Le=(e,t,n,r)=>({x:e,y:t,width:n,height:r,right:e+n,bottom:t+r}),Me=e=>{const t=void 0===e?window:e,n=t.document,r=(e=>{const t=void 0!==e?e.dom:document,n=t.body.scrollLeft||t.documentElement.scrollLeft,r=t.body.scrollTop||t.documentElement.scrollTop;return Ae(n,r)})(R(n));return Re(t).fold((()=>{const e=t.document.documentElement,n=e.clientWidth,o=e.clientHeight;return Le(r.left,r.top,n,o)}),(e=>Le(Math.max(e.pageLeft,r.left),Math.max(e.pageTop,r.top),e.width,e.height)))},Ne=(e,t,n)=>Re(n).map((n=>{const r=e=>t(X(e));return n.addEventListener(e,r),{unbind:()=>n.removeEventListener(e,r)}})).getOrThunk((()=>({unbind:h})));var Pe=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),De=tinymce.util.Tools.resolve("tinymce.Env");const We=(e,t)=>{e.dispatch("FullscreenStateChanged",{state:t}),e.dispatch("ResizeEditor")},qe=("fullscreen_native",e=>e.options.get("fullscreen_native"));const He=e=>{return e.dom===(void 0!==(t=q(e).dom).fullscreenElement?t.fullscreenElement:void 0!==t.msFullscreenElement?t.msFullscreenElement:void 0!==t.webkitFullscreenElement?t.webkitFullscreenElement:null);var t},Ie=(e,t,n)=>((e,t,n)=>F(((e,t)=>{const n=d(t)?t:f;let r=e.dom;const o=[];for(;null!==r.parentNode&&void 0!==r.parentNode;){const e=r.parentNode,t=R(e);if(o.push(t),!0===n(t))break;r=e}return o})(e,n),t))(e,(e=>W(e,t)),n),Be=(e,t)=>((e,n)=>{return F((e=>w.from(e.dom.parentNode).map(R))(r=e).map(H).map((e=>F(e,(e=>{return t=e,!(r.dom===t.dom);var t})))).getOr([]),(e=>W(e,t)));var r})(e),Ve="data-ephox-mobile-fullscreen-style",_e="position:absolute!important;",je="top:0!important;left:0!important;margin:0!important;padding:0!important;width:100%!important;height:100%!important;overflow:visible!important;",ze=De.os.isAndroid(),$e=e=>{const t=((e,t)=>{const n=e.dom,r=window.getComputedStyle(n).getPropertyValue(t);return""!==r||z(e)?r:((e,t)=>C(e)?e.style.getPropertyValue(t):"")(n,t)})(e,"background-color");return void 0!==t&&""!==t?"background-color:"+t+"!important":"background-color:rgb(255,255,255)!important;"},Ue=Pe.DOM,Ke=Re().fold((()=>({bind:h,unbind:h})),(e=>{const t=(()=>{const e=y(h);return{...e,on:t=>e.get().each(t)}})(),n=b(),r=b(),o=((e,t)=>{let n=null;return{cancel:()=>{l(n)||(clearTimeout(n),n=null)},throttle:(...t)=>{l(n)&&(n=setTimeout((()=>{n=null,e.apply(null,t)}),50))}}})((()=>{document.body.scrollTop=0,document.documentElement.scrollTop=0,window.requestAnimationFrame((()=>{t.on((t=>K(t,{top:e.offsetTop+"px",left:e.offsetLeft+"px",height:e.height+"px",width:e.width+"px"})))}))}));return{bind:e=>{t.set(e),o.throttle(),n.set(Ne("resize",o.throttle)),r.set(Ne("scroll",o.throttle))},unbind:()=>{t.on((()=>{n.clear(),r.clear()})),t.clear()}}})),Xe=(e,t)=>{const n=document.body,r=document.documentElement,o=e.getContainer(),l=R(o),c=(e=>{const t=R(e.getElement());return _(t).map(j).getOrThunk((()=>(e=>{const t=e.dom.body;if(null==t)throw new Error("Body is not available yet");return R(t)})(q(t))))})(e),u=t.get(),d=R(e.getBody()),h=De.deviceType.isTouch(),g=o.style,p=e.iframeElement,f=null==p?void 0:p.style,v=e=>{e(n,"tox-fullscreen"),e(r,"tox-fullscreen"),e(o,"tox-fullscreen"),_(l).map((e=>j(e).dom)).each((t=>{e(t,"tox-fullscreen"),e(t,"tox-shadowhost")}))},y=()=>{h&&(e=>{const t=((e,t)=>{const n=document;return 1!==(r=n).nodeType&&9!==r.nodeType&&11!==r.nodeType||0===r.childElementCount?[]:x(n.querySelectorAll(e),R);var r})("["+Ve+"]");E(t,(t=>{const n=$(t,Ve);n&&"no-styles"!==n?K(t,e.parseStyle(n)):U(t,"style"),U(t,Ve)}))})(e.dom),v(Ue.removeClass),Ke.unbind(),w.from(t.get()).each((e=>e.fullscreenChangeHandler.unbind()))};if(u)u.fullscreenChangeHandler.unbind(),qe(e)&&He(c)&&(e=>{const t=e.dom;t.exitFullscreen?t.exitFullscreen():t.msExitFullscreen?t.msExitFullscreen():t.webkitCancelFullScreen&&t.webkitCancelFullScreen()})(q(c)),f.width=u.iframeWidth,f.height=u.iframeHeight,g.width=u.containerWidth,g.height=u.containerHeight,g.top=u.containerTop,g.left=u.containerLeft,y(),b=u.scrollPos,window.scrollTo(b.x,b.y),t.set(null),We(e,!1),e.off("remove",y);else{const n=J(q(c),void 0!==document.fullscreenElement?"fullscreenchange":void 0!==document.msFullscreenElement?"MSFullscreenChange":void 0!==document.webkitFullscreenElement?"webkitfullscreenchange":"fullscreenchange",(n=>{qe(e)&&(He(c)||null===t.get()||Xe(e,t))})),r={scrollPos:Me(window),containerWidth:g.width,containerHeight:g.height,containerTop:g.top,containerLeft:g.left,iframeWidth:f.width,iframeHeight:f.height,fullscreenChangeHandler:n};h&&((e,t,n)=>{const r=t=>n=>{const r=$(n,"style"),o=void 0===r?"no-styles":r.trim();o!==t&&(((e,t,n)=>{((e,t,n)=>{if(!(s(n)||a(n)||m(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(e.dom,t,n)})(n,Ve,o),K(n,e.parseStyle(t)))},o=Ie(t,"*"),l=(e=>{const t=[];for(let n=0,r=e.length;nBe(e,"*:not(.tox-silver-sink)")))),c=$e(n);E(l,r("display:none!important;")),E(o,r(_e+je+c)),r((!0===ze?"":_e)+je+c)(t)})(e.dom,l,d),f.width=f.height="100%",g.width=g.height="",v(Ue.addClass),Ke.bind(l),e.on("remove",y),t.set(r),qe(e)&&(e=>{const t=e.dom;t.requestFullscreen?t.requestFullscreen():t.msRequestFullscreen?t.msRequestFullscreen():t.webkitRequestFullScreen&&t.webkitRequestFullScreen()})(c),We(e,!0)}var b},Ye=(e,t)=>n=>{n.setActive(null!==t.get());const r=e=>n.setActive(e.state);return e.on("FullscreenStateChanged",r),()=>e.off("FullscreenStateChanged",r)};t.add("fullscreen",(t=>{const n=e(null);return t.inline||((e=>{(0,e.options.register)("fullscreen_native",{processor:"boolean",default:!1})})(t),((e,t)=>{e.addCommand("mceFullScreen",(()=>{Xe(e,t)}))})(t,n),((e,t)=>{const n=()=>e.execCommand("mceFullScreen");e.ui.registry.addToggleMenuItem("fullscreen",{text:"Fullscreen",icon:"fullscreen",shortcut:"Meta+Shift+F",onAction:n,onSetup:Ye(e,t)}),e.ui.registry.addToggleButton("fullscreen",{tooltip:"Fullscreen",icon:"fullscreen",onAction:n,onSetup:Ye(e,t)})})(t,n),t.addShortcut("Meta+Shift+F","","mceFullScreen")),(e=>({isFullscreen:()=>null!==e.get()}))(n)}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ar.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ar.js deleted file mode 100644 index e6ae0e81f..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ar.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.ar', -'

بدء التنقل بواسطة لوحة المفاتيح

\n' + - '\n' + - '
\n' + - '
التركيز على شريط القوائم
\n' + - '
نظاما التشغيل Windows أو Linux: Alt + F9
\n' + - '
نظام التشغيل macOS: ⌥F9
\n' + - '
التركيز على شريط الأدوات
\n' + - '
نظاما التشغيل Windows أو Linux: Alt + F10
\n' + - '
نظام التشغيل macOS: ⌥F10
\n' + - '
التركيز على التذييل
\n' + - '
نظاما التشغيل Windows أو Linux: Alt + F11
\n' + - '
نظام التشغيل macOS: ⌥F11
\n' + - '
التركيز على شريط أدوات السياق
\n' + - '
أنظمة التشغيل Windows أو Linux أو macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

سيبدأ التنقل عند عنصر واجهة المستخدم الأول، والذي سيتم تمييزه أو تسطيره في حالة العنصر الأول في\n' + - ' مسار عنصر التذييل.

\n' + - '\n' + - '

التنقل بين أقسام واجهة المستخدم

\n' + - '\n' + - '

للانتقال من أحد أقسام واجهة المستخدم إلى القسم التالي، اضغط على Tab.

\n' + - '\n' + - '

للانتقال من أحد أقسام واجهة المستخدم إلى القسم السابق، اضغط على Shift+Tab.

\n' + - '\n' + - '

ترتيب علامات Tab لأقسام واجهة المستخدم هذه هو:\n' + - '\n' + - '

    \n' + - '
  1. شريط القوائم
  2. \n' + - '
  3. كل مجموعة شريط الأدوات
  4. \n' + - '
  5. الشريط الجانبي
  6. \n' + - '
  7. مسار العنصر في التذييل
  8. \n' + - '
  9. زر تبديل عدد الكلمات في التذييل
  10. \n' + - '
  11. رابط إدراج العلامة التجارية في التذييل
  12. \n' + - '
  13. مؤشر تغيير حجم المحرر في التذييل
  14. \n' + - '
\n' + - '\n' + - '

إذا لم يكن قسم واجهة المستخدم موجودًا، فسيتم تخطيه.

\n' + - '\n' + - '

إذا كان التذييل يحتوي على التركيز على ‏‫التنقل بواسطة لوحة المفاتيح، ولا يوجد شريط جانبي مرئي، فإن الضغط على Shift+Tab\n' + - ' ينقل التركيز إلى مجموعة شريط الأدوات الأولى، وليس الأخيرة.\n' + - '\n' + - '

التنقل بين أقسام واجهة المستخدم

\n' + - '\n' + - '

للانتقال من أحد عناصر واجهة المستخدم إلى العنصر التالي، اضغط على مفتاح السهم المناسب.

\n' + - '\n' + - '

مفتاحا السهمين اليسار‎ واليمين‎

\n' + - '\n' + - '
    \n' + - '
  • التنقل بين القوائم في شريط القوائم.
  • \n' + - '
  • فتح قائمة فرعية في القائمة.
  • \n' + - '
  • التنقل بين الأزرار في مجموعة شريط الأدوات.
  • \n' + - '
  • التنقل بين العناصر في مسار عنصر التذييل.
  • \n' + - '
\n' + - '\n' + - '

مفتاحا السهمين لأسفل‎ ولأعلى‎\n' + - '\n' + - '

    \n' + - '
  • التنقل بين عناصر القائمة في القائمة.
  • \n' + - '
  • التنقل بين العناصر في قائمة شريط الأدوات المنبثقة.
  • \n' + - '
\n' + - '\n' + - '

دورة مفاتيح الأسهم‎ داخل قسم واجهة المستخدم التي تم التركيز عليها.

\n' + - '\n' + - '

لإغلاق قائمة مفتوحة أو قائمة فرعية مفتوحة أو قائمة منبثقة مفتوحة، اضغط على مفتاح Esc.\n' + - '\n' + - '

إذا كان التركيز الحالي على "الجزء العلوي" من قسم معين لواجهة المستخدم، فإن الضغط على مفتاح Esc يؤدي أيضًا إلى الخروج\n' + - ' من التنقل بواسطة لوحة المفاتيح بالكامل.

\n' + - '\n' + - '

تنفيذ عنصر قائمة أو زر شريط أدوات

\n' + - '\n' + - '

عندما يتم تمييز عنصر القائمة المطلوب أو زر شريط الأدوات، اضغط على زر Return، أو Enter،\n' + - ' أو مفتاح المسافة لتنفيذ العنصر.\n' + - '\n' + - '

التنقل في مربعات الحوار غير المبوبة

\n' + - '\n' + - '

في مربعات الحوار غير المبوبة، يتم التركيز على المكون التفاعلي الأول عند فتح مربع الحوار.

\n' + - '\n' + - '

التنقل بين مكونات الحوار التفاعلي بالضغط على زر Tab أو Shift+Tab.

\n' + - '\n' + - '

التنقل في مربعات الحوار المبوبة

\n' + - '\n' + - '

في مربعات الحوار المبوبة، يتم التركيز على الزر الأول في قائمة علامات التبويب عند فتح مربع الحوار.

\n' + - '\n' + - '

التنقل بين المكونات التفاعلية لعلامة التبويب لمربع الحوار هذه بالضغط على زر Tab أو\n' + - ' Shift+Tab.

\n' + - '\n' + - '

التبديل إلى علامة تبويب أخرى لمربع الحوار من خلال التركيز على قائمة علامة التبويب ثم الضغط على زر السهم المناسب\n' + - ' مفتاح للتنقل بين علامات التبويب المتاحة.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/bg_BG.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/bg_BG.js deleted file mode 100644 index ad904db1a..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/bg_BG.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.bg_BG', -'

Начало на навигацията с клавиатурата

\n' + - '\n' + - '
\n' + - '
Фокусиране върху лентата с менюта
\n' + - '
Windows или Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Фокусиране върху лентата с инструменти
\n' + - '
Windows или Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Фокусиране върху долния колонтитул
\n' + - '
Windows или Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Фокусиране върху контекстуалната лента с инструменти
\n' + - '
Windows, Linux или macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Навигацията ще започне с първия елемент на ПИ, който ще бъде маркиран или подчертан в случая на първия елемент в\n' + - ' пътя до елемента в долния колонтитул.

\n' + - '\n' + - '

Навигиране между раздели на ПИ

\n' + - '\n' + - '

За да преминете от един раздел на ПИ към следващия, натиснете Tab.

\n' + - '\n' + - '

За да преминете от един раздел на ПИ към предишния, натиснете Shift+Tab.

\n' + - '\n' + - '

Редът за обхождане с табулация на тези раздели на ПИ е:\n' + - '\n' + - '

    \n' + - '
  1. Лентата с менюта
  2. \n' + - '
  3. Всяка група на лентата с инструменти
  4. \n' + - '
  5. Страничната лента
  6. \n' + - '
  7. Пътят до елемента в долния колонтитул
  8. \n' + - '
  9. Бутонът за превключване на броя на думите в долния колонтитул
  10. \n' + - '
  11. Връзката за търговска марка в долния колонтитул
  12. \n' + - '
  13. Манипулаторът за преоразмеряване на редактора в долния колонтитул
  14. \n' + - '
\n' + - '\n' + - '

Ако някой раздел на ПИ липсва, той се пропуска.

\n' + - '\n' + - '

Ако долният колонтитул има фокус за навигация с клавиатурата и няма странична лента, натискането на Shift+Tab\n' + - ' премества фокуса към първата група на лентата с инструменти, а не към последната.\n' + - '\n' + - '

Навигиране в разделите на ПИ

\n' + - '\n' + - '

За да преминете от един елемент на ПИ към следващия, натиснете съответния клавиш със стрелка.

\n' + - '\n' + - '

С клавишите със стрелка наляво и надясно

\n' + - '\n' + - '
    \n' + - '
  • се придвижвате между менютата в лентата с менюто;
  • \n' + - '
  • отваряте подменю в меню;
  • \n' + - '
  • се придвижвате между бутоните в група на лентата с инструменти;
  • \n' + - '
  • се придвижвате между елементи в пътя до елемент в долния колонтитул.
  • \n' + - '
\n' + - '\n' + - '

С клавишите със стрелка надолу и нагоре\n' + - '\n' + - '

    \n' + - '
  • се придвижвате между елементите от менюто в дадено меню;
  • \n' + - '
  • се придвижвате между елементите в изскачащо меню на лентата с инструменти.
  • \n' + - '
\n' + - '\n' + - '

Клавишите със стрелки се придвижват в рамките на фокусирания раздел на ПИ.

\n' + - '\n' + - '

За да затворите отворено меню, подменю или изскачащо меню, натиснете клавиша Esc.\n' + - '\n' + - '

Ако текущият фокус е върху „горната част“ на конкретен раздел на ПИ, натискането на клавиша Esc също излиза\n' + - ' напълно от навигацията с клавиатурата.

\n' + - '\n' + - '

Изпълнение на елемент от менюто или бутон от лентата с инструменти

\n' + - '\n' + - '

Когато желаният елемент от менюто или бутон от лентата с инструменти е маркиран, натиснете Return, Enter\n' + - ' или клавиша за интервал, за да изпълните елемента.\n' + - '\n' + - '

Навигиране в диалогови прозорци без раздели

\n' + - '\n' + - '

В диалоговите прозорци без раздели първият интерактивен компонент се фокусира, когато се отвори диалоговият прозорец.

\n' + - '\n' + - '

Навигирайте между интерактивните компоненти на диалоговия прозорец, като натиснете Tab или Shift+Tab.

\n' + - '\n' + - '

Навигиране в диалогови прозорци с раздели

\n' + - '\n' + - '

В диалоговите прозорци с раздели първият бутон в менюто с раздели се фокусира, когато се отвори диалоговият прозорец.

\n' + - '\n' + - '

Навигирайте между интерактивните компоненти на този диалогов раздел, като натиснете Tab или\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Превключете към друг диалогов раздел, като фокусирате върху менюто с раздели и след това натиснете съответния клавиш със стрелка,\n' + - ' за да преминете през наличните раздели.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ca.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ca.js deleted file mode 100644 index 6d9ad54a5..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ca.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.ca', -'

Inici de la navegació amb el teclat

\n' + - '\n' + - '
\n' + - '
Enfocar la barra de menús
\n' + - '
Windows o Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - "
Enfocar la barra d'eines
\n" + - '
Windows o Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Enfocar el peu de pàgina
\n' + - '
Windows o Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - "
Enfocar una barra d'eines contextual
\n" + - '
Windows, Linux o macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - "

La navegació començarà en el primer element de la interfície d'usuari, que es ressaltarà o subratllarà per al primer element a\n" + - " la ruta de l'element de peu de pàgina.

\n" + - '\n' + - "

Navegació entre seccions de la interfície d'usuari

\n" + - '\n' + - "

Per desplaçar-vos des d'una secció de la interfície d'usuari a la següent, premeu la tecla Tab.

\n" + - '\n' + - "

Per desplaçar-vos des d'una secció de la interfície d'usuari a l'anterior, premeu les tecles Maj+Tab.

\n" + - '\n' + - "

L'ordre en prémer la tecla Tab d'aquestes secciones de la interfície d'usuari és:\n" + - '\n' + - '

    \n' + - '
  1. Barra de menús
  2. \n' + - "
  3. Cada grup de la barra d'eines
  4. \n" + - '
  5. Barra lateral
  6. \n' + - "
  7. Ruta de l'element del peu de pàgina
  8. \n" + - '
  9. Botó de commutació de recompte de paraules al peu de pàgina
  10. \n' + - '
  11. Enllaç de marca del peu de pàgina
  12. \n' + - "
  13. Control de canvi de mida de l'editor al peu de pàgina
  14. \n" + - '
\n' + - '\n' + - "

Si no hi ha una secció de la interfície d'usuari, s'ometrà.

\n" + - '\n' + - '

Si el peu de pàgina té el focus de navegació del teclat i no hi ha cap barra lateral visible, en prémer Maj+Tab\n' + - " el focus es mou al primer grup de la barra d'eines, no l'últim.\n" + - '\n' + - "

Navegació dins de les seccions de la interfície d'usuari

\n" + - '\n' + - "

Per desplaçar-vos des d'un element de la interfície d'usuari al següent, premeu la tecla de Fletxa adequada.

\n" + - '\n' + - '

Les tecles de fletxa Esquerra i Dreta

\n' + - '\n' + - '
    \n' + - '
  • us permeten desplaçar-vos entre menús de la barra de menús.
  • \n' + - '
  • obren un submenú en un menú.
  • \n' + - "
  • us permeten desplaçar-vos entre botons d'un grup de la barra d'eines.
  • \n" + - "
  • us permeten desplaçar-vos entre elements de la ruta d'elements del peu de pàgina.
  • \n" + - '
\n' + - '\n' + - '

Les tecles de fletxa Avall i Amunt\n' + - '\n' + - '

    \n' + - "
  • us permeten desplaçar-vos entre elements de menú d'un menú.
  • \n" + - "
  • us permeten desplaçar-vos entre elements d'un menú emergent de la barra d'eines.
  • \n" + - '
\n' + - '\n' + - "

Les tecles de Fletxa us permeten desplaçar-vos dins de la secció de la interfície d'usuari que té el focus.

\n" + - '\n' + - '

Per tancar un menú, un submenú o un menú emergent oberts, premeu la tecla Esc.\n' + - '\n' + - "

Si el focus actual es troba a la ‘part superior’ d'una secció específica de la interfície d'usuari, en prémer la tecla Esc també es tanca\n" + - ' completament la navegació amb el teclat.

\n' + - '\n' + - "

Execució d'un element de menú o d'un botó de la barra d'eines

\n" + - '\n' + - "

Quan l'element del menú o el botó de la barra d'eines que desitgeu estigui ressaltat, premeu Retorn, Intro\n" + - " o la barra d'espai per executar l'element.\n" + - '\n' + - '

Navegació per quadres de diàleg sense pestanyes

\n' + - '\n' + - "

En els quadres de diàleg sense pestanyes, el primer component interactiu pren el focus quan s'obre el quadre diàleg.

\n" + - '\n' + - '

Premeu la tecla Tab o les tecles Maj+Tab per desplaçar-vos entre components interactius del quadre de diàleg.

\n' + - '\n' + - '

Navegació per quadres de diàleg amb pestanyes

\n' + - '\n' + - "

En els quadres de diàleg amb pestanyes, el primer botó del menú de la pestanya pren el focus quan s'obre el quadre diàleg.

\n" + - '\n' + - "

Per desplaçar-vos entre components interactius d'aquest quadre de diàleg, premeu la tecla Tab o\n" + - ' les tecles Maj+Tab.

\n' + - '\n' + - "

Canvieu a la pestanya d'un altre quadre de diàleg, tot enfocant el menú de la pestanya, i després premeu la tecla Fletxa adequada\n" + - ' per canviar entre les pestanyes disponibles.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/cs.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/cs.js deleted file mode 100644 index e9103f7ab..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/cs.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.cs', -'

Začínáme navigovat pomocí klávesnice

\n' + - '\n' + - '
\n' + - '
Přejít na řádek nabídek
\n' + - '
Windows nebo Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Přejít na panel nástrojů
\n' + - '
Windows nebo Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Přejít na zápatí
\n' + - '
Windows nebo Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Přejít na kontextový panel nástrojů
\n' + - '
Windows, Linux nebo macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigace začne u první položky uživatelského rozhraní, která bude zvýrazněna nebo v případě první položky\n' + - ' cesty k prvku zápatí podtržena.

\n' + - '\n' + - '

Navigace mezi oddíly uživatelského rozhraní

\n' + - '\n' + - '

Stisknutím klávesy Tab se posunete z jednoho oddílu uživatelského rozhraní na další.

\n' + - '\n' + - '

Stisknutím kláves Shift+Tab se posunete z jednoho oddílu uživatelského rozhraní na předchozí.

\n' + - '\n' + - '

Pořadí přepínání mezi oddíly uživatelského rozhraní pomocí klávesy Tab:\n' + - '\n' + - '

    \n' + - '
  1. Řádek nabídek
  2. \n' + - '
  3. Každá skupina panelu nástrojů
  4. \n' + - '
  5. Boční panel
  6. \n' + - '
  7. Cesta k prvku v zápatí.
  8. \n' + - '
  9. Tlačítko přepínače počtu slov v zápatí
  10. \n' + - '
  11. Odkaz na informace o značce v zápatí
  12. \n' + - '
  13. Úchyt pro změnu velikosti editoru v zápatí
  14. \n' + - '
\n' + - '\n' + - '

Pokud nějaký oddíl uživatelského rozhraní není přítomen, je přeskočen.

\n' + - '\n' + - '

Pokud je zápatí vybrané pro navigaci pomocí klávesnice a není zobrazen žádný boční panel, stisknutím kláves Shift+Tab\n' + - ' přejdete na první skupinu panelu nástrojů, nikoli na poslední.\n' + - '\n' + - '

Navigace v rámci oddílů uživatelského rozhraní

\n' + - '\n' + - '

Chcete-li se přesunout z jednoho prvku uživatelského rozhraní na další, stiskněte příslušnou klávesu s šipkou.

\n' + - '\n' + - '

Klávesy s šipkou vlevovpravo

\n' + - '\n' + - '
    \n' + - '
  • umožňují přesun mezi nabídkami na řádku nabídek;
  • \n' + - '
  • otevírají podnabídku nabídky;
  • \n' + - '
  • umožňují přesun mezi tlačítky ve skupině panelu nástrojů;
  • \n' + - '
  • umožňují přesun mezi položkami cesty prvku v zápatí.
  • \n' + - '
\n' + - '\n' + - '

Klávesy se šipkou dolůnahoru\n' + - '\n' + - '

    \n' + - '
  • umožňují přesun mezi položkami nabídky;
  • \n' + - '
  • umožňují přesun mezi položkami místní nabídky panelu nástrojů.
  • \n' + - '
\n' + - '\n' + - '

Šipky provádí přepínání v rámci vybraného oddílu uživatelského rozhraní.

\n' + - '\n' + - '

Chcete-li zavřít otevřenou nabídku, podnabídku nebo místní nabídku, stiskněte klávesu Esc.\n' + - '\n' + - '

Pokud je aktuálně vybrána horní část oddílu uživatelského rozhraní, stisknutím klávesy Esc zcela ukončíte také\n' + - ' navigaci pomocí klávesnice.

\n' + - '\n' + - '

Provedení příkazu položky nabídky nebo tlačítka panelu nástrojů

\n' + - '\n' + - '

Pokud je zvýrazněna požadovaná položka nabídky nebo tlačítko panelu nástrojů, stisknutím klávesy Return, Enter\n' + - ' nebo mezerníku provedete příslušný příkaz.\n' + - '\n' + - '

Navigace v dialogových oknech bez záložek

\n' + - '\n' + - '

Při otevření dialogových oken bez záložek přejdete na první interaktivní komponentu.

\n' + - '\n' + - '

Přecházet mezi interaktivními komponentami dialogového okna můžete stisknutím klávesy Tab nebo kombinace Shift+Tab.

\n' + - '\n' + - '

Navigace v dialogových oknech se záložkami

\n' + - '\n' + - '

Při otevření dialogových oken se záložkami přejdete na první tlačítko v nabídce záložek.

\n' + - '\n' + - '

Přecházet mezi interaktivními komponentami této záložky dialogového okna můžete stisknutím klávesy Tab nebo\n' + - ' kombinace Shift+Tab.

\n' + - '\n' + - '

Chcete-li přepnout na další záložku dialogového okna, přejděte na nabídku záložek a poté můžete stisknutím požadované šipky\n' + - ' přepínat mezi dostupnými záložkami.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/da.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/da.js deleted file mode 100644 index f3989a0da..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/da.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.da', -'

Start tastaturnavigation

\n' + - '\n' + - '
\n' + - '
Fokuser på menulinjen
\n' + - '
Windows eller Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fokuser på værktøjslinjen
\n' + - '
Windows eller Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fokuser på sidefoden
\n' + - '
Windows eller Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fokuser på kontekstuel værktøjslinje
\n' + - '
Windows, Linux eller macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigationen starter ved det første UI-element, som fremhæves eller understreges hvad angår det første element i\n' + - ' sidefodens sti til elementet.

\n' + - '\n' + - '

Naviger mellem UI-sektioner

\n' + - '\n' + - '

Gå fra én UI-sektion til den næste ved at trykke på Tab.

\n' + - '\n' + - '

Gå fra én UI-sektion til den forrige ved at trykke på Shift+Tab.

\n' + - '\n' + - '

Tab-rækkefølgen af disse UI-sektioner er:\n' + - '\n' + - '

    \n' + - '
  1. Menulinje
  2. \n' + - '
  3. Hver værktøjsgruppe
  4. \n' + - '
  5. Sidepanel
  6. \n' + - '
  7. Sti til elementet i sidefoden
  8. \n' + - '
  9. Til/fra-knap for ordoptælling i sidefoden
  10. \n' + - '
  11. Brandinglink i sidefoden
  12. \n' + - '
  13. Tilpasningshåndtag for editor i sidefoden
  14. \n' + - '
\n' + - '\n' + - '

Hvis en UI-sektion ikke er til stede, springes den over.

\n' + - '\n' + - '

Hvis sidefoden har fokus til tastaturnavigation, og der ikke er noget synligt sidepanel, kan der trykkes på Shift+Tab\n' + - ' for at flytte fokus til den første værktøjsgruppe, ikke den sidste.\n' + - '\n' + - '

Naviger inden for UI-sektioner

\n' + - '\n' + - '

Gå fra ét UI-element til det næste ved at trykke på den relevante piletast.

\n' + - '\n' + - '

Venstre og højre piletast

\n' + - '\n' + - '
    \n' + - '
  • flytter mellem menuerne i menulinjen.
  • \n' + - '
  • åbner en undermenu i en menu.
  • \n' + - '
  • flytter mellem knapperne i en værktøjsgruppe.
  • \n' + - '
  • flytter mellem elementer i sidefodens sti til elementet.
  • \n' + - '
\n' + - '\n' + - '

Pil ned og op\n' + - '\n' + - '

    \n' + - '
  • flytter mellem menupunkterne i en menu.
  • \n' + - '
  • flytter mellem punkterne i en genvejsmenu i værktøjslinjen.
  • \n' + - '
\n' + - '\n' + - '

Piletasterne kører rundt inden for UI-sektionen, der fokuseres på.

\n' + - '\n' + - '

For at lukke en åben menu, en åben undermenu eller en åben genvejsmenu trykkes der på Esc-tasten.\n' + - '\n' + - "

Hvis det aktuelle fokus er i 'toppen' af en bestemt UI-sektion, vil tryk på Esc-tasten også afslutte\n" + - ' tastaturnavigationen helt.

\n' + - '\n' + - '

Udfør et menupunkt eller en værktøjslinjeknap

\n' + - '\n' + - '

Når det ønskede menupunkt eller den ønskede værktøjslinjeknap er fremhævet, trykkes der på Retur, Enter\n' + - ' eller mellemrumstasten for at udføre elementet.\n' + - '\n' + - '

Naviger i ikke-faneopdelte dialogbokse

\n' + - '\n' + - '

I ikke-faneopdelte dialogbokse får den første interaktive komponent fokus, når dialogboksen åbnes.

\n' + - '\n' + - '

Naviger mellem interaktive dialogbokskomponenter ved at trykke på Tab eller Shift+Tab.

\n' + - '\n' + - '

Naviger i faneopdelte dialogbokse

\n' + - '\n' + - '

I faneopdelte dialogbokse får den første knap i fanemenuen fokus, når dialogboksen åbnes.

\n' + - '\n' + - '

Naviger mellem interaktive komponenter i denne dialogboksfane ved at trykke på Tab eller\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Skift til en anden dialogboksfane ved at fokusere på fanemenuen og derefter trykke på den relevante piletast\n' + - ' for at køre igennem de tilgængelige faner.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/de.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/de.js deleted file mode 100644 index 9f0c5dbb3..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/de.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.de', -'

Grundlagen der Tastaturnavigation

\n' + - '\n' + - '
\n' + - '
Fokus auf Menüleiste
\n' + - '
Windows oder Linux: ALT+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fokus auf Symbolleiste
\n' + - '
Windows oder Linux: ALT+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fokus auf Fußzeile
\n' + - '
Windows oder Linux: ALT+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fokus auf kontextbezogene Symbolleiste
\n' + - '
Windows, Linux oder macOS: STRG+F9\n' + - '
\n' + - '\n' + - '

Die Navigation beginnt beim ersten Benutzeroberflächenelement, welches hervorgehoben ist. Falls sich das erste Element im Pfad der Fußzeile befindet,\n' + - ' ist es unterstrichen.

\n' + - '\n' + - '

Zwischen Abschnitten der Benutzeroberfläche navigieren

\n' + - '\n' + - '

Um von einem Abschnitt der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie TAB.

\n' + - '\n' + - '

Um von einem Abschnitt der Benutzeroberfläche zum vorherigen zu wechseln, drücken Sie UMSCHALT+TAB.

\n' + - '\n' + - '

Die Abschnitte der Benutzeroberfläche haben folgende TAB-Reihenfolge:\n' + - '\n' + - '

    \n' + - '
  1. Menüleiste
  2. \n' + - '
  3. Einzelne Gruppen der Symbolleiste
  4. \n' + - '
  5. Randleiste
  6. \n' + - '
  7. Elementpfad in der Fußzeile
  8. \n' + - '
  9. Umschaltfläche „Wörter zählen“ in der Fußzeile
  10. \n' + - '
  11. Branding-Link in der Fußzeile
  12. \n' + - '
  13. Editor-Ziehpunkt zur Größenänderung in der Fußzeile
  14. \n' + - '
\n' + - '\n' + - '

Falls ein Abschnitt der Benutzeroberflächen nicht vorhanden ist, wird er übersprungen.

\n' + - '\n' + - '

Wenn in der Fußzeile die Tastaturnavigation fokussiert ist und keine Randleiste angezeigt wird, wechselt der Fokus durch Drücken von UMSCHALT+TAB\n' + - ' zur ersten Gruppe der Symbolleiste, nicht zur letzten.\n' + - '\n' + - '

Innerhalb von Abschnitten der Benutzeroberfläche navigieren

\n' + - '\n' + - '

Um von einem Element der Benutzeroberfläche zum nächsten zu wechseln, drücken Sie die entsprechende Pfeiltaste.

\n' + - '\n' + - '

Die Pfeiltasten Links und Rechts

\n' + - '\n' + - '
    \n' + - '
  • wechseln zwischen Menüs in der Menüleiste.
  • \n' + - '
  • öffnen das Untermenü eines Menüs.
  • \n' + - '
  • wechseln zwischen Schaltflächen in einer Gruppe der Symbolleiste.
  • \n' + - '
  • wechseln zwischen Elementen im Elementpfad der Fußzeile.
  • \n' + - '
\n' + - '\n' + - '

Die Pfeiltasten Abwärts und Aufwärts\n' + - '\n' + - '

    \n' + - '
  • wechseln zwischen Menüelementen in einem Menü.
  • \n' + - '
  • wechseln zwischen Elementen in einem Popupmenü der Symbolleiste.
  • \n' + - '
\n' + - '\n' + - '

Die Pfeiltasten rotieren innerhalb des fokussierten Abschnitts der Benutzeroberfläche.

\n' + - '\n' + - '

Um ein geöffnetes Menü, ein geöffnetes Untermenü oder ein geöffnetes Popupmenü zu schließen, drücken Sie die ESC-Taste.\n' + - '\n' + - '

Wenn sich der aktuelle Fokus ganz oben in einem bestimmten Abschnitt der Benutzeroberfläche befindet, wird durch Drücken der ESC-Taste auch\n' + - ' die Tastaturnavigation beendet.

\n' + - '\n' + - '

Ein Menüelement oder eine Symbolleistenschaltfläche ausführen

\n' + - '\n' + - '

Wenn das gewünschte Menüelement oder die gewünschte Symbolleistenschaltfläche hervorgehoben ist, drücken Sie Zurück, Eingabe\n' + - ' oder die Leertaste, um das Element auszuführen.\n' + - '\n' + - '

In Dialogfeldern ohne Registerkarten navigieren

\n' + - '\n' + - '

In Dialogfeldern ohne Registerkarten ist beim Öffnen eines Dialogfelds die erste interaktive Komponente fokussiert.

\n' + - '\n' + - '

Navigieren Sie zwischen den interaktiven Komponenten eines Dialogfelds, indem Sie TAB oder UMSCHALT+TAB drücken.

\n' + - '\n' + - '

In Dialogfeldern mit Registerkarten navigieren

\n' + - '\n' + - '

In Dialogfeldern mit Registerkarten ist beim Öffnen eines Dialogfelds die erste Schaltfläche eines Registerkartenmenüs fokussiert.

\n' + - '\n' + - '

Navigieren Sie zwischen den interaktiven Komponenten auf dieser Registerkarte des Dialogfelds, indem Sie TAB oder\n' + - ' UMSCHALT+TAB drücken.

\n' + - '\n' + - '

Wechseln Sie zu einer anderen Registerkarte des Dialogfelds, indem Sie den Fokus auf das Registerkartenmenü legen und dann die entsprechende Pfeiltaste\n' + - ' drücken, um durch die verfügbaren Registerkarten zu rotieren.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/el.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/el.js deleted file mode 100644 index df75ec271..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/el.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.el', -'

Έναρξη πλοήγησης μέσω πληκτρολογίου

\n' + - '\n' + - '
\n' + - '
Εστίαση στη γραμμή μενού
\n' + - '
Windows ή Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Εστίαση στη γραμμή εργαλείων
\n' + - '
Windows ή Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Εστίαση στο υποσέλιδο
\n' + - '
Windows ή Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Εστίαση σε γραμμή εργαλείων βάσει περιεχομένου
\n' + - '
Windows, Linux ή macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Η πλοήγηση θα ξεκινήσει από το πρώτο στοιχείο περιβάλλοντος χρήστη, που θα επισημαίνεται ή θα είναι υπογραμμισμένο,\n' + - ' όπως στην περίπτωση της διαδρομής του στοιχείου Υποσέλιδου.

\n' + - '\n' + - '

Πλοήγηση μεταξύ ενοτήτων του περιβάλλοντος χρήστη

\n' + - '\n' + - '

Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην επόμενη, πιέστε το πλήκτρο Tab.

\n' + - '\n' + - '

Για να μετακινηθείτε από μια ενότητα περιβάλλοντος χρήστη στην προηγούμενη, πιέστε τα πλήκτρα Shift+Tab.

\n' + - '\n' + - '

Η σειρά Tab αυτών των ενοτήτων περιβάλλοντος χρήστη είναι η εξής:\n' + - '\n' + - '

    \n' + - '
  1. Γραμμή μενού
  2. \n' + - '
  3. Κάθε ομάδα γραμμής εργαλείων
  4. \n' + - '
  5. Πλαϊνή γραμμή
  6. \n' + - '
  7. Διαδρομή στοιχείου στο υποσέλιδο
  8. \n' + - '
  9. Κουμπί εναλλαγής μέτρησης λέξεων στο υποσέλιδο
  10. \n' + - '
  11. Σύνδεσμος επωνυμίας στο υποσέλιδο
  12. \n' + - '
  13. Λαβή αλλαγής μεγέθους προγράμματος επεξεργασίας στο υποσέλιδο
  14. \n' + - '
\n' + - '\n' + - '

Εάν δεν εμφανίζεται ενότητα περιβάλλοντος χρήστη, παραλείπεται.

\n' + - '\n' + - '

Εάν η εστίαση πλοήγησης βρίσκεται στο πληκτρολόγιο και δεν υπάρχει εμφανής πλαϊνή γραμμή, εάν πιέσετε Shift+Tab\n' + - ' η εστίαση μετακινείται στην πρώτη ομάδα γραμμής εργαλείων, όχι στην τελευταία.\n' + - '\n' + - '

Πλοήγηση εντός των ενοτήτων του περιβάλλοντος χρήστη

\n' + - '\n' + - '

Για να μετακινηθείτε από ένα στοιχείο περιβάλλοντος χρήστη στο επόμενο, πιέστε το αντίστοιχο πλήκτρο βέλους.

\n' + - '\n' + - '

Με τα πλήκτρα αριστερού και δεξιού βέλους

\n' + - '\n' + - '
    \n' + - '
  • γίνεται μετακίνηση μεταξύ των μενού στη γραμμή μενού.
  • \n' + - '
  • ανοίγει ένα υπομενού σε ένα μενού.
  • \n' + - '
  • γίνεται μετακίνηση μεταξύ κουμπιών σε μια ομάδα γραμμής εργαλείων.
  • \n' + - '
  • γίνεται μετακίνηση μεταξύ στοιχείων στη διαδρομή στοιχείου στο υποσέλιδο.
  • \n' + - '
\n' + - '\n' + - '

Με τα πλήκτρα επάνω και κάτω βέλους\n' + - '\n' + - '

    \n' + - '
  • γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα μενού.
  • \n' + - '
  • γίνεται μετακίνηση μεταξύ των στοιχείων μενού σε ένα αναδυόμενο μενού γραμμής εργαλείων.
  • \n' + - '
\n' + - '\n' + - '

Με τα πλήκτρα βέλους γίνεται κυκλική μετακίνηση εντός της εστιασμένης ενότητας περιβάλλοντος χρήστη.

\n' + - '\n' + - '

Για να κλείσετε ένα ανοιχτό μενού, ένα ανοιχτό υπομενού ή ένα ανοιχτό αναδυόμενο μενού, πιέστε το πλήκτρο Esc.\n' + - '\n' + - '

Εάν η τρέχουσα εστίαση βρίσκεται στην κορυφή μιας ενότητας περιβάλλοντος χρήστη, πιέζοντας το πλήκτρο Esc,\n' + - ' γίνεται επίσης πλήρης έξοδος από την πλοήγηση μέσω πληκτρολογίου.

\n' + - '\n' + - '

Εκτέλεση ενός στοιχείου μενού ή κουμπιού γραμμής εργαλείων

\n' + - '\n' + - '

Όταν το επιθυμητό στοιχείο μενού ή κουμπί γραμμής εργαλείων είναι επισημασμένο, πιέστε τα πλήκτρα Return, Enter,\n' + - ' ή το πλήκτρο διαστήματος για να εκτελέσετε το στοιχείο.\n' + - '\n' + - '

Πλοήγηση σε παράθυρα διαλόγου χωρίς καρτέλες

\n' + - '\n' + - '

Σε παράθυρα διαλόγου χωρίς καρτέλες, το πρώτο αλληλεπιδραστικό στοιχείο λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.

\n' + - '\n' + - '

Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων παραθύρων διαλόγων πιέζοντας τα πλήκτρα Tab ή Shift+Tab.

\n' + - '\n' + - '

Πλοήγηση σε παράθυρα διαλόγου με καρτέλες

\n' + - '\n' + - '

Σε παράθυρα διαλόγου με καρτέλες, το πρώτο κουμπί στο μενού καρτέλας λαμβάνει την εστίαση όταν ανοίγει το παράθυρο διαλόγου.

\n' + - '\n' + - '

Μπορείτε να πλοηγηθείτε μεταξύ των αλληλεπιδραστικών στοιχείων αυτής της καρτέλα διαλόγου πιέζοντας τα πλήκτρα Tab ή\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Μπορείτε να κάνετε εναλλαγή σε άλλη καρτέλα του παραθύρου διαλόγου, μεταφέροντας την εστίαση στο μενού καρτέλας και πιέζοντας το κατάλληλο πλήκτρο βέλους\n' + - ' για να μετακινηθείτε κυκλικά στις διαθέσιμες καρτέλες.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/en.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/en.js deleted file mode 100644 index 7f0fca7c3..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/en.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.en', -'

Begin keyboard navigation

\n' + - '\n' + - '
\n' + - '
Focus the Menu bar
\n' + - '
Windows or Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Focus the Toolbar
\n' + - '
Windows or Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Focus the footer
\n' + - '
Windows or Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Focus a contextual toolbar
\n' + - '
Windows, Linux or macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigation will start at the first UI item, which will be highlighted, or underlined in the case of the first item in\n' + - ' the Footer element path.

\n' + - '\n' + - '

Navigate between UI sections

\n' + - '\n' + - '

To move from one UI section to the next, press Tab.

\n' + - '\n' + - '

To move from one UI section to the previous, press Shift+Tab.

\n' + - '\n' + - '

The Tab order of these UI sections is:\n' + - '\n' + - '

    \n' + - '
  1. Menu bar
  2. \n' + - '
  3. Each toolbar group
  4. \n' + - '
  5. Sidebar
  6. \n' + - '
  7. Element path in the footer
  8. \n' + - '
  9. Word count toggle button in the footer
  10. \n' + - '
  11. Branding link in the footer
  12. \n' + - '
  13. Editor resize handle in the footer
  14. \n' + - '
\n' + - '\n' + - '

If a UI section is not present, it is skipped.

\n' + - '\n' + - '

If the footer has keyboard navigation focus, and there is no visible sidebar, pressing Shift+Tab\n' + - ' moves focus to the first toolbar group, not the last.\n' + - '\n' + - '

Navigate within UI sections

\n' + - '\n' + - '

To move from one UI element to the next, press the appropriate Arrow key.

\n' + - '\n' + - '

The Left and Right arrow keys

\n' + - '\n' + - '
    \n' + - '
  • move between menus in the menu bar.
  • \n' + - '
  • open a sub-menu in a menu.
  • \n' + - '
  • move between buttons in a toolbar group.
  • \n' + - '
  • move between items in the footer’s element path.
  • \n' + - '
\n' + - '\n' + - '

The Down and Up arrow keys\n' + - '\n' + - '

    \n' + - '
  • move between menu items in a menu.
  • \n' + - '
  • move between items in a toolbar pop-up menu.
  • \n' + - '
\n' + - '\n' + - '

Arrow keys cycle within the focused UI section.

\n' + - '\n' + - '

To close an open menu, an open sub-menu, or an open pop-up menu, press the Esc key.\n' + - '\n' + - '

If the current focus is at the ‘top’ of a particular UI section, pressing the Esc key also exits\n' + - ' keyboard navigation entirely.

\n' + - '\n' + - '

Execute a menu item or toolbar button

\n' + - '\n' + - '

When the desired menu item or toolbar button is highlighted, press Return, Enter,\n' + - ' or the Space bar to execute the item.\n' + - '\n' + - '

Navigate non-tabbed dialogs

\n' + - '\n' + - '

In non-tabbed dialogs, the first interactive component takes focus when the dialog opens.

\n' + - '\n' + - '

Navigate between interactive dialog components by pressing Tab or Shift+Tab.

\n' + - '\n' + - '

Navigate tabbed dialogs

\n' + - '\n' + - '

In tabbed dialogs, the first button in the tab menu takes focus when the dialog opens.

\n' + - '\n' + - '

Navigate between interactive components of this dialog tab by pressing Tab or\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Switch to another dialog tab by giving the tab menu focus and then pressing the appropriate Arrow\n' + - ' key to cycle through the available tabs.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/es.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/es.js deleted file mode 100644 index 008382c5c..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/es.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.es', -'

Iniciar la navegación con el teclado

\n' + - '\n' + - '
\n' + - '
Enfocar la barra de menús
\n' + - '
Windows o Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Enfocar la barra de herramientas
\n' + - '
Windows o Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Enfocar el pie de página
\n' + - '
Windows o Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Enfocar una barra de herramientas contextual
\n' + - '
Windows, Linux o macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

La navegación comenzará por el primer elemento de la interfaz de usuario (IU), de tal manera que se resaltará, o bien se subrayará si se trata del primer elemento de\n' + - ' la ruta de elemento del pie de página.

\n' + - '\n' + - '

Navegar entre las secciones de la IU

\n' + - '\n' + - '

Para pasar de una sección de la IU a la siguiente, pulse la tecla Tab.

\n' + - '\n' + - '

Para pasar de una sección de la IU a la anterior, pulse Mayús+Tab.

\n' + - '\n' + - '

El orden de tabulación de estas secciones de la IU es:\n' + - '\n' + - '

    \n' + - '
  1. Barra de menús
  2. \n' + - '
  3. Cada grupo de barra de herramientas
  4. \n' + - '
  5. Barra lateral
  6. \n' + - '
  7. Ruta del elemento en el pie de página
  8. \n' + - '
  9. Botón de alternancia de recuento de palabras en el pie de página
  10. \n' + - '
  11. Enlace de personalización de marca en el pie de página
  12. \n' + - '
  13. Controlador de cambio de tamaño en el pie de página
  14. \n' + - '
\n' + - '\n' + - '

Si una sección de la IU no está presente, esta se omite.

\n' + - '\n' + - '

Si el pie de página tiene un enfoque de navegación con el teclado y no hay ninguna barra lateral visible, al pulsar Mayús+Tab,\n' + - ' el enfoque se moverá al primer grupo de barra de herramientas, en lugar de al último.\n' + - '\n' + - '

Navegar dentro de las secciones de la IU

\n' + - '\n' + - '

Para pasar de un elemento de la IU al siguiente, pulse la tecla de flecha correspondiente.

\n' + - '\n' + - '

Las teclas de flecha izquierda y derecha permiten

\n' + - '\n' + - '
    \n' + - '
  • desplazarse entre los menús de la barra de menús.
  • \n' + - '
  • abrir el submenú de un menú.
  • \n' + - '
  • desplazarse entre los botones de un grupo de barra de herramientas.
  • \n' + - '
  • desplazarse entre los elementos de la ruta de elemento del pie de página.
  • \n' + - '
\n' + - '\n' + - '

Las teclas de flecha abajo y arriba permiten\n' + - '\n' + - '

    \n' + - '
  • desplazarse entre los elementos de menú de un menú.
  • \n' + - '
  • desplazarse entre los elementos de un menú emergente de una barra de herramientas.
  • \n' + - '
\n' + - '\n' + - '

Las teclas de flecha van cambiando dentro de la sección de la IU enfocada.

\n' + - '\n' + - '

Para cerrar un menú, un submenú o un menú emergente que estén abiertos, pulse la tecla Esc.\n' + - '\n' + - '

Si el enfoque actual se encuentra en la parte superior de una sección de la IU determinada, al pulsar la tecla Esc saldrá\n' + - ' de la navegación con el teclado por completo.

\n' + - '\n' + - '

Ejecutar un elemento de menú o un botón de barra de herramientas

\n' + - '\n' + - '

Si el elemento de menú o el botón de barra de herramientas deseado está resaltado, pulse la tecla Retorno o Entrar,\n' + - ' o la barra espaciadora para ejecutar el elemento.\n' + - '\n' + - '

Navegar por cuadros de diálogo sin pestañas

\n' + - '\n' + - '

En los cuadros de diálogo sin pestañas, el primer componente interactivo se enfoca al abrirse el cuadro de diálogo.

\n' + - '\n' + - '

Para navegar entre los componentes interactivos del cuadro de diálogo, pulse las teclas Tab o Mayús+Tab.

\n' + - '\n' + - '

Navegar por cuadros de diálogo con pestañas

\n' + - '\n' + - '

En los cuadros de diálogo con pestañas, el primer botón del menú de pestaña se enfoca al abrirse el cuadro de diálogo.

\n' + - '\n' + - '

Para navegar entre componentes interactivos de esta pestaña del cuadro de diálogo, pulse las teclas Tab o\n' + - ' Mayús+Tab.

\n' + - '\n' + - '

Si desea cambiar a otra pestaña del cuadro de diálogo, enfoque el menú de pestañas y, a continuación, pulse la tecla de flecha\n' + - ' correspondiente para moverse por las pestañas disponibles.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/eu.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/eu.js deleted file mode 100644 index 637a3894e..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/eu.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.eu', -'

Hasi teklatuaren nabigazioa

\n' + - '\n' + - '
\n' + - '
Fokuratu menu-barra
\n' + - '
Windows edo Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fokuratu tresna-barra
\n' + - '
Windows edo Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fokuratu orri-oina
\n' + - '
Windows edo Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fokuratu testuinguruaren tresna-barra
\n' + - '
Windows, Linux edo macOS: Ktrl+F9\n' + - '
\n' + - '\n' + - '

Nabigazioa EIko lehen elementuan hasiko da: elementu hori nabarmendu egingo da, edo azpimarratu lehen elementua bada\n' + - ' orri-oineko elementuaren bidea.

\n' + - '\n' + - '

Nabigatu EIko atalen artean

\n' + - '\n' + - '

EIko atal batetik hurrengora mugitzeko, sakatu Tabuladorea.

\n' + - '\n' + - '

EIko atal batetik aurrekora mugitzeko, sakatu Maius+Tabuladorea.

\n' + - '\n' + - '

EIko atal hauen Tabuladorea da:\n' + - '\n' + - '

    \n' + - '
  1. Menu-barra
  2. \n' + - '
  3. Tresna-barraren talde bakoitza
  4. \n' + - '
  5. Alboko barra
  6. \n' + - '
  7. Orri-oineko elementuaren bidea
  8. \n' + - '
  9. Orri-oneko urrats-kontaketa txandakatzeko botoia
  10. \n' + - '
  11. Orri-oineko marken esteka
  12. \n' + - '
  13. Orri-oineko editorearen tamaina aldatzeko heldulekua
  14. \n' + - '
\n' + - '\n' + - '

EIko atal bat ez badago, saltatu egin da.

\n' + - '\n' + - '

Orri-oinak teklatuaren nabigazioa fokuratuta badago, eta alboko barra ikusgai ez badago, Maius+Tabuladorea sakatuz gero,\n' + - ' fokua tresna-barrako lehen taldera eramaten da, ez azkenera.\n' + - '\n' + - '

Nabigatu EIko atalen barruan

\n' + - '\n' + - '

EIko elementu batetik hurrengora mugitzeko, sakatu dagokion Gezia tekla.

\n' + - '\n' + - '

Ezkerrera eta Eskuinera gezi-teklak

\n' + - '\n' + - '
    \n' + - '
  • menu-barrako menuen artean mugitzen da.
  • \n' + - '
  • ireki azpimenu bat menuan.
  • \n' + - '
  • mugitu botoi batetik bestera tresna-barren talde batean.
  • \n' + - '
  • mugitu orri-oineko elementuaren bideko elementu batetik bestera.
  • \n' + - '
\n' + - '\n' + - '

Gora eta Behera gezi-teklak\n' + - '\n' + - '

    \n' + - '
  • mugitu menu bateko menu-elementuen artean.
  • \n' + - '
  • mugitu tresna-barrako menu gainerakor bateko menu-elementuen artean.
  • \n' + - '
\n' + - '\n' + - '

Gezia teklen zikloa nabarmendutako EI atalen barruan.

\n' + - '\n' + - '

Irekitako menu bat ixteko, ireki azpimenua, edo ireki menu gainerakorra, sakatu Ihes tekla.\n' + - '\n' + - '

Une horretan fokuratzea EIko atal jakin baten "goialdean" badago, Ihes tekla sakatuz gero \n' + - ' teklatuaren nabigaziotik irtengo zara.

\n' + - '\n' + - '

Exekutatu menuko elementu bat edo tresna-barrako botoi bat

\n' + - '\n' + - '

Nahi den menuaren elementua edo tresna-barraren botoia nabarmenduta dagoenean, sakatu Itzuli, Sartu\n' + - ' edo Zuriune-barra elementua exekutatzeko.\n' + - '\n' + - '

Nabigatu fitxarik gabeko elkarrizketak

\n' + - '\n' + - '

Fitxarik gabeko elkarrizketetan, lehen osagai interaktiboa fokuratzen da elkarrizketa irekitzen denean.

\n' + - '\n' + - '

Nabigatu elkarrizketa interaktiboko osagai batetik bestera Tabuladorea edo Maius+Tabuladorea sakatuta.

\n' + - '\n' + - '

Nabigatu fitxadun elkarrizketak

\n' + - '\n' + - '

Fitxadun elkarrizketetan, fitxa-menuko lehen botoia fokuratzen da elkarrizketa irekitzen denean.

\n' + - '\n' + - '

Nabigatu elkarrizketa-fitxa honen interaktiboko osagai batetik bestera Tabuladorea edo\n' + - ' Maius+Tabuladorea sakatuta.

\n' + - '\n' + - '

Aldatu beste elkarrizketa-fitxa batera fitxa-menua fokuratu eta dagokion Gezia\n' + - ' tekla sakatzeko, erabilgarri dauden fitxa batetik bestera txandakatzeko.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fa.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fa.js deleted file mode 100644 index 8ffcc868b..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fa.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.fa', -'

شروع پیمایش صفحه‌کلید

\n' + - '\n' + - '
\n' + - '
تمرکز بر نوار منو
\n' + - '
Windows یا Linux:‎‏: Alt+F9
\n' + - '
‎‏macOS: ⌥F9‎‏
\n' + - '
تمرکز بر نوار ابزار
\n' + - '
Windows یا Linux‎‏: Alt+F10
\n' + - '
‎‏macOS: ⌥F10‎‏
\n' + - '
تمرکز بر پانویس
\n' + - '
Windows یا Linux‎‏: Alt+F11
\n' + - '
‎‏macOS: ⌥F11‎‏
\n' + - '
تمرکز بر نوار ابزار بافتاری
\n' + - '
Windows ،Linux یا macOS:‏ Ctrl+F9\n' + - '
\n' + - '\n' + - '

پیمایش در اولین مورد رابط کاربری شروع می‌شود و درخصوص اولین مورد در\n' + - ' مسیر عنصر پانویس، برجسته یا زیرخط‌دار می‌شود.

\n' + - '\n' + - '

پیمایش بین بخش‌های رابط کاربری

\n' + - '\n' + - '

برای جابجایی از یک بخش رابط کاربری به بخش بعدی، Tab را فشار دهید.

\n' + - '\n' + - '

برای جابجایی از یک بخش رابط کاربری به بخش قبلی، Shift+Tab را فشار دهید.

\n' + - '\n' + - '

ترتیب Tab این بخش‌های رابط کاربری عبارتند از:\n' + - '\n' + - '

    \n' + - '
  1. نوار منو
  2. \n' + - '
  3. هر گروه نوار ابزار
  4. \n' + - '
  5. نوار کناری
  6. \n' + - '
  7. مسیر عنصر در پانویس
  8. \n' + - '
  9. دکمه تغییر وضعیت تعداد کلمات در پانویس
  10. \n' + - '
  11. پیوند نمانام‌سازی در پانویس
  12. \n' + - '
  13. دسته تغییر اندازه ویرایشگر در پانویس
  14. \n' + - '
\n' + - '\n' + - '

اگر بخشی از رابط کاربری موجود نباشد، رد می‌شود.

\n' + - '\n' + - '

اگر پانویس دارای تمرکز بر پیمایش صفحه‌کلید باشد،‌ و نوار کناری قابل‌مشاهده وجود ندارد، فشردن Shift+Tab\n' + - ' تمرکز را به گروه نوار ابزار اول می‌برد، نه آخر.\n' + - '\n' + - '

پیمایش در بخش‌های رابط کاربری

\n' + - '\n' + - '

برای جابجایی از یک عنصر رابط کاربری به بعدی، کلید جهت‌نمای مناسب را فشار دهید.

\n' + - '\n' + - '

کلیدهای جهت‌نمای چپ و راست

\n' + - '\n' + - '
    \n' + - '
  • جابجایی بین منوها در نوار منو.
  • \n' + - '
  • باز کردن منوی فرعی در یک منو.
  • \n' + - '
  • جابجایی بین دکمه‌ها در یک گروه نوار ابزار.
  • \n' + - '
  • جابجایی بین موارد در مسیر عنصر پانویس.
  • \n' + - '
\n' + - '\n' + - '

کلیدهای جهت‌نمای پایین و بالا\n' + - '\n' + - '

    \n' + - '
  • جابجایی بین موارد منو در یک منو.
  • \n' + - '
  • جابجایی بین موارد در یک منوی بازشوی نوار ابزار.
  • \n' + - '
\n' + - '\n' + - '

کلیدهایجهت‌نما در بخش رابط کاربری متمرکز می‌چرخند.

\n' + - '\n' + - '

برای بستن یک منوی باز، یک منوی فرعی باز، یا یک منوی بازشوی باز، کلید Esc را فشار دهید.\n' + - '\n' + - '

اگر تمرکز فعلی در «بالای» یک بخش رابط کاربری خاص است، فشردن کلید Esc نیز موجب\n' + - ' خروج کامل از پیمایش صفحه‌کلید می‌شود.

\n' + - '\n' + - '

اجرای یک مورد منو یا دکمه نوار ابزار

\n' + - '\n' + - '

وقتی مورد منو یا دکمه نوار ابزار مورد نظر هایلایت شد، دکمه بازگشت، Enter،\n' + - ' یا نوار Space را فشار دهید تا مورد را اجرا کنید.\n' + - '\n' + - '

پیمایش در کادرهای گفتگوی بدون زبانه

\n' + - '\n' + - '

در کادرهای گفتگوی بدون زبانه، وقتی کادر گفتگو باز می‌شود، اولین جزء تعاملی متمرکز می‌شود.

\n' + - '\n' + - '

با فشردن Tab یا Shift+Tab، بین اجزای کادر گفتگوی تعاملی پیمایش کنید.

\n' + - '\n' + - '

پیمایش کادرهای گفتگوی زبانه‌دار

\n' + - '\n' + - '

در کادرهای گفتگوی زبانه‌دار، وقتی کادر گفتگو باز می‌شود، اولین دکمه در منوی زبانه متمرکز می‌شود.

\n' + - '\n' + - '

با فشردن Tab یا\n' + - ' Shift+Tab، بین اجزای تعاملی این زبانه کادر گفتگو پیمایش کنید.

\n' + - '\n' + - '

با دادن تمرکز به منوی زبانه و سپس فشار دادن کلید جهت‌نمای\n' + - ' مناسب برای چرخش میان زبانه‌های موجود، به زبانه کادر گفتگوی دیگری بروید.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fi.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fi.js deleted file mode 100644 index 319074ec6..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fi.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.fi', -'

Näppäimistönavigoinnin aloittaminen

\n' + - '\n' + - '
\n' + - '
Siirrä kohdistus valikkopalkkiin
\n' + - '
Windows tai Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Siirrä kohdistus työkalupalkkiin
\n' + - '
Windows tai Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Siirrä kohdistus alatunnisteeseen
\n' + - '
Windows tai Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Siirrä kohdistus kontekstuaaliseen työkalupalkkiin
\n' + - '
Windows, Linux tai macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigointi aloitetaan ensimmäisestä käyttöliittymän kohteesta, joka joko korostetaan tai alleviivataan, jos\n' + - ' kyseessä on Alatunniste-elementin polun ensimmäinen kohde.

\n' + - '\n' + - '

Käyttöliittymän eri osien välillä navigointi

\n' + - '\n' + - '

Paina sarkainnäppäintä siirtyäksesi käyttöliittymän osasta seuraavaan.

\n' + - '\n' + - '

Jos haluat siirtyä edelliseen käyttöliittymän osaan, paina Shift+sarkainnäppäin.

\n' + - '\n' + - '

Sarkainnäppäin siirtää sinua näissä käyttöliittymän osissa tässä järjestyksessä:\n' + - '\n' + - '

    \n' + - '
  1. Valikkopalkki
  2. \n' + - '
  3. Työkalupalkin ryhmät
  4. \n' + - '
  5. Sivupalkki
  6. \n' + - '
  7. Elementin polku alatunnisteessa
  8. \n' + - '
  9. Sanalaskurin vaihtopainike alatunnisteessa
  10. \n' + - '
  11. Brändäyslinkki alatunnisteessa
  12. \n' + - '
  13. Editorin koon muuttamisen kahva alatunnisteessa
  14. \n' + - '
\n' + - '\n' + - '

Jos jotakin käyttöliittymän osaa ei ole, se ohitetaan.

\n' + - '\n' + - '

Jos kohdistus on siirretty alatunnisteeseen näppäimistönavigoinnilla eikä sivupalkkia ole näkyvissä, Shift+sarkainnäppäin\n' + - ' siirtää kohdistuksen työkalupalkin ensimmäiseen ryhmään, eikä viimeiseen.\n' + - '\n' + - '

Käyttöliittymän eri osien sisällä navigointi

\n' + - '\n' + - '

Paina nuolinäppäimiä siirtyäksesi käyttöliittymäelementistä seuraavaan.

\n' + - '\n' + - '

Vasen- ja Oikea-nuolinäppäimet

\n' + - '\n' + - '
    \n' + - '
  • siirtävät sinua valikkopalkin valikoiden välillä.
  • \n' + - '
  • avaavat valikon alavalikon.
  • \n' + - '
  • siirtävät sinua työkalupalkin ryhmän painikkeiden välillä.
  • \n' + - '
  • siirtävät sinua kohteiden välillä alatunnisteen elementin polussa.
  • \n' + - '
\n' + - '\n' + - '

Alas- ja Ylös-nuolinäppäimet\n' + - '\n' + - '

    \n' + - '
  • siirtävät sinua valikon valikkokohteiden välillä.
  • \n' + - '
  • siirtävät sinua työkalupalkin ponnahdusvalikon kohteiden välillä.
  • \n' + - '
\n' + - '\n' + - '

Nuolinäppäimet siirtävät sinua käyttöliittymän korostetun osan sisällä syklissä.

\n' + - '\n' + - '

Paina Esc-näppäintä sulkeaksesi avoimen valikon, avataksesi alavalikon tai avataksesi ponnahdusvalikon.\n' + - '\n' + - '

Jos kohdistus on käyttöliittymän tietyn osion ylälaidassa, Esc-näppäimen painaminen\n' + - ' poistuu myös näppäimistönavigoinnista kokonaan.

\n' + - '\n' + - '

Suorita valikkokohde tai työkalupalkin painike

\n' + - '\n' + - '

Kun haluamasi valikkokohde tai työkalupalkin painike on korostettuna, paina Return-, Enter-\n' + - ' tai välilyöntinäppäintä suorittaaksesi kohteen.\n' + - '\n' + - '

Välilehdittömissä valintaikkunoissa navigointi

\n' + - '\n' + - '

Kun välilehdetön valintaikkuna avautuu, kohdistus siirtyy sen ensimmäiseen interaktiiviseen komponenttiin.

\n' + - '\n' + - '

Voit siirtyä valintaikkunan interaktiivisten komponenttien välillä painamalla sarkainnäppäintä tai Shift+sarkainnäppäin.

\n' + - '\n' + - '

Välilehdellisissä valintaikkunoissa navigointi

\n' + - '\n' + - '

Kun välilehdellinen valintaikkuna avautuu, kohdistus siirtyy välilehtivalikon ensimmäiseen painikkeeseen.

\n' + - '\n' + - '

Voit siirtyä valintaikkunan välilehden interaktiivisen komponenttien välillä painamalla sarkainnäppäintä tai\n' + - ' Shift+sarkainnäppäin.

\n' + - '\n' + - '

Voit siirtyä valintaikkunan toiseen välilehteen siirtämällä kohdistuksen välilehtivalikkoon ja painamalla sopivaa nuolinäppäintä\n' + - ' siirtyäksesi käytettävissä olevien välilehtien välillä syklissä.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fr_FR.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fr_FR.js deleted file mode 100644 index f8e208d0f..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/fr_FR.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.fr_FR', -'

Débuter la navigation au clavier

\n' + - '\n' + - '
\n' + - '
Cibler la barre du menu
\n' + - '
Windows ou Linux : Alt+F9
\n' + - '
macOS : ⌥F9
\n' + - "
Cibler la barre d'outils
\n" + - '
Windows ou Linux : Alt+F10
\n' + - '
macOS : ⌥F10
\n' + - '
Cibler le pied de page
\n' + - '
Windows ou Linux : Alt+F11
\n' + - '
macOS : ⌥F11
\n' + - "
Cibler une barre d'outils contextuelle
\n" + - '
Windows, Linux ou macOS : Ctrl+F9\n' + - '
\n' + - '\n' + - "

La navigation débutera sur le premier élément de l'interface utilisateur, qui sera mis en surbrillance ou bien souligné dans le cas du premier élément du\n" + - " chemin d'éléments du pied de page.

\n" + - '\n' + - "

Naviguer entre les sections de l'interface utilisateur

\n" + - '\n' + - "

Pour passer d'une section de l'interface utilisateur à la suivante, appuyez sur Tabulation.

\n" + - '\n' + - "

Pour passer d'une section de l'interface utilisateur à la précédente, appuyez sur Maj+Tabulation.

\n" + - '\n' + - "

L'ordre de Tabulation de ces sections de l'interface utilisateur est le suivant :\n" + - '\n' + - '

    \n' + - '
  1. Barre du menu
  2. \n' + - "
  3. Chaque groupe de barres d'outils
  4. \n" + - '
  5. Barre latérale
  6. \n' + - "
  7. Chemin d'éléments du pied de page
  8. \n" + - "
  9. Bouton d'activation du compteur de mots dans le pied de page
  10. \n" + - '
  11. Lien de marque dans le pied de page
  12. \n' + - "
  13. Poignée de redimensionnement de l'éditeur dans le pied de page
  14. \n" + - '
\n' + - '\n' + - "

Si une section de l'interface utilisateur n'est pas présente, elle sera ignorée.

\n" + - '\n' + - "

Si le pied de page comporte un ciblage par navigation au clavier et qu'il n'y a aucune barre latérale visible, appuyer sur Maj+Tabulation\n" + - " déplace le ciblage vers le premier groupe de barres d'outils et non le dernier.\n" + - '\n' + - "

Naviguer au sein des sections de l'interface utilisateur

\n" + - '\n' + - "

Pour passer d'un élément de l'interface utilisateur au suivant, appuyez sur la Flèche appropriée.

\n" + - '\n' + - '

Les touches fléchées Gauche et Droite

\n' + - '\n' + - '
    \n' + - '
  • se déplacent entre les menus de la barre des menus.
  • \n' + - "
  • ouvrent un sous-menu au sein d'un menu.
  • \n" + - "
  • se déplacent entre les boutons d'un groupe de barres d'outils.
  • \n" + - "
  • se déplacent entre les éléments du chemin d'éléments du pied de page.
  • \n" + - '
\n' + - '\n' + - '

Les touches fléchées Bas et Haut\n' + - '\n' + - '

    \n' + - "
  • se déplacent entre les éléments de menu au sein d'un menu.
  • \n" + - "
  • se déplacent entre les éléments au sein d'un menu contextuel de barre d'outils.
  • \n" + - '
\n' + - '\n' + - "

Les Flèches parcourent la section de l'interface utilisateur ciblée.

\n" + - '\n' + - '

Pour fermer un menu ouvert, un sous-menu ouvert ou un menu contextuel ouvert, appuyez sur Echap.\n' + - '\n' + - "

Si l'actuel ciblage se trouve en « haut » d'une section spécifique de l'interface utilisateur, appuyer sur Echap permet également de quitter\n" + - ' entièrement la navigation au clavier.

\n' + - '\n' + - "

Exécuter un élément de menu ou un bouton de barre d'outils

\n" + - '\n' + - "

Lorsque l'élément de menu ou le bouton de barre d'outils désiré est mis en surbrillance, appuyez sur la touche Retour arrière, Entrée\n" + - " ou la Barre d'espace pour exécuter l'élément.\n" + - '\n' + - '

Naviguer au sein de dialogues sans onglets

\n' + - '\n' + - "

Dans les dialogues sans onglets, le premier composant interactif est ciblé lorsque le dialogue s'ouvre.

\n" + - '\n' + - '

Naviguez entre les composants du dialogue interactif en appuyant sur Tabulation ou Maj+Tabulation.

\n' + - '\n' + - '

Naviguer au sein de dialogues avec onglets

\n' + - '\n' + - "

Dans les dialogues avec onglets, le premier bouton du menu de l'onglet est ciblé lorsque le dialogue s'ouvre.

\n" + - '\n' + - '

Naviguez entre les composants interactifs de cet onglet de dialogue en appuyant sur Tabulation ou\n' + - ' Maj+Tabulation.

\n' + - '\n' + - "

Passez à un autre onglet de dialogue en ciblant le menu de l'onglet et en appuyant sur la Flèche\n" + - ' appropriée pour parcourir les onglets disponibles.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/he_IL.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/he_IL.js deleted file mode 100644 index 37876d5a8..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/he_IL.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.he_IL', -'

התחל ניווט במקלדת

\n' + - '\n' + - '
\n' + - '
התמקד בשורת התפריטים
\n' + - '
Windows או Linux:‏ Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
העבר מיקוד לסרגל הכלים
\n' + - '
Windows או Linux:‏ Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
העבר מיקוד לכותרת התחתונה
\n' + - '
Windows או Linux:‏ Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
העבר מיקוד לסרגל כלים הקשרי
\n' + - '
Windows‏, Linux או macOS:‏ Ctrl+F9\n' + - '
\n' + - '\n' + - '

הניווט יתחיל ברכיב הראשון במשך, שיודגש או שיהיה מתחתיו קו תחתון במקרה של הפריט הראשון\n' + - ' הנתיב של רכיב הכותרת התחתונה.

\n' + - '\n' + - '

עבור בין מקטעים במסך

\n' + - '\n' + - '

כדי לעבור בין המקטעים במסך, הקש Tab.

\n' + - '\n' + - '

כדי לעבור למקטע הקודם במסך, הקש Shift+Tab.

\n' + - '\n' + - '

הסדר מבחינת מקש Tab של הרכיבים במסך:\n' + - '\n' + - '

    \n' + - '
  1. שורת התפריטים
  2. \n' + - '
  3. כל קבוצה בסרגל הכלים
  4. \n' + - '
  5. הסרגל הצידי
  6. \n' + - '
  7. נתיב של רכיב בכותרת התחתונה
  8. \n' + - '
  9. לחצן לספירת מילים בכותרת התחתונה
  10. \n' + - '
  11. קישור של המותג בכותרת התחתונה
  12. \n' + - '
  13. ידית לשינוי גודל עבור העורך בכותרת התחתונה
  14. \n' + - '
\n' + - '\n' + - '

אם רכיב כלשהו במסך לא מופיע, המערכת תדלג עליו.

\n' + - '\n' + - '

אם בכותרת התחתונה יש מיקוד של ניווט במקלדת, ולא מופיע סרגל בצד, יש להקיש Shift+Tab\n' + - ' מעביר את המיקוד לקבוצה הראשונה בסרגל הכלים, לא האחרונה.\n' + - '\n' + - '

עבור בתוך מקטעים במסך

\n' + - '\n' + - '

כדי לעבור מרכיב אחד לרכיב אחר במסך, הקש על מקש החץ המתאים.

\n' + - '\n' + - '

מקשי החיצים שמאלה וימינה

\n' + - '\n' + - '
    \n' + - '
  • עבור בין תפריטים בשורת התפריטים.
  • \n' + - '
  • פתח תפריט משני בתפריט.
  • \n' + - '
  • עבור בין לחצנים בקבוצה בסרגל הכלים.
  • \n' + - '
  • עבור בין פריטים ברכיב בכותרת התחתונה.
  • \n' + - '
\n' + - '\n' + - '

מקשי החיצים למטה ולמעלה\n' + - '\n' + - '

    \n' + - '
  • עבור בין פריטים בתפריט.
  • \n' + - '
  • עבור בין פריטים בחלון הקובץ של סרגל הכלים.
  • \n' + - '
\n' + - '\n' + - '

מקשי החצים משתנים בתוך המקטע במסך שעליו נמצא המיקוד.

\n' + - '\n' + - '

כדי לסגור תפריט פתוח, תפריט משני פתוח או חלון קופץ, הקש על Esc.\n' + - '\n' + - "

אם המיקוד הוא על החלק 'העליון' של מקטע מסוים במסך, הקשה על Esc מביאה גם ליציאה\n" + - ' מהניווט במקלדת לחלוטין.

\n' + - '\n' + - '

הפעל פריט בתפריט או לחצן בסרגל הכלים

\n' + - '\n' + - '

כאשר הפריט הרצוי בתפריט או הלחצן בסרגל הכלים מודגשים, הקש על Return, Enter,\n' + - ' או על מקש הרווח כדי להפעיל את הפריט.\n' + - '\n' + - '

ניווט בחלונות דו-שיח בלי כרטיסיות

\n' + - '\n' + - '

בחלונות דו-שיח בלי כרטיסיות, הרכיב האינטראקטיבי הראשון מקבל את המיקוד כאשר החלון נפתח.

\n' + - '\n' + - '

עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על Tab או Shift+Tab.

\n' + - '\n' + - '

ניווט בחלונות דו-שיח עם כרטיסיות

\n' + - '\n' + - '

בחלונות דו-שיח עם כרטיסיות, הלחצן הראשון בתפריט מקבל את המיקוד כאשר החלון נפתח.

\n' + - '\n' + - '

עבור בין רכיבים אינטראקטיביים בחלון על ידי הקשה על Tab או\n' + - ' Shift+Tab.

\n' + - '\n' + - '

עבור לכרטיסיה אחרת בחלון על ידי העברת המיקוד לתפריט הכרטיסיות והקשה על החץהמתאים\n' + - ' כדי לעבור בין הכרטיסיות הזמינות.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hi.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hi.js deleted file mode 100644 index 584085aaa..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hi.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.hi', -'

कीबोर्ड नेविगेशन शुरू करें

\n' + - '\n' + - '
\n' + - '
मेन्यू बार पर फ़ोकस करें
\n' + - '
Windows या Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
टूलबार पर फ़ोकस करें
\n' + - '
Windows या Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
फ़ुटर पर फ़ोकस करें
\n' + - '
Windows या Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
प्रासंगिक टूलबार पर फ़ोकस करें
\n' + - '
Windows, Linux या macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

नेविगेशन पहले UI आइटम पर शुरू होगा, जिसे हाइलाइट किया जाएगा या पहले आइटम के मामले में फ़ुटर तत्व पथ में\n' + - ' रेखांकित किया जाएगा।

\n' + - '\n' + - '

UI सेक्शन के बीच नेविगेट करें

\n' + - '\n' + - '

एक UI सेक्शन से दूसरे सेक्शन में जाने के लिए, Tab दबाएं।

\n' + - '\n' + - '

एक UI सेक्शन से पिछले सेक्शन में जाने के लिए, Shift+Tab दबाएं।

\n' + - '\n' + - '

इन UI सेक्शन का Tab क्रम नीचे दिया गया है:\n' + - '\n' + - '

    \n' + - '
  1. मेन्यू बार
  2. \n' + - '
  3. प्रत्येक टूलबार समूह
  4. \n' + - '
  5. साइडबार
  6. \n' + - '
  7. फ़ुटर में तत्व पथ
  8. \n' + - '
  9. फ़ुटर में शब्द गणना टॉगल बटन
  10. \n' + - '
  11. फ़ुटर में ब्रांडिंग लिंक
  12. \n' + - '
  13. फ़ुटर में संपादक का आकार बदलने का हैंडल
  14. \n' + - '
\n' + - '\n' + - '

अगर कोई UI सेक्शन मौजूद नहीं है, तो उसे छोड़ दिया जाता है।

\n' + - '\n' + - '

अगर फ़ुटर में कीबोर्ड नेविगेशन फ़ोकस है, और कोई दिखा देने वाला साइडबार नहीं है, तो Shift+Tab दबाने से\n' + - ' फ़ोकस पहले टूलबार समूह पर चला जाता है, पिछले पर नहीं।\n' + - '\n' + - '

UI सेक्शन के भीतर नेविगेट करें

\n' + - '\n' + - '

एक UI तत्व से दूसरे में जाने के लिए उपयुक्त ऐरो कुंजी दबाएं।

\n' + - '\n' + - '

बाएं और दाएं ऐरो कुंजियां

\n' + - '\n' + - '
    \n' + - '
  • मेन्यू बार में मेन्यू के बीच ले जाती हैं।
  • \n' + - '
  • मेन्यू में एक सब-मेन्यू खोलें।
  • \n' + - '
  • टूलबार समूह में बटनों के बीच ले जाएं।
  • \n' + - '
  • फ़ुटर के तत्व पथ में आइटम के बीच ले जाएं।
  • \n' + - '
\n' + - '\n' + - '

नीचे और ऊपर ऐरो कुंजियां\n' + - '\n' + - '

    \n' + - '
  • मेन्यू में मेन्यू आइटम के बीच ले जाती हैं।
  • \n' + - '
  • टूलबार पॉप-अप मेन्यू में आइटम के बीच ले जाएं।
  • \n' + - '
\n' + - '\n' + - '

फ़ोकस वाले UI सेक्शन के भीतर ऐरो कुंजियां चलाती रहती हैं।

\n' + - '\n' + - '

कोई खुला मेन्यू, कोई खुला सब-मेन्यू या कोई खुला पॉप-अप मेन्यू बंद करने के लिए Esc कुंजी दबाएं।\n' + - '\n' + - "

अगर मौजूदा फ़ोकस किसी विशेष UI सेक्शन के 'शीर्ष' पर है, तो Esc कुंजी दबाने से भी\n" + - ' कीबोर्ड नेविगेशन पूरी तरह से बाहर हो जाता है।

\n' + - '\n' + - '

मेन्यू आइटम या टूलबार बटन निष्पादित करें

\n' + - '\n' + - '

जब वांछित मेन्यू आइटम या टूलबार बटन हाइलाइट किया जाता है, तो आइटम को निष्पादित करने के लिए Return, Enter,\n' + - ' या Space bar दबाएं।\n' + - '\n' + - '

गैर-टैब वाले डायलॉग पर नेविगेट करें

\n' + - '\n' + - '

गैर-टैब वाले डायलॉग में, डायलॉग खुलने पर पहला इंटरैक्टिव घटक फ़ोकस लेता है।

\n' + - '\n' + - '

Tab or Shift+Tab दबाकर इंटरैक्टिव डायलॉग घटकों के बीच नेविगेट करें।

\n' + - '\n' + - '

टैब किए गए डायलॉग पर नेविगेट करें

\n' + - '\n' + - '

टैब किए गए डायलॉग में, डायलॉग खुलने पर टैब मेन्यू में पहला बटन फ़ोकस लेता है।

\n' + - '\n' + - '

इस डायलॉग टैब के इंटरैक्टिव घटकों के बीच नेविगेट करने के लिए Tab या\n' + - ' Shift+Tab दबाएं।

\n' + - '\n' + - '

टैब मेन्यू को फ़ोकस देकर और फिर उपलब्ध टैब में के बीच जाने के लिए उपयुक्त ऐरो\n' + - ' कुंजी दबाकर दूसरे डायलॉग टैब पर स्विच करें।

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hr.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hr.js deleted file mode 100644 index 3c1f833ab..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hr.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.hr', -'

Početak navigacije na tipkovnici

\n' + - '\n' + - '
\n' + - '
Fokusiranje trake izbornika
\n' + - '
Windows ili Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fokusiranje alatne trake
\n' + - '
Windows ili Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fokusiranje podnožja
\n' + - '
Windows ili Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fokusiranje kontekstne alatne trake
\n' + - '
Windows, Linux ili macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigacija će započeti kod prve stavke na korisničkom sučelju, koja će biti istaknuta ili podcrtana ako se radi o prvoj stavci u\n' + - ' putu elementa u podnožju.

\n' + - '\n' + - '

Navigacija između dijelova korisničkog sučelja

\n' + - '\n' + - '

Za pomicanje s jednog dijela korisničkog sučelja na drugi pritisnite tabulator.

\n' + - '\n' + - '

Za pomicanje s jednog dijela korisničkog sučelja na prethodni pritisnite Shift + tabulator.

\n' + - '\n' + - '

Ovo je redoslijed pomicanja tabulatora po dijelovima korisničkog sučelja:\n' + - '\n' + - '

    \n' + - '
  1. Traka izbornika
  2. \n' + - '
  3. Pojedinačne grupe na alatnoj traci
  4. \n' + - '
  5. Bočna traka
  6. \n' + - '
  7. Put elemenata u podnožju
  8. \n' + - '
  9. Gumb za pomicanje po broju riječi u podnožju
  10. \n' + - '
  11. Veza na brand u podnožju
  12. \n' + - '
  13. Značajka za promjenu veličine alata za uređivanje u podnožju
  14. \n' + - '
\n' + - '\n' + - '

Ako neki dio korisničkog sučelja nije naveden, on se preskače.

\n' + - '\n' + - '

Ako u podnožju postoji fokus za navigaciju na tipkovnici, a nema vidljive bočne trake, pritiskom na Shift + tabulator\n' + - ' fokus se prebacuje na prvu skupinu na alatnoj traci, ne na zadnju.\n' + - '\n' + - '

Navigacija unutar dijelova korisničkog sučelja

\n' + - '\n' + - '

Za pomicanje s jednog elementa korisničkog sučelja na drugi pritisnite tipku s odgovarajućom strelicom.

\n' + - '\n' + - '

Tipke s lijevom i desnom strelicom

\n' + - '\n' + - '
    \n' + - '
  • služe za pomicanje između izbornika na alatnoj traci.
  • \n' + - '
  • otvaraju podizbornik unutar izbornika.
  • \n' + - '
  • služe za pomicanje između gumba unutar skupina na alatnoj traci.
  • \n' + - '
  • služe za pomicanje između stavki na elementu puta u podnožju.
  • \n' + - '
\n' + - '\n' + - '

Tipke s donjom i gornjom strelicom\n' + - '\n' + - '

    \n' + - '
  • služe za pomicanje između stavki unutar izbornika.
  • \n' + - '
  • služe za pomicanje između stavki na alatnoj traci skočnog izbornika.
  • \n' + - '
\n' + - '\n' + - '

Tipkama strelica kružno se pomičete unutar dijela korisničkog sučelja koji je u fokusu.

\n' + - '\n' + - '

Za zatvaranje otvorenog izbornika, otvorenog podizbornika ili otvorenog skočnog izbornika pritisnite tipku Esc.\n' + - '\n' + - '

Ako je fokus trenutačno postavljen na vrh pojedinačnog dijela korisničkog sučelja, pritiskom na tipku Esc također\n' + - ' u potpunosti zatvarate navigaciju na tipkovnici.

\n' + - '\n' + - '

Izvršavanje radnji putem stavki izbornika ili gumba na alatnoj traci

\n' + - '\n' + - '

Nakon što se istakne stavka izbornika ili gumb na alatnoj traci s radnjom koju želite izvršiti, pritisnite tipku Return, Enter\n' + - ' ili razmak da biste pokrenuli željenu radnju.\n' + - '\n' + - '

Navigacija dijaloškim okvirima izvan kartica

\n' + - '\n' + - '

Prilikom otvaranja dijaloških okvira izvan kartica fokus se nalazi na prvoj interaktivnoj komponenti.

\n' + - '\n' + - '

Navigaciju između interaktivnih dijaloških komponenata vršite pritiskom na tabulator ili Shift + tabulator.

\n' + - '\n' + - '

Navigacija dijaloškim okvirima u karticama

\n' + - '\n' + - '

Prilikom otvaranja dijaloških okvira u karticama fokus se nalazi na prvom gumbu u izborniku unutar kartice.

\n' + - '\n' + - '

Navigaciju između interaktivnih komponenata dijaloškog okvira u kartici vršite pritiskom na tabulator ili\n' + - ' Shift + tabulator.

\n' + - '\n' + - '

Na karticu s drugim dijaloškim okvirom možete se prebaciti tako da stavite fokus na izbornik kartice pa pritisnete tipku s odgovarajućom strelicom\n' + - ' za kružno pomicanje između dostupnih kartica.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hu_HU.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hu_HU.js deleted file mode 100644 index 2791e151c..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/hu_HU.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.hu_HU', -'

Billentyűzetes navigáció indítása

\n' + - '\n' + - '
\n' + - '
Fókusz a menüsávra
\n' + - '
Windows és Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fókusz az eszköztárra
\n' + - '
Windows és Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fókusz a láblécre
\n' + - '
Windows és Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fókusz egy környezetfüggő eszköztárra
\n' + - '
Windows, Linux és macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

A navigáció az első felhasználói felületi elemnél kezdődik, amelyet a rendszer kiemel, illetve aláhúz, amennyiben az az első elem\n' + - ' a lábléc elemútvonalán.

\n' + - '\n' + - '

Navigálás a felhasználói felület szakaszai között

\n' + - '\n' + - '

A felhasználói felület következő szakaszára váltáshoz nyomja meg a Tab billentyűt.

\n' + - '\n' + - '

A felhasználói felület előző szakaszára váltáshoz nyomja meg a Shift+Tab billentyűt.

\n' + - '\n' + - '

A Tab billentyűvel a felhasználói felület szakaszai között a következő sorrendben vált:\n' + - '\n' + - '

    \n' + - '
  1. Menüsáv
  2. \n' + - '
  3. Az egyes eszköztárcsoportok
  4. \n' + - '
  5. Oldalsáv
  6. \n' + - '
  7. Elemútvonal a láblécen
  8. \n' + - '
  9. Szószámátkapcsoló gomb a láblécen
  10. \n' + - '
  11. Márkalink a láblécen
  12. \n' + - '
  13. Szerkesztő átméretezési fogópontja a láblécen
  14. \n' + - '
\n' + - '\n' + - '

Ha a felhasználói felület valamelyik eleme nincs jelen, a rendszer kihagyja.

\n' + - '\n' + - '

Ha a billentyűzetes navigáció fókusza a láblécen van, és nincs látható oldalsáv, a Shift+Tab\n' + - ' billentyűkombináció lenyomásakor az első eszköztárcsoportra ugrik a fókusz, nem az utolsóra.\n' + - '\n' + - '

Navigálás a felhasználói felület szakaszain belül

\n' + - '\n' + - '

A felhasználói felület következő elemére váltáshoz nyomja meg a megfelelő nyílbillentyűt.

\n' + - '\n' + - '

A bal és a jobb nyílgomb

\n' + - '\n' + - '
    \n' + - '
  • a menüsávban a menük között vált.
  • \n' + - '
  • a menükben megnyit egy almenüt.
  • \n' + - '
  • az eszköztárcsoportban a gombok között vált.
  • \n' + - '
  • a lábléc elemútvonalán az elemek között vált.
  • \n' + - '
\n' + - '\n' + - '

A le és a fel nyílgomb\n' + - '\n' + - '

    \n' + - '
  • a menükben a menüpontok között vált.
  • \n' + - '
  • az eszköztár előugró menüjében az elemek között vált.
  • \n' + - '
\n' + - '\n' + - '

A nyílbillentyűk lenyomásával körkörösen lépkedhet a fókuszban lévő felhasználói felületi szakasz elemei között.

\n' + - '\n' + - '

A megnyitott menüket, almenüket és előugró menüket az Esc billentyűvel zárhatja be.\n' + - '\n' + - '

Ha a fókusz az aktuális felületi elem „felső” részén van, az Esc billentyűvel az egész\n' + - ' billentyűzetes navigációból kilép.

\n' + - '\n' + - '

Menüpont vagy eszköztárgomb aktiválása

\n' + - '\n' + - '

Amikor a kívánt menüelem vagy eszköztárgomb van kijelölve, nyomja meg a Return, az Enter\n' + - ' vagy a Szóköz billentyűt az adott elem vagy gomb aktiválásához.\n' + - '\n' + - '

Navigálás a lapokkal nem rendelkező párbeszédablakokban

\n' + - '\n' + - '

A lapokkal nem rendelkező párbeszédablakokban az első interaktív összetevő kapja a fókuszt, amikor a párbeszédpanel megnyílik.

\n' + - '\n' + - '

A párbeszédpanelek interaktív összetevői között a Tab vagy a Shift+Tab billentyűvel navigálhat.

\n' + - '\n' + - '

Navigálás a lapokkal rendelkező párbeszédablakokban

\n' + - '\n' + - '

A lapokkal rendelkező párbeszédablakokban a lapmenü első gombja kapja a fókuszt, amikor a párbeszédpanel megnyílik.

\n' + - '\n' + - '

A párbeszédpanel e lapjának interaktív összetevői között a Tab vagy\n' + - ' Shift+Tab billentyűvel navigálhat.

\n' + - '\n' + - '

A párbeszédablak másik lapjára úgy léphet, hogy a fókuszt a lapmenüre állítja, majd lenyomja a megfelelő nyílbillentyűt\n' + - ' a rendelkezésre álló lapok közötti lépkedéshez.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/id.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/id.js deleted file mode 100644 index 03cf417a7..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/id.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.id', -'

Memulai navigasi keyboard

\n' + - '\n' + - '
\n' + - '
Fokus pada bilah Menu
\n' + - '
Windows atau Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fokus pada Bilah Alat
\n' + - '
Windows atau Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fokus pada footer
\n' + - '
Windows atau Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fokus pada bilah alat kontekstual
\n' + - '
Windows, Linux, atau macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigasi akan dimulai dari item pertama UI, yang akan disorot atau digarisbawahi di\n' + - ' alur elemen Footer.

\n' + - '\n' + - '

Berpindah antar-bagian UI

\n' + - '\n' + - '

Untuk berpindah dari satu bagian UI ke bagian berikutnya, tekan Tab.

\n' + - '\n' + - '

Untuk berpindah dari satu bagian UI ke bagian sebelumnya, tekan Shift+Tab.

\n' + - '\n' + - '

Urutan Tab bagian-bagian UI ini adalah:\n' + - '\n' + - '

    \n' + - '
  1. Bilah menu
  2. \n' + - '
  3. Tiap grup bilah alat
  4. \n' + - '
  5. Bilah sisi
  6. \n' + - '
  7. Alur elemen di footer
  8. \n' + - '
  9. Tombol aktifkan/nonaktifkan jumlah kata di footer
  10. \n' + - '
  11. Tautan merek di footer
  12. \n' + - '
  13. Pengatur pengubahan ukuran editor di footer
  14. \n' + - '
\n' + - '\n' + - '

Jika suatu bagian UI tidak ada, bagian tersebut dilewati.

\n' + - '\n' + - '

Jika fokus navigasi keyboard ada pada footer, tetapi tidak ada bilah sisi yang terlihat, menekan Shift+Tab\n' + - ' akan memindahkan fokus ke grup bilah alat pertama, bukan yang terakhir.\n' + - '\n' + - '

Berpindah di dalam bagian-bagian UI

\n' + - '\n' + - '

Untuk berpindah dari satu elemen UI ke elemen berikutnya, tekan tombol Panah yang sesuai.

\n' + - '\n' + - '

Tombol panah Kiri dan Kanan untuk

\n' + - '\n' + - '
    \n' + - '
  • berpindah-pindah antar-menu di dalam bilah menu.
  • \n' + - '
  • membuka sub-menu di dalam menu.
  • \n' + - '
  • berpindah-pindah antar-tombol di dalam grup bilah alat.
  • \n' + - '
  • berpindah-pindah antar-item di dalam alur elemen footer.
  • \n' + - '
\n' + - '\n' + - '

Tombol panah Bawah dan Atas untuk\n' + - '\n' + - '

    \n' + - '
  • berpindah-pindah antar-item menu di dalam menu.
  • \n' + - '
  • berpindah-pindah antar-item di dalam menu pop-up bilah alat.
  • \n' + - '
\n' + - '\n' + - '

Tombol Panah hanya bergerak di dalam bagian UI yang difokuskan.

\n' + - '\n' + - '

Untuk menutup menu, sub-menu, atau menu pop-up yang terbuka, tekan tombol Esc.\n' + - '\n' + - '

Jika fokus sedang berada di ‘atas’ bagian UI tertentu, menekan tombol Esc juga dapat mengeluarkan fokus\n' + - ' dari seluruh navigasi keyboard.

\n' + - '\n' + - '

Menjalankan item menu atau tombol bilah alat

\n' + - '\n' + - '

Jika item menu atau tombol bilah alat yang diinginkan tersorot, tekan Return, Enter,\n' + - ' atau Spasi untuk menjalankan item.\n' + - '\n' + - '

Berpindah dalam dialog tanpa tab

\n' + - '\n' + - '

Dalam dialog tanpa tab, fokus diarahkan pada komponen interaktif pertama saat dialog terbuka.

\n' + - '\n' + - '

Berpindah di antara komponen dalam dialog interaktif dengan menekan Tab atau Shift+Tab.

\n' + - '\n' + - '

Berpindah dalam dialog dengan tab

\n' + - '\n' + - '

Dalam dialog yang memiliki tab, fokus diarahkan pada tombol pertama di dalam menu saat dialog terbuka.

\n' + - '\n' + - '

Berpindah di antara komponen-komponen interaktif pada tab dialog ini dengan menekan Tab atau\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Beralih ke tab dialog lain dengan mengarahkan fokus pada menu tab lalu tekan tombol Panah\n' + - ' yang sesuai untuk berpindah ke berbagai tab yang tersedia.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/it.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/it.js deleted file mode 100644 index 450a34a61..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/it.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.it', -'

Iniziare la navigazione tramite tastiera

\n' + - '\n' + - '
\n' + - '
Impostare lo stato attivo per la barra dei menu
\n' + - '
Windows o Linux: ALT+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Impostare lo stato attivo per la barra degli strumenti
\n' + - '
Windows o Linux: ALT+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Impostare lo stato attivo per il piè di pagina
\n' + - '
Windows o Linux: ALT+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Impostare lo stato attivo per la barra degli strumenti contestuale
\n' + - '
Windows, Linux o macOS: CTRL+F9\n' + - '
\n' + - '\n' + - "

La navigazione inizierà dalla prima voce dell'interfaccia utente, che sarà evidenziata o sottolineata nel caso della prima voce\n" + - " nel percorso dell'elemento del piè di pagina.

\n" + - '\n' + - "

Navigare tra le sezioni dell'interfaccia utente

\n" + - '\n' + - "

Per passare da una sezione dell'interfaccia utente alla successiva, premere TAB.

\n" + - '\n' + - "

Per passare da una sezione dell'interfaccia utente alla precedente, premere MAIUSC+TAB.

\n" + - '\n' + - "

L'ordine di tabulazione di queste sezioni dell'interfaccia utente è:\n" + - '\n' + - '

    \n' + - '
  1. Barra dei menu
  2. \n' + - '
  3. Ogni gruppo di barre degli strumenti
  4. \n' + - '
  5. Barra laterale
  6. \n' + - "
  7. Percorso dell'elemento nel piè di pagina
  8. \n" + - '
  9. Pulsante di attivazione/disattivazione del conteggio delle parole nel piè di pagina
  10. \n' + - '
  11. Collegamento al marchio nel piè di pagina
  12. \n' + - "
  13. Quadratino di ridimensionamento dell'editor nel piè di pagina
  14. \n" + - '
\n' + - '\n' + - "

Se una sezione dell'interfaccia utente non è presente, viene saltata.

\n" + - '\n' + - '

Se il piè di pagina ha lo stato attivo per la navigazione tramite tastiera e non è presente alcuna barra laterale visibile, premendo MAIUSC+TAB\n' + - " si sposta lo stato attivo sul primo gruppo di barre degli strumenti, non sull'ultimo.\n" + - '\n' + - "

Navigare all'interno delle sezioni dell'interfaccia utente

\n" + - '\n' + - "

Per passare da un elemento dell'interfaccia utente al successivo, premere il tasto freccia appropriato.

\n" + - '\n' + - '

I tasti freccia Sinistra e Destra

\n' + - '\n' + - '
    \n' + - '
  • consentono di spostarsi tra i menu della barra dei menu.
  • \n' + - '
  • aprono un sottomenu in un menu.
  • \n' + - '
  • consentono di spostarsi tra i pulsanti di un gruppo di barre degli strumenti.
  • \n' + - "
  • consentono di spostarsi tra le voci nel percorso dell'elemento del piè di pagina.
  • \n" + - '
\n' + - '\n' + - '

I tasti freccia Giù e Su\n' + - '\n' + - '

    \n' + - '
  • consentono di spostarsi tra le voci di un menu.
  • \n' + - '
  • consentono di spostarsi tra le voci di un menu a comparsa della barra degli strumenti.
  • \n' + - '
\n' + - '\n' + - "

I tasti freccia consentono di spostarsi all'interno della sezione dell'interfaccia utente con stato attivo.

\n" + - '\n' + - '

Per chiudere un menu aperto, un sottomenu aperto o un menu a comparsa aperto, premere il tasto ESC.\n' + - '\n' + - "

Se lo stato attivo corrente si trova nella parte superiore di una particolare sezione dell'interfaccia utente, premendo il tasto ESC si esce\n" + - ' completamente dalla navigazione tramite tastiera.

\n' + - '\n' + - '

Eseguire una voce di menu o un pulsante della barra degli strumenti

\n' + - '\n' + - '

Quando la voce di menu o il pulsante della barra degli strumenti desiderati sono evidenziati, premere il tasto diritorno a capo, il tasto Invio\n' + - ' o la barra spaziatrice per eseguirli.\n' + - '\n' + - '

Navigare nelle finestre di dialogo non a schede

\n' + - '\n' + - "

Nelle finestre di dialogo non a schede, all'apertura della finestra di dialogo diventa attivo il primo componente interattivo.

\n" + - '\n' + - '

Per spostarsi tra i componenti interattivi della finestra di dialogo, premere TAB o MAIUSC+TAB.

\n' + - '\n' + - '

Navigare nelle finestre di dialogo a schede

\n' + - '\n' + - "

Nelle finestre di dialogo a schede, all'apertura della finestra di dialogo diventa attivo il primo pulsante del menu della scheda.

\n" + - '\n' + - '

Per spostarsi tra i componenti interattivi di questa scheda della finestra di dialogo, premere TAB o\n' + - ' MAIUSC+TAB.

\n' + - '\n' + - "

Per passare a un'altra scheda della finestra di dialogo, attivare il menu della scheda e premere il tasto freccia\n" + - ' appropriato per scorrere le schede disponibili.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ja.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ja.js deleted file mode 100644 index 19febc758..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ja.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.ja', -'

キーボード ナビゲーションの開始

\n' + - '\n' + - '
\n' + - '
メニュー バーをフォーカス
\n' + - '
Windows または Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
ツール バーをフォーカス
\n' + - '
Windows または Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
フッターをフォーカス
\n' + - '
Windows または Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
コンテキスト ツール バーをフォーカス
\n' + - '
Windows、Linux または macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

ナビゲーションは最初の UI 項目から開始され、強調表示されるか、フッターの要素パスにある最初の項目の場合は\n' + - ' 下線が引かれます。

\n' + - '\n' + - '

UI セクション間の移動

\n' + - '\n' + - '

次の UI セクションに移動するには、Tab を押します。

\n' + - '\n' + - '

前の UI セクションに移動するには、Shift+Tab を押します。

\n' + - '\n' + - '

これらの UI セクションの Tab の順序:\n' + - '\n' + - '

    \n' + - '
  1. メニュー バー
  2. \n' + - '
  3. 各ツール バー グループ
  4. \n' + - '
  5. サイド バー
  6. \n' + - '
  7. フッターの要素パス
  8. \n' + - '
  9. フッターの単語数切り替えボタン
  10. \n' + - '
  11. フッターのブランド リンク
  12. \n' + - '
  13. フッターのエディター サイズ変更ハンドル
  14. \n' + - '
\n' + - '\n' + - '

UI セクションが存在しない場合は、スキップされます。

\n' + - '\n' + - '

フッターにキーボード ナビゲーション フォーカスがあり、表示可能なサイド バーがない場合、Shift+Tab を押すと、\n' + - ' フォーカスが最後ではなく最初のツール バー グループに移動します。\n' + - '\n' + - '

UI セクション内の移動

\n' + - '\n' + - '

次の UI 要素に移動するには、適切な矢印キーを押します。

\n' + - '\n' + - '

左矢印右矢印のキー

\n' + - '\n' + - '
    \n' + - '
  • メニュー バーのメニュー間で移動します。
  • \n' + - '
  • メニュー内のサブメニューを開きます。
  • \n' + - '
  • ツール バー グループのボタン間で移動します。
  • \n' + - '
  • フッターの要素パスの項目間で移動します。
  • \n' + - '
\n' + - '\n' + - '

下矢印上矢印のキー\n' + - '\n' + - '

    \n' + - '
  • メニュー内のメニュー項目間で移動します。
  • \n' + - '
  • ツール バー ポップアップ メニュー内のメニュー項目間で移動します。
  • \n' + - '
\n' + - '\n' + - '

矢印キーで、フォーカスされた UI セクション内で循環します。

\n' + - '\n' + - '

開いたメニュー、開いたサブメニュー、開いたポップアップ メニューを閉じるには、Esc キーを押します。\n' + - '\n' + - '

現在のフォーカスが特定の UI セクションの「一番上」にある場合、Esc キーを押すと\n' + - ' キーボード ナビゲーションも完全に閉じられます。

\n' + - '\n' + - '

メニュー項目またはツール バー ボタンの実行

\n' + - '\n' + - '

目的のメニュー項目やツール バー ボタンが強調表示されている場合、リターンEnter、\n' + - ' またはスペース キーを押して項目を実行します。\n' + - '\n' + - '

タブのないダイアログの移動

\n' + - '\n' + - '

タブのないダイアログでは、ダイアログが開くと最初の対話型コンポーネントがフォーカスされます。

\n' + - '\n' + - '

Tab または Shift+Tab を押して、対話型ダイアログ コンポーネント間で移動します。

\n' + - '\n' + - '

タブ付きダイアログの移動

\n' + - '\n' + - '

タブ付きダイアログでは、ダイアログが開くとタブ メニューの最初のボタンがフォーカスされます。

\n' + - '\n' + - '

Tab または\n' + - ' Shift+Tab を押して、このダイアログ タブの対話型コンポーネント間で移動します。

\n' + - '\n' + - '

タブ メニューをフォーカスしてから適切な矢印キーを押して表示可能なタブを循環して、\n' + - ' 別のダイアログに切り替えます。

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/kk.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/kk.js deleted file mode 100644 index dd6370f84..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/kk.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.kk', -'

Пернетақта навигациясын бастау

\n' + - '\n' + - '
\n' + - '
Мәзір жолағын фокустау
\n' + - '
Windows немесе Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Құралдар тақтасын фокустау
\n' + - '
Windows немесе Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Төменгі деректемені фокустау
\n' + - '
Windows немесе Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Мәтінмәндік құралдар тақтасын фокустау
\n' + - '
Windows, Linux немесе macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Навигация бөлектелетін немесе Төменгі деректеме элементінің жолындағы бірінші элемент жағдайында асты сызылатын\n' + - ' бірінші ПИ элементінен басталады.

\n' + - '\n' + - '

ПИ бөлімдері арасында навигациялау

\n' + - '\n' + - '

Бір ПИ бөлімінен келесісіне өту үшін Tab пернесін басыңыз.

\n' + - '\n' + - '

Бір ПИ бөлімінен алдыңғысына өту үшін Shift+Tab пернесін басыңыз.

\n' + - '\n' + - '

Осы ПИ бөлімдерінің Tab реті:\n' + - '\n' + - '

    \n' + - '
  1. Мәзір жолағы
  2. \n' + - '
  3. Әрбір құралдар тақтасы тобы
  4. \n' + - '
  5. Бүйірлік жолақ
  6. \n' + - '
  7. Төменгі деректемедегі элемент жолы
  8. \n' + - '
  9. Төменгі деректемедегі сөздер санын ауыстыру түймесі
  10. \n' + - '
  11. Төменгі деректемедегі брендингтік сілтеме
  12. \n' + - '
  13. Төменгі деректемедегі редактор өлшемін өзгерту тұтқасы
  14. \n' + - '
\n' + - '\n' + - '

ПИ бөлімі көрсетілмесе, ол өткізіп жіберіледі.

\n' + - '\n' + - '

Төменгі деректемеде пернетақта навигациясының фокусы болса және бүйірлік жолақ көрінбесе, Shift+Tab тіркесімін басу әрекеті\n' + - ' фокусты соңғысы емес, бірінші құралдар тақтасы тобына жылжытады.\n' + - '\n' + - '

ПИ бөлімдерінде навигациялау

\n' + - '\n' + - '

Бір ПИ элементінен келесісіне өту үшін Arrow (Көрсеткі) пернесін басыңыз.

\n' + - '\n' + - '

Left (Сол жақ) және Right (Оң жақ) көрсеткі пернелері

\n' + - '\n' + - '
    \n' + - '
  • мәзір жолағындағы мәзірлер арасында жылжыту.
  • \n' + - '
  • мәзірде ішкі мәзірді ашу.
  • \n' + - '
  • құралдар тақтасы тобындағы түймелер арасында жылжыту.
  • \n' + - '
  • төменгі деректеме элементінің жолындағы элементтер арасында жылжыту.
  • \n' + - '
\n' + - '\n' + - '

Down (Төмен) және Up (Жоғары) көрсеткі пернелері\n' + - '\n' + - '

    \n' + - '
  • мәзірдегі мәзір элементтері арасында жылжыту.
  • \n' + - '
  • құралдар тақтасының ашылмалы мәзіріндегі мәзір элементтері арасында жылжыту.
  • \n' + - '
\n' + - '\n' + - '

Фокусталған ПИ бөліміндегі Arrow (Көрсеткі) пернелерінің циклі.

\n' + - '\n' + - '

Ашық мәзірді жабу үшін ішкі мәзірді ашып немесе ашылмалы мәзірді ашып, Esc пернесін басыңыз.\n' + - '\n' + - '

Ағымдағы фокус белгілі бір ПИ бөлімінің «үстінде» болса, Esc пернесін басу әрекеті пернетақта\n' + - ' навигациясын толығымен жабады.

\n' + - '\n' + - '

Мәзір элементін немесе құралдар тақтасы түймесін орындау

\n' + - '\n' + - '

Қажетті мәзір элементі немесе құралдар тақтасы түймесі бөлектелген кезде, элементті орындау үшін Return (Қайтару), Enter (Енгізу)\n' + - ' немесе Space bar (Бос орын) пернесін басыңыз.\n' + - '\n' + - '

Белгіленбеген диалог терезелерін навигациялау

\n' + - '\n' + - '

Белгіленбеген диалог терезелерінде диалог терезесі ашылған кезде бірінші интерактивті құрамдас фокусталады.

\n' + - '\n' + - '

Tab немесе Shift+Tab пернесін басу арқылы интерактивті диалог терезесінің құрамдастары арасында навигациялаңыз.

\n' + - '\n' + - '

Белгіленген диалог терезелерін навигациялау

\n' + - '\n' + - '

Белгіленген диалог терезелерінде диалог терезесі ашылған кезде қойынды мәзіріндегі бірінші түйме фокусталады.

\n' + - '\n' + - '

Tab немесе\n' + - ' Shift+Tab пернесін басу арқылы осы диалог терезесі қойындысының интерактивті құрамдастары арасында навигациялаңыз.

\n' + - '\n' + - '

Қойынды мәзірінің фокусын беру арқылы басқа диалог терезесінің қойындысына ауысып, тиісті Arrow (Көрсеткі)\n' + - ' пернесін басу арқылы қолжетімді қойындылар арасында айналдыруға болады.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ko_KR.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ko_KR.js deleted file mode 100644 index 073592cd1..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ko_KR.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.ko_KR', -'

키보드 탐색 시작

\n' + - '\n' + - '
\n' + - '
메뉴 모음 포커스 표시
\n' + - '
Windows 또는 Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
도구 모음 포커스 표시
\n' + - '
Windows 또는 Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
푸터 포커스 표시
\n' + - '
Windows 또는 Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
컨텍스트 도구 모음에 포커스 표시
\n' + - '
Windows, Linux 또는 macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

첫 번째 UI 항목에서 탐색이 시작되며, 이때 첫 번째 항목이 강조 표시되거나 푸터 요소 경로에 있는\n' + - ' 경우 밑줄 표시됩니다.

\n' + - '\n' + - '

UI 섹션 간 탐색

\n' + - '\n' + - '

한 UI 섹션에서 다음 UI 섹션으로 이동하려면 Tab(탭)을 누릅니다.

\n' + - '\n' + - '

한 UI 섹션에서 이전 UI 섹션으로 돌아가려면 Shift+Tab(시프트+탭)을 누릅니다.

\n' + - '\n' + - '

이 UI 섹션의 Tab(탭) 순서는 다음과 같습니다.\n' + - '\n' + - '

    \n' + - '
  1. 메뉴 바
  2. \n' + - '
  3. 각 도구 모음 그룹
  4. \n' + - '
  5. 사이드바
  6. \n' + - '
  7. 푸터의 요소 경로
  8. \n' + - '
  9. 푸터의 단어 수 토글 버튼
  10. \n' + - '
  11. 푸터의 브랜딩 링크
  12. \n' + - '
  13. 푸터의 에디터 크기 변경 핸들
  14. \n' + - '
\n' + - '\n' + - '

UI 섹션이 없는 경우 건너뛰기합니다.

\n' + - '\n' + - '

푸터에 키보드 탐색 포커스가 있고 사이드바는 보이지 않는 경우 Shift+Tab(시프트+탭)을 누르면\n' + - ' 포커스 표시가 마지막이 아닌 첫 번째 도구 모음 그룹으로 이동합니다.\n' + - '\n' + - '

UI 섹션 내 탐색

\n' + - '\n' + - '

한 UI 요소에서 다음 UI 요소로 이동하려면 적절한 화살표 키를 누릅니다.

\n' + - '\n' + - '

왼쪽오른쪽 화살표 키의 용도:

\n' + - '\n' + - '
    \n' + - '
  • 메뉴 모음에서 메뉴 항목 사이를 이동합니다.
  • \n' + - '
  • 메뉴에서 하위 메뉴를 엽니다.
  • \n' + - '
  • 도구 모음 그룹에서 버튼 사이를 이동합니다.
  • \n' + - '
  • 푸터의 요소 경로에서 항목 간에 이동합니다.
  • \n' + - '
\n' + - '\n' + - '

아래 화살표 키의 용도:\n' + - '\n' + - '

    \n' + - '
  • 메뉴에서 메뉴 항목 사이를 이동합니다.
  • \n' + - '
  • 도구 모음 팝업 메뉴에서 메뉴 항목 사이를 이동합니다.
  • \n' + - '
\n' + - '\n' + - '

화살표 키는 포커스 표시 UI 섹션 내에서 순환됩니다.

\n' + - '\n' + - '

열려 있는 메뉴, 열려 있는 하위 메뉴 또는 열려 있는 팝업 메뉴를 닫으려면 Esc 키를 누릅니다.\n' + - '\n' + - "

현재 포커스 표시가 특정 UI 섹션 '상단'에 있는 경우 이때도 Esc 키를 누르면\n" + - ' 키보드 탐색이 완전히 종료됩니다.

\n' + - '\n' + - '

메뉴 항목 또는 도구 모음 버튼 실행

\n' + - '\n' + - '

원하는 메뉴 항목 또는 도구 모음 버튼이 강조 표시되어 있을 때 Return(리턴), Enter(엔터),\n' + - ' 또는 Space bar(스페이스바)를 눌러 해당 항목을 실행합니다.\n' + - '\n' + - '

탭이 없는 대화 탐색

\n' + - '\n' + - '

탭이 없는 대화의 경우, 첫 번째 대화형 요소가 포커스 표시된 상태로 대화가 열립니다.

\n' + - '\n' + - '

대화형 요소들 사이를 이동할 때는 Tab(탭) 또는 Shift+Tab(시프트+탭)을 누릅니다.

\n' + - '\n' + - '

탭이 있는 대화 탐색

\n' + - '\n' + - '

탭이 있는 대화의 경우, 탭 메뉴에서 첫 번째 버튼이 포커스 표시된 상태로 대화가 열립니다.

\n' + - '\n' + - '

이 대화 탭의 대화형 요소들 사이를 이동할 때는 Tab(탭) 또는\n' + - ' Shift+Tab(시프트+탭)을 누릅니다.

\n' + - '\n' + - '

다른 대화 탭으로 이동하려면 탭 메뉴를 포커스 표시한 다음 적절한 화살표\n' + - ' 키를 눌러 사용 가능한 탭들을 지나 원하는 탭으로 이동합니다.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ms.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ms.js deleted file mode 100644 index 579ab4935..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ms.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.ms', -'

Mulakan navigasi papan kekunci

\n' + - '\n' + - '
\n' + - '
Fokus bar Menu
\n' + - '
Windows atau Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fokus Bar Alat
\n' + - '
Windows atau Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fokus pengaki
\n' + - '
Windows atau Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fokus bar alat kontekstual
\n' + - '
Windows, Linux atau macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigasi akan bermula pada item UI pertama, yang akan diserlahkan atau digaris bawah dalam saiz item pertama dalam\n' + - ' laluan elemen Pengaki.

\n' + - '\n' + - '

Navigasi antara bahagian UI

\n' + - '\n' + - '

Untuk bergerak dari satu bahagian UI ke yang seterusnya, tekan Tab.

\n' + - '\n' + - '

Untuk bergerak dari satu bahagian UI ke yang sebelumnya, tekan Shift+Tab.

\n' + - '\n' + - '

Tertib Tab bahagian UI ini ialah:\n' + - '\n' + - '

    \n' + - '
  1. Bar menu
  2. \n' + - '
  3. Setiap kumpulan bar alat
  4. \n' + - '
  5. Bar sisi
  6. \n' + - '
  7. Laluan elemen dalam pengaki
  8. \n' + - '
  9. Butang togol kiraan perkataan dalam pengaki
  10. \n' + - '
  11. Pautan penjenamaan dalam pengaki
  12. \n' + - '
  13. Pemegang saiz semula editor dalam pengaki
  14. \n' + - '
\n' + - '\n' + - '

Jika bahagian UI tidak wujud, ia dilangkau.

\n' + - '\n' + - '

Jika pengaki mempunyai fokus navigasi papan kekunci dan tiada bar sisi kelihatan, menekan Shift+Tab\n' + - ' akan mengalihkan fokus ke kumpulan bar alat pertama, bukannya yang terakhir.\n' + - '\n' + - '

Navigasi dalam bahagian UI

\n' + - '\n' + - '

Untuk bergerak dari satu elemen UI ke yang seterusnya, tekan kekunci Anak Panah yang bersesuaian.

\n' + - '\n' + - '

Kekunci anak panah Kiri dan Kanan

\n' + - '\n' + - '
    \n' + - '
  • bergerak antara menu dalam bar menu.
  • \n' + - '
  • membukan submenu dalam menu.
  • \n' + - '
  • bergerak antara butang dalam kumpulan bar alat.
  • \n' + - '
  • Laluan elemen dalam pengaki.
  • \n' + - '
\n' + - '\n' + - '

Kekunci anak panah Bawah dan Atas\n' + - '\n' + - '

    \n' + - '
  • bergerak antara item menu dalam menu.
  • \n' + - '
  • bergerak antara item dalam menu timbul bar alat.
  • \n' + - '
\n' + - '\n' + - '

Kekunci Anak Panah berkitar dalam bahagian UI difokuskan.

\n' + - '\n' + - '

Untuk menutup menu buka, submenu terbuka atau menu timbul terbuka, tekan kekunci Esc.\n' + - '\n' + - "

Jika fokus semasa berada di bahagian 'atas' bahagian UI tertentu, menekan kekunci Esc juga akan keluar daripada\n" + - ' navigasi papan kekunci sepenuhnya.

\n' + - '\n' + - '

Laksanakan item menu atau butang bar alat

\n' + - '\n' + - '

Apabila item menu atau butang bar alat yang diinginkan diserlahkan, tekan Return, Enter,\n' + - ' atau bar Space untuk melaksanakan item.\n' + - '\n' + - '

Navigasi ke dialog tidak bertab

\n' + - '\n' + - '

Dalam dialog tidak bertab, komponen interaksi pertama difokuskan apabila dialog dibuka.

\n' + - '\n' + - '

Navigasi antara komponen dialog interaktif dengan menekan Tab atau Shift+Tab.

\n' + - '\n' + - '

Navigasi ke dialog bertab

\n' + - '\n' + - '

Dalam dialog bertab, butang pertama dalam menu tab difokuskan apabila dialog dibuka.

\n' + - '\n' + - '

Navigasi antara komponen interaktif tab dialog ini dengan menekan Tab atau\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Tukar kepada tab dialog lain dengan memfokuskan menu tab, kemudian menekan kekunci Anak Panah yang bersesuaian\n' + - ' untuk berkitar menerusi tab yang tersedia.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/nb_NO.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/nb_NO.js deleted file mode 100644 index f28db8f4f..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/nb_NO.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.nb_NO', -'

Starte tastaturnavigering

\n' + - '\n' + - '
\n' + - '
Utheve menylinjen
\n' + - '
Windows eller Linux: Alt + F9
\n' + - '
macOS: ⌥F9
\n' + - '
Utheve verktøylinjen
\n' + - '
Windows eller Linux: Alt + F10
\n' + - '
macOS: ⌥F10
\n' + - '
Utheve bunnteksten
\n' + - '
Windows eller Linux: Alt + F11
\n' + - '
macOS: ⌥F11
\n' + - '
Utheve en kontekstuell verktøylinje
\n' + - '
Windows, Linux eller macOS: Ctrl + F9\n' + - '
\n' + - '\n' + - '

Navigeringen starter ved det første grensesnittelementet, som utheves, eller understrekes når det gjelder det første elementet i\n' + - ' elementstien i bunnteksten.

\n' + - '\n' + - '

Navigere mellom grensesnittdeler

\n' + - '\n' + - '

Du kan bevege deg fra én grensesnittdel til den neste ved å trykke på tabulatortasten.

\n' + - '\n' + - '

Du kan bevege deg fra én grensesnittdel til den forrige ved å trykke på Shift + tabulatortasten.

\n' + - '\n' + - '

Rekkefølgen til tabulatortasten gjennom grensesnittdelene er:\n' + - '\n' + - '

    \n' + - '
  1. Menylinjen
  2. \n' + - '
  3. Hver gruppe på verktøylinjen
  4. \n' + - '
  5. Sidestolpen
  6. \n' + - '
  7. Elementstien i bunnteksten
  8. \n' + - '
  9. Veksleknappen for ordantall i bunnteksten
  10. \n' + - '
  11. Merkelenken i bunnteksten
  12. \n' + - '
  13. Skaleringshåndtaket for redigeringsprogrammet i bunnteksten
  14. \n' + - '
\n' + - '\n' + - '

Hvis en grensesnittdel ikke er til stede, blir den hoppet over.

\n' + - '\n' + - '

Hvis tastaturnavigeringen har uthevet bunnteksten og det ikke finnes en synlig sidestolpe, kan du trykke på Shift + tabulatortasten\n' + - ' for å flytte fokuset til den første gruppen på verktøylinjen i stedet for den siste.\n' + - '\n' + - '

Navigere innenfor grensesnittdeler

\n' + - '\n' + - '

Du kan bevege deg fra ett grensesnittelement til det neste ved å trykke på den aktuelle piltasten.

\n' + - '\n' + - '

De venstre og høyre piltastene

\n' + - '\n' + - '
    \n' + - '
  • beveger deg mellom menyer på menylinjen.
  • \n' + - '
  • åpner en undermeny i en meny.
  • \n' + - '
  • beveger deg mellom knapper i en gruppe på verktøylinjen.
  • \n' + - '
  • beveger deg mellom elementer i elementstien i bunnteksten.
  • \n' + - '
\n' + - '\n' + - '

Ned- og opp-piltastene\n' + - '\n' + - '

    \n' + - '
  • beveger deg mellom menyelementer i en meny.
  • \n' + - '
  • beveger deg mellom elementer i en hurtigmeny på verktøylinjen.
  • \n' + - '
\n' + - '\n' + - '

Med piltastene kan du bevege deg innenfor den uthevede grensesnittdelen.

\n' + - '\n' + - '

Du kan lukke en åpen meny, en åpen undermeny eller en åpen hurtigmeny ved å klikke på Esc-tasten.\n' + - '\n' + - '

Hvis det øverste nivået i en grensesnittdel er uthevet, kan du ved å trykke på Esc også avslutte\n' + - ' tastaturnavigeringen helt.

\n' + - '\n' + - '

Utføre et menyelement eller en knapp på en verktøylinje

\n' + - '\n' + - '

Når det ønskede menyelementet eller verktøylinjeknappen er uthevet, trykker du på Retur, Enter,\n' + - ' eller mellomromstasten for å utføre elementet.\n' + - '\n' + - '

Navigere i dialogbokser uten faner

\n' + - '\n' + - '

I dialogbokser uten faner blir den første interaktive komponenten uthevet når dialogboksen åpnes.

\n' + - '\n' + - '

Naviger mellom interaktive komponenter i dialogboksen ved å trykke på tabulatortasten eller Shift + tabulatortasten.

\n' + - '\n' + - '

Navigere i fanebaserte dialogbokser

\n' + - '\n' + - '

I fanebaserte dialogbokser blir den første knappen i fanemenyen uthevet når dialogboksen åpnes.

\n' + - '\n' + - '

Naviger mellom interaktive komponenter i fanen ved å trykke på tabulatortasten eller\n' + - ' Shift + tabulatortasten.

\n' + - '\n' + - '

Veksle til en annen fane i dialogboksen ved å utheve fanemenyen, og trykk deretter på den aktuelle piltasten\n' + - ' for å bevege deg mellom de tilgjengelige fanene.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/nl.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/nl.js deleted file mode 100644 index 99836a6b8..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/nl.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.nl', -'

Toetsenbordnavigatie starten

\n' + - '\n' + - '
\n' + - '
Focus op de menubalk instellen
\n' + - '
Windows of Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Focus op de werkbalk instellen
\n' + - '
Windows of Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Focus op de voettekst instellen
\n' + - '
Windows of Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Focus op een contextuele werkbalk instellen
\n' + - '
Windows, Linux of macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

De navigatie start bij het eerste UI-item, dat wordt gemarkeerd of onderstreept als het eerste item zich in\n' + - ' in het elementenpad van de voettekst bevindt.

\n' + - '\n' + - '

Navigeren tussen UI-secties

\n' + - '\n' + - '

Druk op Tab om naar de volgende UI-sectie te gaan.

\n' + - '\n' + - '

Druk op Shift+Tab om naar de vorige UI-sectie te gaan.

\n' + - '\n' + - '

De Tab-volgorde van deze UI-secties is:\n' + - '\n' + - '

    \n' + - '
  1. Menubalk
  2. \n' + - '
  3. Elke werkbalkgroep
  4. \n' + - '
  5. Zijbalk
  6. \n' + - '
  7. Elementenpad in de voettekst
  8. \n' + - '
  9. Wisselknop voor aantal woorden in de voettekst
  10. \n' + - '
  11. Merkkoppeling in de voettekst
  12. \n' + - '
  13. Greep voor het wijzigen van het formaat van de editor in de voettekst
  14. \n' + - '
\n' + - '\n' + - '

Als een UI-sectie niet aanwezig is, wordt deze overgeslagen.

\n' + - '\n' + - '

Als de focus van de toetsenbordnavigatie is ingesteld op de voettekst en er geen zichtbare zijbalk is, kun je op Shift+Tab drukken\n' + - ' om de focus naar de eerste werkbalkgroep in plaats van de laatste te verplaatsen.\n' + - '\n' + - '

Navigeren binnen UI-secties

\n' + - '\n' + - '

Druk op de pijltjestoets om naar het betreffende UI-element te gaan.

\n' + - '\n' + - '

Met de pijltjestoetsen Links en Rechts

\n' + - '\n' + - '
    \n' + - "
  • wissel je tussen menu's in de menubalk.
  • \n" + - '
  • open je een submenu in een menu.
  • \n' + - '
  • wissel je tussen knoppen in een werkbalkgroep.
  • \n' + - '
  • wissel je tussen items in het elementenpad in de voettekst.
  • \n' + - '
\n' + - '\n' + - '

Met de pijltjestoetsen Omlaag en Omhoog\n' + - '\n' + - '

    \n' + - '
  • wissel je tussen menu-items in een menu.
  • \n' + - '
  • wissel je tussen items in een werkbalkpop-upmenu.
  • \n' + - '
\n' + - '\n' + - '

Met de pijltjestoetsen wissel je binnen de UI-sectie waarop de focus is ingesteld.

\n' + - '\n' + - '

Druk op de toets Esc om een geopend menu, submenu of pop-upmenu te sluiten.\n' + - '\n' + - "

Als de huidige focus is ingesteld 'bovenaan' een bepaalde UI-sectie, kun je op de toets Esc drukken\n" + - ' om de toetsenbordnavigatie af te sluiten.

\n' + - '\n' + - '

Een menu-item of werkbalkknop uitvoeren

\n' + - '\n' + - '

Als het gewenste menu-item of de gewenste werkbalkknop is gemarkeerd, kun je op Return, Enter\n' + - ' of de spatiebalk drukken om het item uit te voeren.\n' + - '\n' + - '

Navigeren in dialoogvensters zonder tabblad

\n' + - '\n' + - '

Als een dialoogvenster zonder tabblad wordt geopend, wordt de focus ingesteld op het eerste interactieve onderdeel.

\n' + - '\n' + - '

Je kunt navigeren tussen interactieve onderdelen van een dialoogvenster door op Tab of Shift+Tab te drukken.

\n' + - '\n' + - '

Navigeren in dialoogvensters met tabblad

\n' + - '\n' + - '

Als een dialoogvenster met tabblad wordt geopend, wordt de focus ingesteld op de eerste knop in het tabbladmenu.

\n' + - '\n' + - '

Je kunt navigeren tussen interactieve onderdelen van dit tabblad van het dialoogvenster door op Tab of\n' + - ' Shift+Tab te drukken.

\n' + - '\n' + - '

Je kunt overschakelen naar een ander tabblad van het dialoogvenster door de focus in te stellen op het tabbladmenu en vervolgens op de juiste pijltjestoets\n' + - ' te drukken om tussen de beschikbare tabbladen te wisselen.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pl.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pl.js deleted file mode 100644 index 16704a00a..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pl.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.pl', -'

Początek nawigacji przy użyciu klawiatury

\n' + - '\n' + - '
\n' + - '
Ustaw fokus na pasek menu
\n' + - '
Windows lub Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Ustaw fokus na pasek narzędzi
\n' + - '
Windows lub Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Ustaw fokus na sekcję Footer
\n' + - '
Windows lub Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Ustaw fokus na kontekstowy pasek narzędzi
\n' + - '
Windows, Linux lub macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Nawigacja zostanie rozpoczęta od pierwszego elementu interfejsu użytkownika, który jest podświetlony lub — w przypadku pierwszego elementu\n' + - ' w ścieżce elementów w sekcji Footer — podkreślony.

\n' + - '\n' + - '

Nawigacja pomiędzy sekcjami interfejsu użytkownika

\n' + - '\n' + - '

Aby przenieść się z danej sekcji interfejsu użytkownika do następnej, naciśnij Tab.

\n' + - '\n' + - '

Aby przenieść się z danej sekcji interfejsu użytkownika do poprzedniej, naciśnij Shift+Tab.

\n' + - '\n' + - '

Kolejność klawisza Tab w takich sekcjach interfejsu użytkownika jest następująca:\n' + - '\n' + - '

    \n' + - '
  1. Pasek menu
  2. \n' + - '
  3. Każda grupa na pasku narzędzi
  4. \n' + - '
  5. Pasek boczny
  6. \n' + - '
  7. Ścieżka elementów w sekcji Footer
  8. \n' + - '
  9. Przycisk przełączania liczby słów w sekcji Footer
  10. \n' + - '
  11. Łącze brandujące w sekcji Footer
  12. \n' + - '
  13. Uchwyt zmiany rozmiaru edytora w sekcji Footer
  14. \n' + - '
\n' + - '\n' + - '

Jeżeli nie ma sekcji interfejsu użytkownika, jest to pomijane.

\n' + - '\n' + - '

Jeżeli na sekcji Footer jest ustawiony fokus nawigacji przy użyciu klawiatury i nie ma widocznego paska bocznego, naciśnięcie Shift+Tab\n' + - ' przenosi fokus na pierwszą grupę paska narzędzi, a nie na ostatnią.\n' + - '\n' + - '

Nawigacja wewnątrz sekcji interfejsu użytkownika

\n' + - '\n' + - '

Aby przenieść się z danego elementu interfejsu użytkownika do następnego, naciśnij odpowiedni klawisz strzałki.

\n' + - '\n' + - '

Klawisze strzałek w prawo i w lewo służą do

\n' + - '\n' + - '
    \n' + - '
  • przenoszenia się pomiędzy menu na pasku menu,
  • \n' + - '
  • otwarcia podmenu w menu,
  • \n' + - '
  • przenoszenia się pomiędzy przyciskami w grupie paska narzędzi,
  • \n' + - '
  • przenoszenia się pomiędzy elementami w ścieżce elementów w sekcji Footer.
  • \n' + - '
\n' + - '\n' + - '

Klawisze strzałek w dół i w górę służą do\n' + - '\n' + - '

    \n' + - '
  • przenoszenia się pomiędzy elementami menu w menu,
  • \n' + - '
  • przenoszenia się pomiędzy elementami w wyskakującym menu paska narzędzi.
  • \n' + - '
\n' + - '\n' + - '

Klawisze strzałek służą do przemieszczania się w sekcji interfejsu użytkownika z ustawionym fokusem.

\n' + - '\n' + - '

Aby zamknąć otwarte menu, otwarte podmenu lub otwarte menu wyskakujące, naciśnij klawisz Esc.\n' + - '\n' + - '

Jeżeli fokus jest ustawiony na górze konkretnej sekcji interfejsu użytkownika, naciśnięcie klawisza Esc powoduje wyjście\n' + - ' z nawigacji przy użyciu klawiatury.

\n' + - '\n' + - '

Wykonanie elementu menu lub przycisku paska narzędzi

\n' + - '\n' + - '

Gdy podświetlony jest żądany element menu lub przycisk paska narzędzi, naciśnij klawisz Return, Enter\n' + - ' lub Spacja, aby go wykonać.\n' + - '\n' + - '

Nawigacja po oknie dialogowym bez kart

\n' + - '\n' + - '

Gdy otwiera się okno dialogowe bez kart, fokus ustawiany jest na pierwszą interaktywną część okna.

\n' + - '\n' + - '

Pomiędzy interaktywnymi częściami okna dialogowego nawiguj, naciskając klawisze Tab lub Shift+Tab.

\n' + - '\n' + - '

Nawigacja po oknie dialogowym z kartami

\n' + - '\n' + - '

W przypadku okna dialogowego z kartami po otwarciu okna dialogowego fokus ustawiany jest na pierwszy przycisk w menu karty.

\n' + - '\n' + - '

Nawigację pomiędzy interaktywnymi częściami karty okna dialogowego prowadzi się poprzez naciskanie klawiszy Tab lub\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Przełączenie się na inną kartę okna dialogowego wykonuje się poprzez ustawienie fokusu na menu karty i naciśnięcie odpowiedniego klawisza strzałki\n' + - ' w celu przemieszczenia się pomiędzy dostępnymi kartami.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pt_BR.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pt_BR.js deleted file mode 100644 index dea9abf96..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pt_BR.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_BR', -'

Iniciar navegação pelo teclado

\n' + - '\n' + - '
\n' + - '
Foco na barra de menus
\n' + - '
Windows ou Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Foco na barra de ferramentas
\n' + - '
Windows ou Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Foco no rodapé
\n' + - '
Windows ou Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Foco na barra de ferramentas contextual
\n' + - '
Windows, Linux ou macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

A navegação inicia no primeiro item da IU, que será destacado ou sublinhado no caso do primeiro item no\n' + - ' caminho do elemento Rodapé.

\n' + - '\n' + - '

Navegar entre seções da IU

\n' + - '\n' + - '

Para ir de uma seção da IU para a seguinte, pressione Tab.

\n' + - '\n' + - '

Para ir de uma seção da IU para a anterior, pressione Shift+Tab.

\n' + - '\n' + - '

A ordem de Tab destas seções da IU é:\n' + - '\n' + - '

    \n' + - '
  1. Barra de menus
  2. \n' + - '
  3. Cada grupo da barra de ferramentas
  4. \n' + - '
  5. Barra lateral
  6. \n' + - '
  7. Caminho do elemento no rodapé
  8. \n' + - '
  9. Botão de alternar contagem de palavras no rodapé
  10. \n' + - '
  11. Link da marca no rodapé
  12. \n' + - '
  13. Alça de redimensionamento do editor no rodapé
  14. \n' + - '
\n' + - '\n' + - '

Se não houver uma seção da IU, ela será pulada.

\n' + - '\n' + - '

Se o rodapé tiver o foco da navegação pelo teclado e não houver uma barra lateral visível, pressionar Shift+Tab\n' + - ' move o foco para o primeiro grupo da barra de ferramentas, não para o último.\n' + - '\n' + - '

Navegar dentro das seções da IU

\n' + - '\n' + - '

Para ir de um elemento da IU para o seguinte, pressione a Seta correspondente.

\n' + - '\n' + - '

As teclas de seta Esquerda e Direita

\n' + - '\n' + - '
    \n' + - '
  • movem entre menus na barra de menus.
  • \n' + - '
  • abrem um submenu em um menu.
  • \n' + - '
  • movem entre botões em um grupo da barra de ferramentas.
  • \n' + - '
  • movem entre itens no caminho do elemento do rodapé.
  • \n' + - '
\n' + - '\n' + - '

As teclas de seta Abaixo e Acima\n' + - '\n' + - '

    \n' + - '
  • movem entre itens de menu em um menu.
  • \n' + - '
  • movem entre itens em um menu suspenso da barra de ferramentas.
  • \n' + - '
\n' + - '\n' + - '

As teclas de Seta alternam dentre a seção da IU em foco.

\n' + - '\n' + - '

Para fechar um menu aberto, um submenu aberto ou um menu suspenso aberto, pressione Esc.\n' + - '\n' + - '

Se o foco atual estiver no ‘alto’ de determinada seção da IU, pressionar Esc também sai\n' + - ' totalmente da navegação pelo teclado.

\n' + - '\n' + - '

Executar um item de menu ou botão da barra de ferramentas

\n' + - '\n' + - '

Com o item de menu ou botão da barra de ferramentas desejado destacado, pressione Return, Enter,\n' + - ' ou a Barra de espaço para executar o item.\n' + - '\n' + - '

Navegar por caixas de diálogo sem guias

\n' + - '\n' + - '

Em caixas de diálogo sem guias, o primeiro componente interativo recebe o foco quando a caixa de diálogo abre.

\n' + - '\n' + - '

Navegue entre componentes interativos de caixa de diálogo pressionando Tab ou Shift+Tab.

\n' + - '\n' + - '

Navegar por caixas de diálogo com guias

\n' + - '\n' + - '

Em caixas de diálogo com guias, o primeiro botão no menu da guia recebe o foco quando a caixa de diálogo abre.

\n' + - '\n' + - '

Navegue entre componentes interativos dessa guia da caixa de diálogo pressionando Tab ou\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Alterne para outra guia da caixa de diálogo colocando o foco no menu da guia e pressionando a Seta\n' + - ' adequada para percorrer as guias disponíveis.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pt_PT.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pt_PT.js deleted file mode 100644 index b41bacdf0..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/pt_PT.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.pt_PT', -'

Iniciar navegação com teclado

\n' + - '\n' + - '
\n' + - '
Foco na barra de menu
\n' + - '
Windows ou Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Foco na barra de ferramentas
\n' + - '
Windows ou Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Foco no rodapé
\n' + - '
Windows ou Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Foco numa barra de ferramentas contextual
\n' + - '
Windows, Linux ou macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

A navegação começará no primeiro item de IU, que estará realçado ou sublinhado, no caso do primeiro item no\n' + - ' caminho do elemento do rodapé.

\n' + - '\n' + - '

Navegar entre secções de IU

\n' + - '\n' + - '

Para se mover de uma secção de IU para a seguinte, prima Tab.

\n' + - '\n' + - '

Para se mover de uma secção de IU para a anterior, prima Shift+Tab.

\n' + - '\n' + - '

A ordem de tabulação destas secções de IU é:\n' + - '\n' + - '

    \n' + - '
  1. Barra de menu
  2. \n' + - '
  3. Cada grupo da barra de ferramentas
  4. \n' + - '
  5. Barra lateral
  6. \n' + - '
  7. Caminho do elemento no rodapé
  8. \n' + - '
  9. Botão de alternar da contagem de palavras no rodapé
  10. \n' + - '
  11. Ligação da marca no rodapé
  12. \n' + - '
  13. Alça de redimensionamento do editor no rodapé
  14. \n' + - '
\n' + - '\n' + - '

Se uma secção de IU não estiver presente, é ignorada.

\n' + - '\n' + - '

Se o rodapé tiver foco de navegação com teclado e não existir uma barra lateral visível, premir Shift+Tab\n' + - ' move o foco para o primeiro grupo da barra de ferramentas e não para o último.\n' + - '\n' + - '

Navegar nas secções de IU

\n' + - '\n' + - '

Para se mover de um elemento de IU para o seguinte, prima a tecla de seta adequada.

\n' + - '\n' + - '

As teclas de seta Para a esquerda e Para a direita

\n' + - '\n' + - '
    \n' + - '
  • movem-se entre menus na barra de menu.
  • \n' + - '
  • abrem um submenu num menu.
  • \n' + - '
  • movem-se entre botões num grupo da barra de ferramentas.
  • \n' + - '
  • movem-se entre itens no caminho do elemento do rodapé.
  • \n' + - '
\n' + - '\n' + - '

As teclas de seta Para cima e Para baixo\n' + - '\n' + - '

    \n' + - '
  • movem-se entre itens de menu num menu.
  • \n' + - '
  • movem-se entre itens num menu de pop-up da barra de ferramentas.
  • \n' + - '
\n' + - '\n' + - '

As teclas de seta deslocam-se ciclicamente na secção de IU em foco.

\n' + - '\n' + - '

Para fechar um menu aberto, um submenu aberto ou um menu de pop-up aberto, prima a tecla Esc.\n' + - '\n' + - '

Se o foco atual estiver no "topo" de determinada secção de IU, premir a tecla Esc também fecha\n' + - ' completamente a navegação com teclado.

\n' + - '\n' + - '

Executar um item de menu ou botão da barra de ferramentas

\n' + - '\n' + - '

Quando o item de menu ou o botão da barra de ferramentas pretendido estiver realçado, prima Retrocesso, Enter\n' + - ' ou a Barra de espaço para executar o item.\n' + - '\n' + - '

Navegar em diálogos sem separadores

\n' + - '\n' + - '

Nos diálogos sem separadores, o primeiro componente interativo fica em foco quando o diálogo abre.

\n' + - '\n' + - '

Navegue entre componentes interativos do diálogo, premindo Tab ou Shift+Tab.

\n' + - '\n' + - '

Navegar em diálogos com separadores

\n' + - '\n' + - '

Nos diálogos com separadores, o primeiro botão no menu do separador fica em foco quando o diálogo abre.

\n' + - '\n' + - '

Navegue entre os componentes interativos deste separador do diálogo, premindo Tab ou\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Mude para outro separador do diálogo colocando o menu do separador em foco e, em seguida, premindo a tecla de seta\n' + - ' adequada para se deslocar ciclicamente pelos separadores disponíveis.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ro.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ro.js deleted file mode 100644 index 738be9dbe..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ro.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.ro', -'

Începeți navigarea de la tastatură

\n' + - '\n' + - '
\n' + - '
Focalizare pe bara de meniu
\n' + - '
Windows sau Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Focalizare pe bara de instrumente
\n' + - '
Windows sau Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Focalizare pe subsol
\n' + - '
Windows sau Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Focalizare pe o bară de instrumente contextuală
\n' + - '
Windows, Linux sau macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigarea va începe de la primul element al interfeței cu utilizatorul, care va fi evidențiat sau subliniat în cazul primului element din\n' + - ' calea elementului Subsol.

\n' + - '\n' + - '

Navigați între secțiunile interfeței cu utilizatorul

\n' + - '\n' + - '

Pentru a trece de la o secțiune a interfeței cu utilizatorul la alta, apăsați Tab.

\n' + - '\n' + - '

Pentru a trece de la o secțiune a interfeței cu utilizatorul la cea anterioară, apăsați Shift+Tab.

\n' + - '\n' + - '

Ordinea cu Tab a acestor secțiuni ale interfeței cu utilizatorul este următoarea:\n' + - '\n' + - '

    \n' + - '
  1. Bara de meniu
  2. \n' + - '
  3. Fiecare grup de bare de instrumente
  4. \n' + - '
  5. Bara laterală
  6. \n' + - '
  7. Calea elementului în subsol
  8. \n' + - '
  9. Buton de comutare a numărului de cuvinte în subsol
  10. \n' + - '
  11. Link de branding în subsol
  12. \n' + - '
  13. Mâner de redimensionare a editorului în subsol
  14. \n' + - '
\n' + - '\n' + - '

În cazul în care o secțiune a interfeței cu utilizatorul nu este prezentă, aceasta este omisă.

\n' + - '\n' + - '

În cazul în care subsolul are focalizarea navigației asupra tastaturii și nu există o bară laterală vizibilă, apăsarea butonului Shift+Tab\n' + - ' mută focalizarea pe primul grup de bare de instrumente, nu pe ultimul.\n' + - '\n' + - '

Navigați în secțiunile interfeței cu utilizatorul

\n' + - '\n' + - '

Pentru a trece de la un element de interfață cu utilizatorul la următorul, apăsați tasta cu săgeata corespunzătoare.

\n' + - '\n' + - '

Tastele cu săgeți către stânga și dreapta

\n' + - '\n' + - '
    \n' + - '
  • navighează între meniurile din bara de meniuri.
  • \n' + - '
  • deschid un sub-meniu dintr-un meniu.
  • \n' + - '
  • navighează între butoanele dintr-un grup de bare de instrumente.
  • \n' + - '
  • navighează între elementele din calea elementelor subsolului.
  • \n' + - '
\n' + - '\n' + - '

Tastele cu săgeți în sus și în jos\n' + - '\n' + - '

    \n' + - '
  • navighează între elementele de meniu dintr-un meniu.
  • \n' + - '
  • navighează între elementele unui meniu pop-up din bara de instrumente.
  • \n' + - '
\n' + - '\n' + - '

Tastele cu săgeți navighează în cadrul secțiunii interfeței cu utilizatorul asupra căreia se focalizează.

\n' + - '\n' + - '

Pentru a închide un meniu deschis, un sub-meniu deschis sau un meniu pop-up deschis, apăsați tasta Esc.\n' + - '\n' + - '

Dacă focalizarea curentă este asupra „părții superioare” a unei anumite secțiuni a interfeței cu utilizatorul, prin apăsarea tastei Esc se iese, de asemenea,\n' + - ' în întregime din navigarea de la tastatură.

\n' + - '\n' + - '

Executarea unui element de meniu sau a unui buton din bara de instrumente

\n' + - '\n' + - '

Atunci când elementul de meniu dorit sau butonul dorit din bara de instrumente este evidențiat, apăsați Return, Enter,\n' + - ' sau bara de spațiu pentru a executa elementul.\n' + - '\n' + - '

Navigarea de dialoguri fără file

\n' + - '\n' + - '

În dialogurile fără file, prima componentă interactivă beneficiază de focalizare la deschiderea dialogului.

\n' + - '\n' + - '

Navigați între componentele dialogului interactiv apăsând Tab sau Shift+Tab.

\n' + - '\n' + - '

Navigarea de dialoguri cu file

\n' + - '\n' + - '

În dialogurile cu file, primul buton din meniul cu file beneficiază de focalizare la deschiderea dialogului.

\n' + - '\n' + - '

Navigați între componentele interactive ale acestei file de dialog apăsând Tab sau\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Treceți la o altă filă de dialog focalizând asupra meniului cu file și apoi apăsând săgeata corespunzătoare\n' + - ' pentru a parcurge filele disponibile.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ru.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ru.js deleted file mode 100644 index 83ec76ef0..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/ru.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.ru', -'

Начните управление с помощью клавиатуры

\n' + - '\n' + - '
\n' + - '
Фокус на панели меню
\n' + - '
Windows или Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Фокус на панели инструментов
\n' + - '
Windows или Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Фокус на нижнем колонтитуле
\n' + - '
Windows или Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Фокус на контекстной панели инструментов
\n' + - '
Windows, Linux или macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Первый доступный для управления элемент интерфейса будет выделен цветом или подчеркнут (если он находится\n' + - ' в пути элементов нижнего колонтитула).

\n' + - '\n' + - '

Переход между разделами пользовательского интерфейса

\n' + - '\n' + - '

Чтобы перейти из текущего раздела интерфейса в следующий, нажмите Tab.

\n' + - '\n' + - '

Чтобы перейти из текущего раздела интерфейса в предыдущий, нажмите Shift+Tab.

\n' + - '\n' + - '

Вкладки разделов интерфейса расположены в следующем порядке:\n' + - '\n' + - '

    \n' + - '
  1. Панель меню
  2. \n' + - '
  3. Группы панели инструментов
  4. \n' + - '
  5. Боковая панель
  6. \n' + - '
  7. Путь элементов нижнего колонтитула
  8. \n' + - '
  9. Подсчет слов/символов в нижнем колонтитуле
  10. \n' + - '
  11. Брендовая ссылка в нижнем колонтитуле
  12. \n' + - '
  13. Угол для изменения размера окна редактора
  14. \n' + - '
\n' + - '\n' + - '

Если раздел интерфейса отсутствует, он пропускается.

\n' + - '\n' + - '

Если при управлении с клавиатуры фокус находится на нижнем колонтитуле, а видимая боковая панель отсутствует, то при нажатии сочетания клавиш Shift+Tab\n' + - ' фокус переносится на первую группу панели инструментов, а не на последнюю.\n' + - '\n' + - '

Переход между элементами внутри разделов пользовательского интерфейса

\n' + - '\n' + - '

Чтобы перейти от текущего элемента интерфейса к следующему, нажмите соответствующую клавишу со стрелкой.

\n' + - '\n' + - '

Клавиши со стрелками влево и вправо позволяют

\n' + - '\n' + - '
    \n' + - '
  • перемещаться между разными меню в панели меню.
  • \n' + - '
  • открывать разделы меню.
  • \n' + - '
  • перемещаться между кнопками в группе панели инструментов.
  • \n' + - '
  • перемещаться между элементами в пути элементов нижнего колонтитула.
  • \n' + - '
\n' + - '\n' + - '

Клавиши со стрелками вниз и вверх позволяют\n' + - '\n' + - '

    \n' + - '
  • перемещаться между элементами одного меню.
  • \n' + - '
  • перемещаться между элементами всплывающего меню в панели инструментов.
  • \n' + - '
\n' + - '\n' + - '

При использовании клавиш со стрелками вы будете циклически перемещаться по элементам в пределах выбранного раздела интерфейса.

\n' + - '\n' + - '

Чтобы закрыть открытое меню, его раздел или всплывающее меню, нажмите клавишу Esc.\n' + - '\n' + - '

Если фокус находится наверху какого-либо раздела интерфейса, нажатие клавиши Esc также приведет\n' + - ' к выходу из режима управления с помощью клавиатуры.

\n' + - '\n' + - '

Использование элемента меню или кнопки на панели инструментов

\n' + - '\n' + - '

Когда элемент меню или кнопка панели инструментов будут выделены, нажмите Return, Enter\n' + - ' или Space, чтобы их активировать.\n' + - '\n' + - '

Управление в диалоговом окне без вкладок

\n' + - '\n' + - '

При открытии диалогового окна без вкладок фокус переносится на первый интерактивный компонент.

\n' + - '\n' + - '

Для перехода между интерактивными компонентами диалогового окна нажимайте Tab или Shift+Tab.

\n' + - '\n' + - '

Управление в диалоговом окне с вкладками

\n' + - '\n' + - '

При открытии диалогового окна с вкладками фокус переносится на первую кнопку в меню вкладок.

\n' + - '\n' + - '

Для перехода между интерактивными компонентами этой вкладки диалогового окна нажимайте Tab или\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Для перехода на другую вкладку диалогового окна переместите фокус на меню вкладок, а затем используйте клавиши со стрелками\n' + - ' для циклического переключения между доступными вкладками.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sk.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sk.js deleted file mode 100644 index 6ced78067..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sk.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.sk', -'

Začíname s navigáciou pomocou klávesnice

\n' + - '\n' + - '
\n' + - '
Prejsť na panel s ponukami
\n' + - '
Windows alebo Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Prejsť na panel nástrojov
\n' + - '
Windows alebo Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Prejsť na pätičku
\n' + - '
Windows alebo Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Prejsť na kontextový panel nástrojov
\n' + - '
Windows, Linux alebo macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigácia začne pri prvej položke používateľského rozhrania, ktorá bude zvýraznená alebo v prípade prvej položky\n' + - ' cesty k pätičke podčiarknutá.

\n' + - '\n' + - '

Navigácia medzi časťami používateľského rozhrania

\n' + - '\n' + - '

Ak sa chcete posunúť z jednej časti používateľského rozhrania do druhej, stlačte tlačidlo Tab.

\n' + - '\n' + - '

Ak sa chcete posunúť z jednej časti používateľského rozhrania do predchádzajúcej, stlačte tlačidlá Shift + Tab.

\n' + - '\n' + - '

Poradie prepínania medzi týmito časťami používateľského rozhrania pri stláčaní tlačidla Tab:\n' + - '\n' + - '

    \n' + - '
  1. Panel s ponukou
  2. \n' + - '
  3. Každá skupina panela nástrojov
  4. \n' + - '
  5. Bočný panel
  6. \n' + - '
  7. Cesta k prvku v pätičke
  8. \n' + - '
  9. Prepínač počtu slov v pätičke
  10. \n' + - '
  11. Odkaz na informácie o značke v pätičke
  12. \n' + - '
  13. Úchyt na zmenu veľkosti editora v pätičke
  14. \n' + - '
\n' + - '\n' + - '

Ak nejaká časť používateľského rozhrania nie je prítomná, preskočí sa.

\n' + - '\n' + - '

Ak je pätička vybratá na navigáciu pomocou klávesnice a nie je viditeľný bočný panel, stlačením klávesov Shift+Tab\n' + - ' prejdete na prvú skupinu panela nástrojov, nie na poslednú.\n' + - '\n' + - '

Navigácia v rámci častí používateľského rozhrania

\n' + - '\n' + - '

Ak sa chcete posunúť z jedného prvku používateľského rozhrania na ďalší, stlačte príslušný kláves so šípkou.

\n' + - '\n' + - '

Klávesy so šípkami doľava a doprava

\n' + - '\n' + - '
    \n' + - '
  • umožňujú presun medzi ponukami na paneli ponúk,
  • \n' + - '
  • otvárajú podponuku v rámci ponuky,
  • \n' + - '
  • umožňujú presun medzi tlačidlami v skupine panelov nástrojov,
  • \n' + - '
  • umožňujú presun medzi položkami cesty prvku v pätičke.
  • \n' + - '
\n' + - '\n' + - '

Klávesy so šípkami dole a hore\n' + - '\n' + - '

    \n' + - '
  • umožňujú presun medzi položkami ponuky,
  • \n' + - '
  • umožňujú presun medzi položkami v kontextovej ponuke panela nástrojov.
  • \n' + - '
\n' + - '\n' + - '

Klávesy so šípkami vykonávajú prepínanie v rámci vybranej časti používateľského rozhrania.

\n' + - '\n' + - '

Ak chcete zatvoriť otvorenú ponuku, otvorenú podponuku alebo otvorenú kontextovú ponuku, stlačte kláves Esc.\n' + - '\n' + - '

Ak je aktuálne vybratá horná časť konkrétneho používateľského rozhrania, stlačením klávesu Esc úplne ukončíte tiež\n' + - ' navigáciu pomocou klávesnice.

\n' + - '\n' + - '

Vykonanie príkazu položky ponuky alebo tlačidla panela nástrojov

\n' + - '\n' + - '

Keď je zvýraznená požadovaná položka ponuky alebo tlačidlo panela nástrojov, stlačením klávesov Return, Enter\n' + - ' alebo medzerníka vykonáte príslušný príkaz položky.\n' + - '\n' + - '

Navigácia v dialógových oknách bez záložiek

\n' + - '\n' + - '

Pri otvorení dialógových okien bez záložiek prejdete na prvý interaktívny komponent.

\n' + - '\n' + - '

Medzi interaktívnymi dialógovými komponentmi môžete prechádzať stlačením klávesov Tab alebo Shift+Tab.

\n' + - '\n' + - '

Navigácia v dialógových oknách so záložkami

\n' + - '\n' + - '

Pri otvorení dialógových okien so záložkami prejdete na prvé tlačidlo v ponuke záložiek.

\n' + - '\n' + - '

Medzi interaktívnymi komponentmi tejto dialógovej záložky môžete prechádzať stlačením klávesov Tab alebo\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Ak chcete prepnúť na ďalšiu záložku dialógového okna, prejdite do ponuky záložiek a potom môžete stlačením príslušného klávesu so šípkou\n' + - ' prepínať medzi dostupnými záložkami.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sl_SI.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sl_SI.js deleted file mode 100644 index 11fddecd9..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sl_SI.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.sl_SI', -'

Začetek krmarjenja s tipkovnico

\n' + - '\n' + - '
\n' + - '
Fokus na menijsko vrstico
\n' + - '
Windows ali Linux: Alt + F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fokus na orodno vrstico
\n' + - '
Windows ali Linux: Alt + F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fokus na nogo
\n' + - '
Windows ali Linux: Alt + F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fokus na kontekstualno orodno vrstico
\n' + - '
Windows, Linux ali macOS: Ctrl + F9\n' + - '
\n' + - '\n' + - '

Krmarjenje se bo začelo s prvim elementom uporabniškega vmesnika, ki bo izpostavljena ali podčrtan, če gre za prvi element na\n' + - ' poti do elementa noge.

\n' + - '\n' + - '

Krmarjenje med razdelki uporabniškega vmesnika

\n' + - '\n' + - '

Če se želite pomakniti z enega dela uporabniškega vmesnika na naslednjega, pritisnite tabulatorko.

\n' + - '\n' + - '

Če se želite pomakniti z enega dela uporabniškega vmesnika na prejšnjega, pritisnite shift + tabulatorko.

\n' + - '\n' + - '

Zaporedje teh razdelkov uporabniškega vmesnika, ko pritiskate tabulatorko, je:\n' + - '\n' + - '

    \n' + - '
  1. Menijska vrstica
  2. \n' + - '
  3. Posamezne skupine orodne vrstice
  4. \n' + - '
  5. Stranska vrstica
  6. \n' + - '
  7. Pod do elementa v nogi
  8. \n' + - '
  9. Gumb za preklop štetja besed v nogi
  10. \n' + - '
  11. Povezava do blagovne znamke v nogi
  12. \n' + - '
  13. Ročaj za spreminjanje velikosti urejevalnika v nogi
  14. \n' + - '
\n' + - '\n' + - '

Če razdelek uporabniškega vmesnika ni prisoten, je preskočen.

\n' + - '\n' + - '

Če ima noga fokus za krmarjenje s tipkovnico in ni vidne stranske vrstice, s pritiskom na shift + tabulatorko\n' + - ' fokus premaknete na prvo skupino orodne vrstice, ne zadnjo.\n' + - '\n' + - '

Krmarjenje v razdelkih uporabniškega vmesnika

\n' + - '\n' + - '

Če se želite premakniti z enega elementa uporabniškega vmesnika na naslednjega, pritisnite ustrezno puščično tipko.

\n' + - '\n' + - '

Leva in desna puščična tipka

\n' + - '\n' + - '
    \n' + - '
  • omogočata premikanje med meniji v menijski vrstici.
  • \n' + - '
  • odpreta podmeni v meniju.
  • \n' + - '
  • omogočata premikanje med gumbi v skupini orodne vrstice.
  • \n' + - '
  • omogočata premikanje med elementi na poti do elementov noge.
  • \n' + - '
\n' + - '\n' + - '

Spodnja in zgornja puščična tipka\n' + - '\n' + - '

    \n' + - '
  • omogočata premikanje med elementi menija.
  • \n' + - '
  • omogočata premikanje med elementi v pojavnem meniju orodne vrstice.
  • \n' + - '
\n' + - '\n' + - '

Puščične tipke omogočajo kroženje znotraj razdelka uporabniškega vmesnika, na katerem je fokus.

\n' + - '\n' + - '

Če želite zapreti odprt meni, podmeni ali pojavni meni, pritisnite tipko Esc.\n' + - '\n' + - '

Če je trenutni fokus na »vrhu« določenega razdelka uporabniškega vmesnika, s pritiskom tipke Esc zaprete\n' + - ' tudi celotno krmarjenje s tipkovnico.

\n' + - '\n' + - '

Izvajanje menijskega elementa ali gumba orodne vrstice

\n' + - '\n' + - '

Ko je označen želeni menijski element ali orodja vrstica, pritisnite vračalko, Enter\n' + - ' ali preslednico, da izvedete element.\n' + - '\n' + - '

Krmarjenje po pogovornih oknih brez zavihkov

\n' + - '\n' + - '

Ko odprete pogovorno okno brez zavihkov, ima fokus prva interaktivna komponenta.

\n' + - '\n' + - '

Med interaktivnimi komponentami pogovornega okna se premikate s pritiskom tabulatorke ali kombinacije tipke shift + tabulatorke.

\n' + - '\n' + - '

Krmarjenje po pogovornih oknih z zavihki

\n' + - '\n' + - '

Ko odprete pogovorno okno z zavihki, ima fokus prvi gumb v meniju zavihka.

\n' + - '\n' + - '

Med interaktivnimi komponentami tega zavihka pogovornega okna se premikate s pritiskom tabulatorke ali\n' + - ' kombinacije tipke shift + tabulatorke.

\n' + - '\n' + - '

Na drug zavihek pogovornega okna preklopite tako, da fokus prestavite na meni zavihka in nato pritisnete ustrezno puščično\n' + - ' tipko, da se pomaknete med razpoložljivimi zavihki.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sv_SE.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sv_SE.js deleted file mode 100644 index d82bce616..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/sv_SE.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.sv_SE', -'

Påbörja tangentbordsnavigering

\n' + - '\n' + - '
\n' + - '
Fokusera på menyraden
\n' + - '
Windows eller Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Fokusera på verktygsraden
\n' + - '
Windows eller Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Fokusera på verktygsraden
\n' + - '
Windows eller Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Fokusera på en snabbverktygsrad
\n' + - '
Windows, Linux eller macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Navigeringen börjar vid det första gränssnittsobjektet, vilket är markerat eller understruket om det gäller det första objektet i\n' + - ' sidfotens elementsökväg.

\n' + - '\n' + - '

Navigera mellan UI-avsnitt

\n' + - '\n' + - '

Flytta från ett UI-avsnitt till nästa genom att trycka på Tabb.

\n' + - '\n' + - '

Flytta från ett UI-avsnitt till det föregående genom att trycka på Skift+Tabb.

\n' + - '\n' + - '

Tabb-ordningen för dessa UI-avsnitt är:\n' + - '\n' + - '

    \n' + - '
  1. Menyrad
  2. \n' + - '
  3. Varje verktygsradsgrupp
  4. \n' + - '
  5. Sidoruta
  6. \n' + - '
  7. Elementsökväg i sidfoten
  8. \n' + - '
  9. Växlingsknapp för ordantal i sidfoten
  10. \n' + - '
  11. Varumärkeslänk i sidfoten
  12. \n' + - '
  13. Storlekshandtag för redigeraren i sidfoten
  14. \n' + - '
\n' + - '\n' + - '

Om ett UI-avsnitt inte finns hoppas det över.

\n' + - '\n' + - '

Om sidfoten har fokus på tangentbordsnavigering, och det inte finns någon synlig sidoruta, flyttas fokus till den första verktygsradsgruppen\n' + - ' när du trycker på Skift+Tabb, inte till den sista.\n' + - '\n' + - '

Navigera i UI-avsnitt

\n' + - '\n' + - '

Flytta från ett UI-element till nästa genom att trycka på motsvarande piltangent.

\n' + - '\n' + - '

Vänsterpil och högerpil

\n' + - '\n' + - '
    \n' + - '
  • flytta mellan menyer på menyraden.
  • \n' + - '
  • öppna en undermeny på en meny.
  • \n' + - '
  • flytta mellan knappar i en verktygsradgrupp.
  • \n' + - '
  • flytta mellan objekt i sidfotens elementsökväg.
  • \n' + - '
\n' + - '\n' + - '

Nedpil och uppil\n' + - '\n' + - '

    \n' + - '
  • flytta mellan menyalternativ på en meny.
  • \n' + - '
  • flytta mellan alternativ på en popup-meny på verktygsraden.
  • \n' + - '
\n' + - '\n' + - '

Piltangenterna cirkulerar inom det fokuserade UI-avsnittet.

\n' + - '\n' + - '

Tryck på Esc-tangenten om du vill stänga en öppen meny, undermeny eller popup-meny.\n' + - '\n' + - '

Om det aktuella fokuset är högst upp i ett UI-avsnitt avlutas även tangentbordsnavigeringen helt när\n' + - ' du trycker på Esc-tangenten.

\n' + - '\n' + - '

Köra ett menyalternativ eller en verktygfältsknapp

\n' + - '\n' + - '

När menyalternativet eller verktygsradsknappen är markerad trycker du på Retur, Enter\n' + - ' eller blanksteg för att köra alternativet.\n' + - '\n' + - '

Navigera i dialogrutor utan flikar

\n' + - '\n' + - '

I dialogrutor utan flikar är den första interaktiva komponenten i fokus när dialogrutan öppnas.

\n' + - '\n' + - '

Navigera mellan interaktiva dialogkomponenter genom att trycka på Tabb eller Skift+Tabb.

\n' + - '\n' + - '

Navigera i dialogrutor med flikar

\n' + - '\n' + - '

I dialogrutor utan flikar är den första knappen på flikmenyn i fokus när dialogrutan öppnas.

\n' + - '\n' + - '

Navigera mellan interaktiva komponenter på dialogrutefliken genom att trycka på Tabb eller\n' + - ' Skift+Tabb.

\n' + - '\n' + - '

Växla till en annan dialogruta genom att fokusera på flikmenyn och sedan trycka på motsvarande piltangent\n' + - ' för att cirkulera mellan de tillgängliga flikarna.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/th_TH.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/th_TH.js deleted file mode 100644 index 240f7ddda..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/th_TH.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.th_TH', -'

เริ่มต้นการนำทางด้วยแป้นพิมพ์

\n' + - '\n' + - '
\n' + - '
โฟกัสที่แถบเมนู
\n' + - '
Windows หรือ Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
โฟกัสที่แถบเครื่องมือ
\n' + - '
Windows หรือ Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
โฟกัสที่ส่วนท้าย
\n' + - '
Windows หรือ Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
โฟกัสที่แถบเครื่องมือตามบริบท
\n' + - '
Windows, Linux หรือ macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

การนำทางจะเริ่มที่รายการ UI แรก ซึ่งจะมีการไฮไลต์หรือขีดเส้นใต้ไว้ในกรณีที่รายการแรกอยู่ใน\n' + - ' พาธองค์ประกอบส่วนท้าย

\n' + - '\n' + - '

การนำทางระหว่างส่วนต่างๆ ของ UI

\n' + - '\n' + - '

ในการย้ายจากส่วน UI หนึ่งไปยังส่วนถัดไป ให้กด Tab

\n' + - '\n' + - '

ในการย้ายจากส่วน UI หนึ่งไปยังส่วนก่อนหน้า ให้กด Shift+Tab

\n' + - '\n' + - '

ลำดับแท็บของส่วนต่างๆ ของ UI คือ:\n' + - '\n' + - '

    \n' + - '
  1. แถบเมนู
  2. \n' + - '
  3. แต่ละกลุ่มแถบเครื่องมือ
  4. \n' + - '
  5. แถบข้าง
  6. \n' + - '
  7. พาธองค์ประกอบในส่วนท้าย
  8. \n' + - '
  9. ปุ่มสลับเปิด/ปิดจำนวนคำในส่วนท้าย
  10. \n' + - '
  11. ลิงก์ชื่อแบรนด์ในส่วนท้าย
  12. \n' + - '
  13. จุดจับปรับขนาดของตัวแก้ไขในส่วนท้าย
  14. \n' + - '
\n' + - '\n' + - '

หากส่วน UI ไม่ปรากฏ แสดงว่าถูกข้ามไป

\n' + - '\n' + - '

หากส่วนท้ายมีการโฟกัสการนำทางแป้นพิมพ์และไม่มีแถบข้างปรากฏ การกด Shift+Tab\n' + - ' จะย้ายการโฟกัสไปที่กลุ่มแถบเครื่องมือแรก ไม่ใช่สุดท้าย\n' + - '\n' + - '

การนำทางภายในส่วนต่างๆ ของ UI

\n' + - '\n' + - '

ในการย้ายจากองค์ประกอบ UI หนึ่งไปยังองค์ประกอบส่วนถัดไป ให้กดปุ่มลูกศรที่เหมาะสม

\n' + - '\n' + - '

ปุ่มลูกศรซ้ายและขวา

\n' + - '\n' + - '
    \n' + - '
  • ย้ายไปมาระหว่างเมนูต่างๆ ในแถบเมนู
  • \n' + - '
  • เปิดเมนูย่อยในเมนู
  • \n' + - '
  • ย้ายไปมาระหว่างปุ่มต่างๆ ในกลุ่มแถบเครื่องมือ
  • \n' + - '
  • ย้ายไปมาระหว่างรายการต่างๆ ในพาธองค์ประกอบของส่วนท้าย
  • \n' + - '
\n' + - '\n' + - '

ปุ่มลูกศรลงและขึ้น\n' + - '\n' + - '

    \n' + - '
  • ย้ายไปมาระหว่างรายการเมนูต่างๆ ในเมนู
  • \n' + - '
  • ย้ายไปมาระหว่างรายการต่างๆ ในเมนูป๊อบอัพแถบเครื่องมือ
  • \n' + - '
\n' + - '\n' + - '

ปุ่มลูกศรจะเลื่อนไปมาภายในส่วน UI ที่โฟกัส

\n' + - '\n' + - '

ในการปิดเมนูที่เปิดอยู่ เมนูย่อยที่เปิดอยู่ หรือเมนูป๊อบอัพที่เปิดอยู่ ให้กดปุ่ม Esc\n' + - '\n' + - '

หากโฟกัสปัจจุบันอยู่ที่ ‘ด้านบนสุด’ ของส่วน UI เฉพาะ การกดปุ่ม Esc จะทำให้ออกจาก\n' + - ' การนำทางด้วยแป้นพิมพ์ทั้งหมดเช่นกัน

\n' + - '\n' + - '

การดำเนินการรายการเมนูหรือปุ่มในแถบเครื่องมือ

\n' + - '\n' + - '

เมื่อไฮไลต์รายการเมนูหรือปุ่มในแถบเครื่องมือที่ต้องการ ให้กด Return, Enter\n' + - ' หรือ Space bar เพื่อดำเนินการรายการดังกล่าว\n' + - '\n' + - '

การนำทางสำหรับกล่องโต้ตอบที่ไม่อยู่ในแท็บ

\n' + - '\n' + - '

ในกล่องโต้ตอบที่ไม่อยู่ในแท็บ จะโฟกัสที่ส่วนประกอบเชิงโต้ตอบแรกเมื่อกล่องโต้ตอบเปิด

\n' + - '\n' + - '

นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของกล่องโต้ตอบ โดยการกด Tab หรือ Shift+Tab

\n' + - '\n' + - '

การนำทางสำหรับกล่องโต้ตอบที่อยู่ในแท็บ

\n' + - '\n' + - '

ในกล่องโต้ตอบที่อยู่ในแท็บ จะโฟกัสที่ปุ่มแรกในเมนูแท็บเมื่อกล่องโต้ตอบเปิด

\n' + - '\n' + - '

นำทางระหว่างส่วนประกอบเชิงโต้ตอบต่างๆ ของแท็บกล่องโต้ตอบนี้โดยการกด Tab หรือ\n' + - ' Shift+Tab

\n' + - '\n' + - '

สลับไปยังแท็บกล่องโต้ตอบอื่นโดยการเลือกโฟกัสที่เมนูแท็บ แล้วกดปุ่มลูกศรที่เหมาะสม\n' + - ' เพื่อเลือกแท็บที่ใช้ได้

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/tr.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/tr.js deleted file mode 100644 index 87e888548..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/tr.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.tr', -'

Klavyeyle gezintiyi başlatma

\n' + - '\n' + - '
\n' + - '
Menü çubuğuna odaklan
\n' + - '
Windows veya Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Araç çubuğuna odaklan
\n' + - '
Windows veya Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Alt bilgiye odaklan
\n' + - '
Windows veya Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Bağlamsal araç çubuğuna odaklan
\n' + - '
Windows, Linux veya macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Gezinti ilk kullanıcı arabirimi öğesinden başlar, bu öğe vurgulanır ya da ilk öğe, Alt bilgi elemanı\n' + - ' yolundaysa altı çizilir.

\n' + - '\n' + - '

Kullanıcı arabirimi bölümleri arasında gezinme

\n' + - '\n' + - '

Sonraki kullanıcı arabirimi bölümüne gitmek için Sekme tuşuna basın.

\n' + - '\n' + - '

Önceki kullanıcı arabirimi bölümüne gitmek için Shift+Sekme tuşlarına basın.

\n' + - '\n' + - '

Bu kullanıcı arabirimi bölümlerinin Sekme sırası:\n' + - '\n' + - '

    \n' + - '
  1. Menü çubuğu
  2. \n' + - '
  3. Her araç çubuğu grubu
  4. \n' + - '
  5. Kenar çubuğu
  6. \n' + - '
  7. Alt bilgide öğe yolu
  8. \n' + - '
  9. Alt bilgide sözcük sayısı geçiş düğmesi
  10. \n' + - '
  11. Alt bilgide marka bağlantısı
  12. \n' + - '
  13. Alt bilgide düzenleyiciyi yeniden boyutlandırma tutamacı
  14. \n' + - '
\n' + - '\n' + - '

Kullanıcı arabirimi bölümü yoksa atlanır.

\n' + - '\n' + - '

Alt bilgide klavyeyle gezinti odağı yoksa ve görünür bir kenar çubuğu mevcut değilse Shift+Sekme tuşlarına basıldığında\n' + - ' odak son araç çubuğu yerine ilk araç çubuğu grubuna taşınır.\n' + - '\n' + - '

Kullanıcı arabirimi bölümleri içinde gezinme

\n' + - '\n' + - '

Sonraki kullanıcı arabirimi elemanına gitmek için uygun Ok tuşuna basın.

\n' + - '\n' + - '

Sol ve Sağ ok tuşları

\n' + - '\n' + - '
    \n' + - '
  • menü çubuğundaki menüler arasında hareket eder.
  • \n' + - '
  • menüde bir alt menü açar.
  • \n' + - '
  • araç çubuğu grubundaki düğmeler arasında hareket eder.
  • \n' + - '
  • alt bilginin öğe yolundaki öğeler arasında hareket eder.
  • \n' + - '
\n' + - '\n' + - '

Aşağı ve Yukarı ok tuşları\n' + - '\n' + - '

    \n' + - '
  • menüdeki menü öğeleri arasında hareket eder.
  • \n' + - '
  • araç çubuğu açılır menüsündeki öğeler arasında hareket eder.
  • \n' + - '
\n' + - '\n' + - '

Ok tuşları, odaklanılan kullanıcı arabirimi bölümü içinde döngüsel olarak hareket eder.

\n' + - '\n' + - '

Açık bir menüyü, açık bir alt menüyü veya açık bir açılır menüyü kapatmak için Esc tuşuna basın.\n' + - '\n' + - '

Geçerli odak belirli bir kullanıcı arabirimi bölümünün "üst" kısmındaysa Esc tuşuna basıldığında\n' + - ' klavyeyle gezintiden de tamamen çıkılır.

\n' + - '\n' + - '

Menü öğesini veya araç çubuğu düğmesini yürütme

\n' + - '\n' + - '

İstediğiniz menü öğesi veya araç çubuğu düğmesi vurgulandığında Return, Enter\n' + - ' veya Ara çubuğu tuşuna basın.\n' + - '\n' + - '

Sekme bulunmayan iletişim kutularında gezinme

\n' + - '\n' + - '

Sekme bulunmayan iletişim kutularında, iletişim kutusu açıldığında ilk etkileşimli bileşene odaklanılır.

\n' + - '\n' + - '

Etkileşimli iletişim kutusu bileşenleri arasında gezinmek için Sekme veya Shift+ Sekme tuşlarına basın.

\n' + - '\n' + - '

Sekmeli iletişim kutularında gezinme

\n' + - '\n' + - '

Sekmeli iletişim kutularında, iletişim kutusu açıldığında sekme menüsündeki ilk düğmeye odaklanılır.

\n' + - '\n' + - '

Bu iletişim kutusu sekmesinin etkileşimli bileşenleri arasında gezinmek için Sekme veya\n' + - ' Shift+Sekme tuşlarına basın.

\n' + - '\n' + - '

Mevcut sekmeler arasında geçiş yapmak için sekme menüsüne odaklanıp uygun Ok tuşuna basarak\n' + - ' başka bir iletişim kutusu sekmesine geçiş yapın.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/uk.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/uk.js deleted file mode 100644 index 5cd07444c..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/uk.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.uk', -'

Початок роботи з навігацією за допомогою клавіатури

\n' + - '\n' + - '
\n' + - '
Фокус на рядок меню
\n' + - '
Windows або Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Фокус на панелі інструментів
\n' + - '
Windows або Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Фокус на розділі "Нижній колонтитул"
\n' + - '
Windows або Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Фокус на контекстній панелі інструментів
\n' + - '
Windows, Linux або macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Навігація почнеться з першого елемента інтерфейсу користувача, який буде виділено або підкреслено в разі, якщо перший елемент знаходиться в\n' + - ' шляху до елемента "Нижній колонтитул".

\n' + - '\n' + - '

Навігація між розділами інтерфейсу користувача

\n' + - '\n' + - '

Щоб перейти з одного розділу інтерфейсу користувача до наступного розділу, натисніть клавішу Tab.

\n' + - '\n' + - '

Щоб перейти з одного розділу інтерфейсу користувача до попереднього розділу, натисніть сполучення клавіш Shift+Tab.

\n' + - '\n' + - '

Порядок Вкладок цих розділів інтерфейсу користувача такий:\n' + - '\n' + - '

    \n' + - '
  1. Рядок меню
  2. \n' + - '
  3. Кожна група панелей інструментів
  4. \n' + - '
  5. Бічна панель
  6. \n' + - '
  7. Шлях до елементів у розділі "Нижній колонтитул"
  8. \n' + - '
  9. Кнопка перемикача "Кількість слів" у розділі "Нижній колонтитул"
  10. \n' + - '
  11. Посилання на брендинг у розділі "Нижній колонтитул"
  12. \n' + - '
  13. Маркер змінення розміру в розділі "Нижній колонтитул"
  14. \n' + - '
\n' + - '\n' + - '

Якщо розділ інтерфейсу користувача відсутній, він пропускається.

\n' + - '\n' + - '

Якщо фокус навігації клавіатури знаходиться на розділі "Нижній колонтитул", але користувач не бачить видиму бічну панель, натисніть Shift+Tab,\n' + - ' щоб перемістити фокус на першу групу панелі інструментів, а не на останню.\n' + - '\n' + - '

Навігація в межах розділів інтерфейсу користувача

\n' + - '\n' + - '

Щоб перейти з одного елементу інтерфейсу користувача до наступного, натисніть відповідну клавішу зі стрілкою.

\n' + - '\n' + - '

Клавіші зі стрілками Ліворуч і Праворуч

\n' + - '\n' + - '
    \n' + - '
  • переміщують між меню в рядку меню.
  • \n' + - '
  • відкривають вкладене меню в меню.
  • \n' + - '
  • переміщують користувача між кнопками в групі панелі інструментів.
  • \n' + - '
  • переміщують між елементами в шляху до елементів у розділі "Нижній колонтитул".
  • \n' + - '
\n' + - '\n' + - '

Клавіші зі стрілками Вниз і Вгору\n' + - '\n' + - '

    \n' + - '
  • переміщують між елементами меню в меню.
  • \n' + - '
  • переміщують між елементами в спливаючому меню панелі інструментів.
  • \n' + - '
\n' + - '\n' + - '

Клавіші зі стрілками переміщують фокус циклічно в межах розділу інтерфейсу користувача, на якому знаходиться фокус.

\n' + - '\n' + - '

Щоб закрити відкрите меню, відкрите вкладене меню або відкрите спливаюче меню, натисніть клавішу Esc.\n' + - '\n' + - '

Якщо поточний фокус знаходиться на верхньому рівні певного розділу інтерфейсу користувача, натискання клавіші Esc також виконує вихід\n' + - ' з навігації за допомогою клавіатури повністю.

\n' + - '\n' + - '

Виконання елементу меню або кнопки панелі інструментів

\n' + - '\n' + - '

Коли потрібний елемент меню або кнопку панелі інструментів виділено, натисніть клавіші Return, Enter,\n' + - ' або Пробіл, щоб виконати цей елемент.\n' + - '\n' + - '

Навігація по діалоговим вікнам без вкладок

\n' + - '\n' + - '

У діалогових вікнах без вкладок перший інтерактивний компонент приймає фокус, коли відкривається діалогове вікно.

\n' + - '\n' + - '

Переходьте між інтерактивними компонентами діалогового вікна, натискаючи клавіші Tab або Shift+Tab.

\n' + - '\n' + - '

Навігація по діалоговим вікнам з вкладками

\n' + - '\n' + - '

У діалогових вікнах із вкладками перша кнопка в меню вкладки приймає фокус, коли відкривається діалогове вікно.

\n' + - '\n' + - '

Переходьте між інтерактивними компонентами цієї вкладки діалогового вікна, натискаючи клавіші Tab або\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Щоб перейти на іншу вкладку діалогового вікна, перемістіть фокус на меню вкладки, а потім натисніть відповідну клавішу зі стрілкою,\n' + - ' щоб циклічно переходити по доступним вкладкам.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/vi.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/vi.js deleted file mode 100644 index 83d570d6e..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/vi.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.vi', -'

Bắt đầu điều hướng bàn phím

\n' + - '\n' + - '
\n' + - '
Tập trung vào thanh menu
\n' + - '
Windows hoặc Linux: Alt+F9
\n' + - '
macOS: ⌥F9
\n' + - '
Tập trung vào thanh công cụ
\n' + - '
Windows hoặc Linux: Alt+F10
\n' + - '
macOS: ⌥F10
\n' + - '
Tập trung vào chân trang
\n' + - '
Windows hoặc Linux: Alt+F11
\n' + - '
macOS: ⌥F11
\n' + - '
Tập trung vào thanh công cụ ngữ cảnh
\n' + - '
Windows, Linux hoặc macOS: Ctrl+F9\n' + - '
\n' + - '\n' + - '

Điều hướng sẽ bắt đầu từ mục UI đầu tiên. Mục này sẽ được tô sáng hoặc có gạch dưới (nếu là mục đầu tiên trong\n' + - ' đường dẫn phần tử Chân trang).

\n' + - '\n' + - '

Di chuyển qua lại giữa các phần UI

\n' + - '\n' + - '

Để di chuyển từ một phần UI sang phần tiếp theo, ấn Tab.

\n' + - '\n' + - '

Để di chuyển từ một phần UI về phần trước đó, ấn Shift+Tab.

\n' + - '\n' + - '

Thứ tự Tab của các phần UI này như sau:\n' + - '\n' + - '

    \n' + - '
  1. Thanh menu
  2. \n' + - '
  3. Từng nhóm thanh công cụ
  4. \n' + - '
  5. Thanh bên
  6. \n' + - '
  7. Đường dẫn phần tử trong chân trang
  8. \n' + - '
  9. Nút chuyển đổi đếm chữ ở chân trang
  10. \n' + - '
  11. Liên kết thương hiệu ở chân trang
  12. \n' + - '
  13. Núm điều tác chỉnh kích cỡ trình soạn thảo ở chân trang
  14. \n' + - '
\n' + - '\n' + - '

Nếu người dùng không thấy một phần UI, thì có nghĩa phần đó bị bỏ qua.

\n' + - '\n' + - '

Nếu ở chân trang có tính năng tập trung điều hướng bàn phím, mà không có thanh bên nào hiện hữu, thao tác ấn Shift+Tab\n' + - ' sẽ chuyển hướng tập trung vào nhóm thanh công cụ đầu tiên, không phải cuối cùng.\n' + - '\n' + - '

Di chuyển qua lại trong các phần UI

\n' + - '\n' + - '

Để di chuyển từ một phần tử UI sang phần tiếp theo, ấn phím Mũi tên tương ứng cho phù hợp.

\n' + - '\n' + - '

Các phím mũi tên TráiPhải

\n' + - '\n' + - '
    \n' + - '
  • di chuyển giữa các menu trong thanh menu.
  • \n' + - '
  • mở menu phụ trong một menu.
  • \n' + - '
  • di chuyển giữa các nút trong nhóm thanh công cụ.
  • \n' + - '
  • di chuyển giữa các mục trong đường dẫn phần tử của chân trang.
  • \n' + - '
\n' + - '\n' + - '

Các phím mũi tên Hướng xuốngHướng lên\n' + - '\n' + - '

    \n' + - '
  • di chuyển giữa các mục menu trong menu.
  • \n' + - '
  • di chuyển giữa các mục trong menu thanh công cụ dạng bật lên.
  • \n' + - '
\n' + - '\n' + - '

Các phím mũi tên xoay vòng trong một phần UI tập trung.

\n' + - '\n' + - '

Để đóng một menu mở, một menu phụ đang mở, hoặc một menu dạng bật lên đang mở, hãy ấn phím Esc.\n' + - '\n' + - '

Nếu trọng tâm hiện tại là ở phần “đầu” của một phần UI cụ thể, thao tác ấn phím Esc cũng sẽ thoát\n' + - ' toàn bộ phần điều hướng bàn phím.

\n' + - '\n' + - '

Thực hiện chức năng của một mục menu hoặc nút thanh công cụ

\n' + - '\n' + - '

Khi mục menu hoặc nút thanh công cụ muốn dùng được tô sáng, hãy ấn Return, Enter,\n' + - ' hoặc Phím cách để thực hiện chức năng mục đó.\n' + - '\n' + - '

Điều hướng giữa các hộp thoại không có nhiều tab

\n' + - '\n' + - '

Trong các hộp thoại không có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào thành phần tương tác đầu tiên.

\n' + - '\n' + - '

Di chuyển giữa các thành phần hộp thoại tương tác bằng cách ấn Tab hoặc Shift+Tab.

\n' + - '\n' + - '

Điều hướng giữa các hộp thoại có nhiều tab

\n' + - '\n' + - '

Trong các hộp thoại có nhiều tab, khi hộp thoại mở ra, trọng tâm sẽ hướng vào nút đầu tiên trong menu tab.

\n' + - '\n' + - '

Di chuyển giữa các thành phần tương tác của tab hộp thoại này bằng cách ấn Tab hoặc\n' + - ' Shift+Tab.

\n' + - '\n' + - '

Chuyển sang một tab hộp thoại khác bằng cách chuyển trọng tâm vào menu tab, rồi ấn phím Mũi tên phù hợp\n' + - ' để xoay vòng các tab hiện có.

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/zh_CN.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/zh_CN.js deleted file mode 100644 index 41fe62c35..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/zh_CN.js +++ /dev/null @@ -1,84 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_CN', -'

开始键盘导航

\n' + - '\n' + - '
\n' + - '
聚焦于菜单栏
\n' + - '
Windows 或 Linux:Alt+F9
\n' + - '
macOS:⌥F9
\n' + - '
聚焦于工具栏
\n' + - '
Windows 或 Linux:Alt+F10
\n' + - '
macOS:⌥F10
\n' + - '
聚焦于页脚
\n' + - '
Windows 或 Linux:Alt+F11
\n' + - '
macOS:⌥F11
\n' + - '
聚焦于上下文工具栏
\n' + - '
Windows、Linux 或 macOS:Ctrl+F9\n' + - '
\n' + - '\n' + - '

导航将在第一个 UI 项上开始,其中突出显示该项,或者对于页脚元素路径中的第一项,将为其添加下划线。

\n' + - '\n' + - '

在 UI 部分之间导航

\n' + - '\n' + - '

要从一个 UI 部分移至下一个,请按 Tab

\n' + - '\n' + - '

要从一个 UI 部分移至上一个,请按 Shift+Tab

\n' + - '\n' + - '

这些 UI 部分的 Tab 顺序为:\n' + - '\n' + - '

    \n' + - '
  1. 菜单栏
  2. \n' + - '
  3. 每个工具栏组
  4. \n' + - '
  5. 边栏
  6. \n' + - '
  7. 页脚中的元素路径
  8. \n' + - '
  9. 页脚中的字数切换按钮
  10. \n' + - '
  11. 页脚中的品牌链接
  12. \n' + - '
  13. 页脚中的编辑器调整大小图柄
  14. \n' + - '
\n' + - '\n' + - '

如果不存在某个 UI 部分,则跳过它。

\n' + - '\n' + - '

如果键盘导航焦点在页脚,并且没有可见的边栏,则按 Shift+Tab 将焦点移至第一个工具栏组而非最后一个。\n' + - '\n' + - '

在 UI 部分内导航

\n' + - '\n' + - '

要从一个 UI 元素移至下一个,请按相应的箭头键。

\n' + - '\n' + - '

箭头键

\n' + - '\n' + - '
    \n' + - '
  • 在菜单栏中的菜单之间移动。
  • \n' + - '
  • 打开菜单中的子菜单。
  • \n' + - '
  • 在工具栏组中的按钮之间移动。
  • \n' + - '
  • 在页脚的元素路径中的各项之间移动。
  • \n' + - '
\n' + - '\n' + - '

箭头键\n' + - '\n' + - '

    \n' + - '
  • 在菜单中的菜单项之间移动。
  • \n' + - '
  • 在工具栏弹出菜单中的各项之间移动。
  • \n' + - '
\n' + - '\n' + - '

箭头键在具有焦点的 UI 部分内循环。

\n' + - '\n' + - '

要关闭打开的菜单、打开的子菜单或打开的弹出菜单,请按 Esc 键。\n' + - '\n' + - '

如果当前的焦点在特定 UI 部分的“顶部”,则按 Esc 键还将完全退出键盘导航。

\n' + - '\n' + - '

执行菜单项或工具栏按钮

\n' + - '\n' + - '

当突出显示所需的菜单项或工具栏按钮时,按 ReturnEnter空格以执行该项。\n' + - '\n' + - '

在非标签页式对话框中导航

\n' + - '\n' + - '

在非标签页式对话框中,当对话框打开时,第一个交互组件获得焦点。

\n' + - '\n' + - '

通过按 TabShift+Tab,在交互对话框组件之间导航。

\n' + - '\n' + - '

在标签页式对话框中导航

\n' + - '\n' + - '

在标签页式对话框中,当对话框打开时,标签页菜单中的第一个按钮获得焦点。

\n' + - '\n' + - '

通过按 TabShift+Tab,在此对话框的交互组件之间导航。

\n' + - '\n' + - '

通过将焦点移至另一对话框标签页的菜单,然后按相应的箭头键以在可用的标签页间循环,从而切换到该对话框标签页。

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/zh_TW.js b/src/assets/tinyMCE/plugins/help/js/i18n/keynav/zh_TW.js deleted file mode 100644 index 26b3dd268..000000000 --- a/src/assets/tinyMCE/plugins/help/js/i18n/keynav/zh_TW.js +++ /dev/null @@ -1,90 +0,0 @@ -tinymce.Resource.add('tinymce.html-i18n.help-keynav.zh_TW', -'

開始鍵盤瀏覽

\n' + - '\n' + - '
\n' + - '
跳至功能表列
\n' + - '
Windows 或 Linux:Alt+F9
\n' + - '
macOS:⌥F9
\n' + - '
跳至工具列
\n' + - '
Windows 或 Linux:Alt+F10
\n' + - '
macOS:⌥F10
\n' + - '
跳至頁尾
\n' + - '
Windows 或 Linux:Alt+F11
\n' + - '
macOS:⌥F11
\n' + - '
跳至關聯式工具列
\n' + - '
Windows、Linux 或 macOS:Ctrl+F9\n' + - '
\n' + - '\n' + - '

瀏覽會從第一個 UI 項目開始,該項目會反白顯示,但如果是「頁尾」元素路徑的第一項,\n' + - ' 則加底線。

\n' + - '\n' + - '

在 UI 區段之間瀏覽

\n' + - '\n' + - '

從 UI 區段移至下一個,請按 Tab

\n' + - '\n' + - '

從 UI 區段移回上一個,請按 Shift+Tab

\n' + - '\n' + - '

這些 UI 區段的 Tab 順序如下:\n' + - '\n' + - '

    \n' + - '
  1. 功能表列
  2. \n' + - '
  3. 各個工具列群組
  4. \n' + - '
  5. 側邊欄
  6. \n' + - '
  7. 頁尾中的元素路徑
  8. \n' + - '
  9. 頁尾中字數切換按鈕
  10. \n' + - '
  11. 頁尾中的品牌連結
  12. \n' + - '
  13. 頁尾中編輯器調整大小控點
  14. \n' + - '
\n' + - '\n' + - '

如果 UI 區段未顯示,表示已略過該區段。

\n' + - '\n' + - '

如果鍵盤瀏覽跳至頁尾,但沒有顯示側邊欄,則按下 Shift+Tab\n' + - ' 會跳至第一個工具列群組,而不是最後一個。\n' + - '\n' + - '

在 UI 區段之內瀏覽

\n' + - '\n' + - '

在兩個 UI 元素之間移動,請按適當的方向鍵。

\n' + - '\n' + - '

向左向右方向鍵

\n' + - '\n' + - '
    \n' + - '
  • 在功能表列中的功能表之間移動。
  • \n' + - '
  • 開啟功能表中的子功能表。
  • \n' + - '
  • 在工具列群組中的按鈕之間移動。
  • \n' + - '
  • 在頁尾的元素路徑中項目之間移動。
  • \n' + - '
\n' + - '\n' + - '

向下向上方向鍵\n' + - '\n' + - '

    \n' + - '
  • 在功能表中的功能表項目之間移動。
  • \n' + - '
  • 在工具列快顯功能表中的項目之間移動。
  • \n' + - '
\n' + - '\n' + - '

方向鍵會在所跳至 UI 區段之內循環。

\n' + - '\n' + - '

若要關閉已開啟的功能表、已開啟的子功能表,或已開啟的快顯功能表,請按 Esc 鍵。\n' + - '\n' + - '

如果目前已跳至特定 UI 區段的「頂端」,則按 Esc 鍵也會結束\n' + - ' 整個鍵盤瀏覽。

\n' + - '\n' + - '

執行功能表列項目或工具列按鈕

\n' + - '\n' + - '

當想要的功能表項目或工具列按鈕已反白顯示時,按 ReturnEnter、\n' + - ' 或空白鍵即可執行該項目。\n' + - '\n' + - '

瀏覽非索引標籤式對話方塊

\n' + - '\n' + - '

在非索引標籤式對話方塊中,開啟對話方塊時會跳至第一個互動元件。

\n' + - '\n' + - '

TabShift+Tab 即可在互動式對話方塊元件之間瀏覽。

\n' + - '\n' + - '

瀏覽索引標籤式對話方塊

\n' + - '\n' + - '

在索引標籤式對話方塊中,開啟對話方塊時會跳至索引標籤式功能表中的第一個按鈕。

\n' + - '\n' + - '

若要在此對話方塊的互動式元件之間瀏覽,請按 Tab 或\n' + - ' Shift+Tab

\n' + - '\n' + - '

先跳至索引標籤式功能表,然後按適當的方向鍵,即可切換至另一個對話方塊索引標籤,\n' + - ' 以循環瀏覽可用的索引標籤。

\n'); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/help/plugin.min.js b/src/assets/tinyMCE/plugins/help/plugin.min.js deleted file mode 100644 index 1460eab37..000000000 --- a/src/assets/tinyMCE/plugins/help/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");let t=0;const n=e=>{const n=(new Date).getTime(),a=Math.floor(1e9*Math.random());return t++,e+"_"+a+t+String(n)},a=e=>t=>t.options.get(e),r=a("help_tabs"),o=a("forced_plugins"),i=("string",e=>"string"===(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=a=e,(r=String).prototype.isPrototypeOf(n)||(null===(o=a.constructor)||void 0===o?void 0:o.name)===r.name)?"string":t;var n,a,r,o})(e));const s=(void 0,e=>undefined===e);const c=e=>"function"==typeof e,l=(!1,()=>false);class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return null==e?m.none():m.some(e)}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const u=Array.prototype.slice,p=Array.prototype.indexOf,y=(e,t)=>{const n=e.length,a=new Array(n);for(let r=0;r{const n=[];for(let a=0,r=e.length;a{const n=u.call(e,0);return n.sort(t),n},g=Object.keys,k=Object.hasOwnProperty,v=(e,t)=>k.call(e,t);var b=tinymce.util.Tools.resolve("tinymce.Resource"),f=tinymce.util.Tools.resolve("tinymce.util.I18n");const A=(e,t)=>b.load(`tinymce.html-i18n.help-keynav.${t}`,`${e}/js/i18n/keynav/${t}.js`),C=e=>A(e,f.getCode()).catch((()=>A(e,"en")));var w=tinymce.util.Tools.resolve("tinymce.Env");const S=e=>{const t=w.os.isMacOS()||w.os.isiOS(),n=t?{alt:"⌥",ctrl:"⌃",shift:"⇧",meta:"⌘",access:"⌃⌥"}:{meta:"Ctrl ",access:"Shift + Alt "},a=e.split("+"),r=y(a,(e=>{const t=e.toLowerCase().trim();return v(n,t)?n[t]:e}));return t?r.join("").replace(/\s/,""):r.join("+")},M=[{shortcuts:["Meta + B"],action:"Bold"},{shortcuts:["Meta + I"],action:"Italic"},{shortcuts:["Meta + U"],action:"Underline"},{shortcuts:["Meta + A"],action:"Select all"},{shortcuts:["Meta + Y","Meta + Shift + Z"],action:"Redo"},{shortcuts:["Meta + Z"],action:"Undo"},{shortcuts:["Access + 1"],action:"Heading 1"},{shortcuts:["Access + 2"],action:"Heading 2"},{shortcuts:["Access + 3"],action:"Heading 3"},{shortcuts:["Access + 4"],action:"Heading 4"},{shortcuts:["Access + 5"],action:"Heading 5"},{shortcuts:["Access + 6"],action:"Heading 6"},{shortcuts:["Access + 7"],action:"Paragraph"},{shortcuts:["Access + 8"],action:"Div"},{shortcuts:["Access + 9"],action:"Address"},{shortcuts:["Alt + 0"],action:"Open help dialog"},{shortcuts:["Alt + F9"],action:"Focus to menubar"},{shortcuts:["Alt + F10"],action:"Focus to toolbar"},{shortcuts:["Alt + F11"],action:"Focus to element path"},{shortcuts:["Ctrl + F9"],action:"Focus to contextual toolbar"},{shortcuts:["Shift + Enter"],action:"Open popup menu for split buttons"},{shortcuts:["Meta + K"],action:"Insert link (if link plugin activated)"},{shortcuts:["Meta + S"],action:"Save (if save plugin activated)"},{shortcuts:["Meta + F"],action:"Find (if searchreplace plugin activated)"},{shortcuts:["Meta + Shift + F"],action:"Switch to or from fullscreen mode"}],T=()=>({name:"shortcuts",title:"Handy Shortcuts",items:[{type:"table",header:["Action","Shortcut"],cells:y(M,(e=>{const t=y(e.shortcuts,S).join(" or ");return[e.action,t]}))}]}),x=y([{key:"accordion",name:"Accordion"},{key:"advlist",name:"Advanced List"},{key:"anchor",name:"Anchor"},{key:"autolink",name:"Autolink"},{key:"autoresize",name:"Autoresize"},{key:"autosave",name:"Autosave"},{key:"charmap",name:"Character Map"},{key:"code",name:"Code"},{key:"codesample",name:"Code Sample"},{key:"colorpicker",name:"Color Picker"},{key:"directionality",name:"Directionality"},{key:"emoticons",name:"Emoticons"},{key:"fullscreen",name:"Full Screen"},{key:"help",name:"Help"},{key:"image",name:"Image"},{key:"importcss",name:"Import CSS"},{key:"insertdatetime",name:"Insert Date/Time"},{key:"link",name:"Link"},{key:"lists",name:"Lists"},{key:"media",name:"Media"},{key:"nonbreaking",name:"Nonbreaking"},{key:"pagebreak",name:"Page Break"},{key:"preview",name:"Preview"},{key:"quickbars",name:"Quick Toolbars"},{key:"save",name:"Save"},{key:"searchreplace",name:"Search and Replace"},{key:"table",name:"Table"},{key:"template",name:"Template"},{key:"textcolor",name:"Text Color"},{key:"visualblocks",name:"Visual Blocks"},{key:"visualchars",name:"Visual Characters"},{key:"wordcount",name:"Word Count"},{key:"a11ychecker",name:"Accessibility Checker",type:"premium"},{key:"advcode",name:"Advanced Code Editor",type:"premium"},{key:"advtable",name:"Advanced Tables",type:"premium"},{key:"advtemplate",name:"Advanced Templates",type:"premium",slug:"advanced-templates"},{key:"casechange",name:"Case Change",type:"premium"},{key:"checklist",name:"Checklist",type:"premium"},{key:"editimage",name:"Enhanced Image Editing",type:"premium"},{key:"footnotes",name:"Footnotes",type:"premium"},{key:"typography",name:"Advanced Typography",type:"premium",slug:"advanced-typography"},{key:"mediaembed",name:"Enhanced Media Embed",type:"premium",slug:"introduction-to-mediaembed"},{key:"export",name:"Export",type:"premium"},{key:"formatpainter",name:"Format Painter",type:"premium"},{key:"inlinecss",name:"Inline CSS",type:"premium",slug:"inline-css"},{key:"linkchecker",name:"Link Checker",type:"premium"},{key:"mentions",name:"Mentions",type:"premium"},{key:"mergetags",name:"Merge Tags",type:"premium"},{key:"pageembed",name:"Page Embed",type:"premium"},{key:"permanentpen",name:"Permanent Pen",type:"premium"},{key:"powerpaste",name:"PowerPaste",type:"premium",slug:"introduction-to-powerpaste"},{key:"rtc",name:"Real-Time Collaboration",type:"premium",slug:"rtc-introduction"},{key:"tinymcespellchecker",name:"Spell Checker Pro",type:"premium",slug:"introduction-to-tiny-spellchecker"},{key:"autocorrect",name:"Spelling Autocorrect",type:"premium"},{key:"tableofcontents",name:"Table of Contents",type:"premium"},{key:"tinycomments",name:"Tiny Comments",type:"premium",slug:"introduction-to-tiny-comments"},{key:"tinydrive",name:"Tiny Drive",type:"premium",slug:"tinydrive-introduction"}],(e=>({...e,type:e.type||"opensource",slug:e.slug||e.key}))),_=e=>{const t=e=>`${e.name}`,n=(e,n)=>{return(a=x,r=e=>e.key===n,((e,t,n)=>{for(let a=0,r=e.length;a((e,n)=>{const a=e.plugins[n].getMetadata;if(c(a)){const e=a();return{name:e.name,html:t(e)}}return{name:n,html:n}})(e,n)),(e=>{const n="premium"===e.type?`${e.name}*`:e.name;return{name:n,html:t({name:n,url:`https://www.tiny.cloud/docs/tinymce/6/${e.slug}/`})}}));var a,r},a=e=>{const t=(e=>{const t=g(e.plugins),n=o(e);return s(n)?t:h(t,(e=>!(((e,t)=>p.call(e,t))(n,e)>-1)))})(e),a=d(y(t,(t=>n(e,t))),((e,t)=>e.name.localeCompare(t.name))),r=y(a,(e=>"
  • "+e.html+"
  • ")),i=r.length,c=r.join("");return"

    "+f.translate(["Plugins installed ({0}):",i])+"

      "+c+"
    "},r={type:"htmlpanel",presets:"document",html:[(e=>null==e?"":'
    '+a(e)+"
    ")(e),(()=>{const e=h(x,(({type:e})=>"premium"===e)),t=d(y(e,(e=>e.name)),((e,t)=>e.localeCompare(t))),n=y(t,(e=>`
  • ${e}
  • `)).join("");return'

    '+f.translate("Premium plugins:")+"

    "})()].join("")};return{name:"plugins",title:"Plugins",items:[r]}};var O=tinymce.util.Tools.resolve("tinymce.EditorManager");const P=(e,t,a)=>()=>{(async(e,t,a)=>{const o=T(),s=await(async e=>({name:"keyboardnav",title:"Keyboard Navigation",items:[{type:"htmlpanel",presets:"document",html:await C(e)}]}))(a),c=_(e),l=(()=>{var e,t;const n='TinyMCE '+(e=O.majorVersion,t=O.minorVersion,(0===e.indexOf("@")?"X.X.X":e+"."+t)+"");return{name:"versions",title:"Version",items:[{type:"htmlpanel",html:"

    "+f.translate(["You are using {0}",n])+"

    ",presets:"document"}]}})(),u={[o.name]:o,[s.name]:s,[c.name]:c,[l.name]:l,...t.get()};return m.from(r(e)).fold((()=>(e=>{const t=g(e),n=t.indexOf("versions");return-1!==n&&(t.splice(n,1),t.push("versions")),{tabs:e,names:t}})(u)),(e=>((e,t)=>{const a={},r=y(e,(e=>{var r;if(i(e))return v(t,e)&&(a[e]=t[e]),e;{const t=null!==(r=e.name)&&void 0!==r?r:n("tab-name");return a[t]=e,t}}));return{tabs:a,names:r}})(e,u)))})(e,t,a).then((({tabs:t,names:n})=>{const a={type:"tabpanel",tabs:(e=>{const t=[],n=e=>{t.push(e)};for(let t=0;t{return v(n=t,a=e)?m.from(n[a]):m.none();var n,a})))};e.windowManager.open({title:"Help",size:"medium",body:a,buttons:[{type:"cancel",name:"close",text:"Close",primary:!0}],initialData:{}})}))};e.add("help",((e,t)=>{const a=(e=>{let t={};return{get:()=>t,set:e=>{t=e}}})(),r=(e=>({addTab:t=>{var a;const r=null!==(a=t.name)&&void 0!==a?a:n("tab-name"),o=e.get();o[r]=t,e.set(o)}}))(a);(e=>{(0,e.options.register)("help_tabs",{processor:"array"})})(e);const o=P(e,a,t);return((e,t)=>{e.ui.registry.addButton("help",{icon:"help",tooltip:"Help",onAction:t}),e.ui.registry.addMenuItem("help",{text:"Help",icon:"help",shortcut:"Alt+0",onAction:t})})(e,o),((e,t)=>{e.addCommand("mceHelp",t)})(e,o),e.shortcuts.add("Alt+0","Open help dialog","mceHelp"),((e,t)=>{e.on("init",(()=>{C(t)}))})(e,t),r}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/image/plugin.min.js b/src/assets/tinyMCE/plugins/image/plugin.min.js deleted file mode 100644 index aa8947304..000000000 --- a/src/assets/tinyMCE/plugins/image/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=Object.getPrototypeOf,a=(e,t,a)=>{var i;return!!a(e,t.prototype)||(null===(i=e.constructor)||void 0===i?void 0:i.name)===t.name},i=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&a(e,String,((e,t)=>t.isPrototypeOf(e)))?"string":t})(t)===e,s=e=>t=>typeof t===e,r=i("string"),o=i("object"),n=e=>((e,i)=>o(e)&&a(e,i,((e,a)=>t(e)===a)))(e,Object),l=i("array"),c=(null,e=>null===e);const m=s("boolean"),d=e=>!(e=>null==e)(e),g=s("function"),u=s("number"),p=()=>{};class h{constructor(e,t){this.tag=e,this.value=t}static some(e){return new h(!0,e)}static none(){return h.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?h.some(e(this.value)):h.none()}bind(e){return this.tag?e(this.value):h.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:h.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return d(e)?h.some(e):h.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}h.singletonNone=new h(!1);const b=Object.keys,v=Object.hasOwnProperty,y=(e,t)=>v.call(e,t),f=Array.prototype.push,w=e=>{const t=[];for(let a=0,i=e.length;a{((e,t,a)=>{if(!(r(a)||m(a)||u(a)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",a,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,a+"")})(e.dom,t,a)},D=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},_=D;var C=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),I=tinymce.util.Tools.resolve("tinymce.util.URI");const U=e=>e.length>0,S=e=>t=>t.options.get(e),x=S("image_dimensions"),N=S("image_advtab"),T=S("image_uploadtab"),O=S("image_prepend_url"),E=S("image_class_list"),L=S("image_description"),j=S("image_title"),M=S("image_caption"),R=S("image_list"),k=S("a11y_advanced_options"),z=S("automatic_uploads"),P=(e,t)=>Math.max(parseInt(e,10),parseInt(t,10)),B=e=>(e&&(e=e.replace(/px$/,"")),e),F=e=>(e.length>0&&/^[0-9]+$/.test(e)&&(e+="px"),e),H=e=>"IMG"===e.nodeName&&(e.hasAttribute("data-mce-object")||e.hasAttribute("data-mce-placeholder")),G=(e,t)=>{const a=e.options.get;return I.isDomSafe(t,"img",{allow_html_data_urls:a("allow_html_data_urls"),allow_script_urls:a("allow_script_urls"),allow_svg_data_urls:a("allow_svg_data_urls")})},W=C.DOM,$=e=>e.style.marginLeft&&e.style.marginRight&&e.style.marginLeft===e.style.marginRight?B(e.style.marginLeft):"",V=e=>e.style.marginTop&&e.style.marginBottom&&e.style.marginTop===e.style.marginBottom?B(e.style.marginTop):"",K=e=>e.style.borderWidth?B(e.style.borderWidth):"",Z=(e,t)=>{var a;return e.hasAttribute(t)&&null!==(a=e.getAttribute(t))&&void 0!==a?a:""},q=e=>null!==e.parentNode&&"FIGURE"===e.parentNode.nodeName,J=(e,t,a)=>{""===a||null===a?e.removeAttribute(t):e.setAttribute(t,a)},Q=(e,t)=>{const a=e.getAttribute("style"),i=t(null!==a?a:"");i.length>0?(e.setAttribute("style",i),e.setAttribute("data-mce-style",i)):e.removeAttribute("style")},X=(e,t)=>(e,a,i)=>{const s=e.style;s[a]?(s[a]=F(i),Q(e,t)):J(e,a,i)},Y=(e,t)=>e.style[t]?B(e.style[t]):Z(e,t),ee=(e,t)=>{const a=F(t);e.style.marginLeft=a,e.style.marginRight=a},te=(e,t)=>{const a=F(t);e.style.marginTop=a,e.style.marginBottom=a},ae=(e,t)=>{const a=F(t);e.style.borderWidth=a},ie=(e,t)=>{e.style.borderStyle=t},se=e=>{var t;return null!==(t=e.style.borderStyle)&&void 0!==t?t:""},re=e=>d(e)&&"FIGURE"===e.nodeName,oe=e=>0===W.getAttrib(e,"alt").length&&"presentation"===W.getAttrib(e,"role"),ne=e=>oe(e)?"":Z(e,"alt"),le=(e,t)=>{var a;const i=document.createElement("img");return J(i,"style",t.style),($(i)||""!==t.hspace)&&ee(i,t.hspace),(V(i)||""!==t.vspace)&&te(i,t.vspace),(K(i)||""!==t.border)&&ae(i,t.border),(se(i)||""!==t.borderStyle)&&ie(i,t.borderStyle),e(null!==(a=i.getAttribute("style"))&&void 0!==a?a:"")},ce=(e,t)=>({src:Z(t,"src"),alt:ne(t),title:Z(t,"title"),width:Y(t,"width"),height:Y(t,"height"),class:Z(t,"class"),style:e(Z(t,"style")),caption:q(t),hspace:$(t),vspace:V(t),border:K(t),borderStyle:se(t),isDecorative:oe(t)}),me=(e,t,a,i,s)=>{a[i]!==t[i]&&s(e,i,String(a[i]))},de=(e,t,a)=>{if(a){W.setAttrib(e,"role","presentation");const t=_(e);A(t,"alt","")}else{if(c(t)){"alt",_(e).dom.removeAttribute("alt")}else{const a=_(e);A(a,"alt",t)}"presentation"===W.getAttrib(e,"role")&&W.setAttrib(e,"role","")}},ge=(e,t)=>(a,i,s)=>{e(a,s),Q(a,t)},ue=(e,t,a)=>{const i=ce(e,a);me(a,i,t,"caption",((e,t,a)=>(e=>{q(e)?(e=>{const t=e.parentNode;d(t)&&(W.insertAfter(e,t),W.remove(t))})(e):(e=>{const t=W.create("figure",{class:"image"});W.insertAfter(t,e),t.appendChild(e),t.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),t.contentEditable="false"})(e)})(e))),me(a,i,t,"src",J),me(a,i,t,"title",J),me(a,i,t,"width",X(0,e)),me(a,i,t,"height",X(0,e)),me(a,i,t,"class",J),me(a,i,t,"style",ge(((e,t)=>J(e,"style",t)),e)),me(a,i,t,"hspace",ge(ee,e)),me(a,i,t,"vspace",ge(te,e)),me(a,i,t,"border",ge(ae,e)),me(a,i,t,"borderStyle",ge(ie,e)),((e,t,a)=>{a.alt===t.alt&&a.isDecorative===t.isDecorative||de(e,a.alt,a.isDecorative)})(a,i,t)},pe=(e,t)=>{const a=(e=>{if(e.margin){const t=String(e.margin).split(" ");switch(t.length){case 1:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[0],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[0];break;case 2:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[0],e["margin-left"]=e["margin-left"]||t[1];break;case 3:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[1];break;case 4:e["margin-top"]=e["margin-top"]||t[0],e["margin-right"]=e["margin-right"]||t[1],e["margin-bottom"]=e["margin-bottom"]||t[2],e["margin-left"]=e["margin-left"]||t[3]}delete e.margin}return e})(e.dom.styles.parse(t)),i=e.dom.styles.parse(e.dom.styles.serialize(a));return e.dom.styles.serialize(i)},he=e=>{const t=e.selection.getNode(),a=e.dom.getParent(t,"figure.image");return a?e.dom.select("img",a)[0]:t&&("IMG"!==t.nodeName||H(t))?null:t},be=(e,t)=>{var a;const i=e.dom,s=((t,a)=>{const i={};var s;return((e,t,a,i)=>{((e,t)=>{const a=b(e);for(let i=0,s=a.length;i{(t(e,s)?a:i)(e,s)}))})(t,((t,a)=>!e.schema.isValidChild(a,"figure")),(s=i,(e,t)=>{s[t]=e}),p),i})(e.schema.getTextBlockElements()),r=i.getParent(t.parentNode,(e=>{return t=s,a=e.nodeName,y(t,a)&&void 0!==t[a]&&null!==t[a];var t,a}),e.getBody());return r&&null!==(a=i.split(r,t))&&void 0!==a?a:t},ve=(e,t)=>{const a=((t,a)=>{const i=document.createElement("img");if(ue((t=>pe(e,t)),{...a,caption:!1},i),de(i,a.alt,a.isDecorative),a.caption){const e=W.create("figure",{class:"image"});return e.appendChild(i),e.appendChild(W.create("figcaption",{contentEditable:"true"},"Caption")),e.contentEditable="false",e}return i})(0,t);e.dom.setAttrib(a,"data-mce-id","__mcenew"),e.focus(),e.selection.setContent(a.outerHTML);const i=e.dom.select('*[data-mce-id="__mcenew"]')[0];if(e.dom.setAttrib(i,"data-mce-id",null),re(i)){const t=be(e,i);e.selection.select(t)}else e.selection.select(i)},ye=(e,t)=>{const a=he(e);if(a){const i={...ce((t=>pe(e,t)),a),...t},s=((e,t)=>{const a=t.src;return{...t,src:G(e,a)?a:""}})(e,i);i.src?((e,t)=>{const a=he(e);if(a)if(ue((t=>pe(e,t)),t,a),((e,t)=>{e.dom.setAttrib(t,"src",t.getAttribute("src"))})(e,a),re(a.parentNode)){const t=a.parentNode;be(e,t),e.selection.select(a.parentNode)}else e.selection.select(a),((e,t,a)=>{const i=()=>{a.onload=a.onerror=null,e.selection&&(e.selection.select(a),e.nodeChanged())};a.onload=()=>{t.width||t.height||!x(e)||e.dom.setAttribs(a,{width:String(a.clientWidth),height:String(a.clientHeight)}),i()},a.onerror=i})(e,t,a)})(e,s):((e,t)=>{if(t){const a=e.dom.is(t.parentNode,"figure.image")?t.parentNode:t;e.dom.remove(a),e.focus(),e.nodeChanged(),e.dom.isEmpty(e.getBody())&&(e.setContent(""),e.selection.setCursorLocation())}})(e,a)}else t.src&&ve(e,{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1,...t})},fe=(we=(e,t)=>n(e)&&n(t)?fe(e,t):t,(...e)=>{if(0===e.length)throw new Error("Can't merge zero objects");const t={};for(let a=0;ar(e.value)?e.value:"",Ce=(e,t)=>{const a=[];return De.each(e,(e=>{const i=(e=>r(e.text)?e.text:r(e.title)?e.title:"")(e);if(void 0!==e.menu){const s=Ce(e.menu,t);a.push({text:i,items:s})}else{const s=t(e);a.push({text:i,value:s})}})),a},Ie=(e=_e)=>t=>t?h.from(t).map((t=>Ce(t,e))):h.none(),Ue=(e,t)=>((e,a)=>{for(let a=0;ay(e,"items"))(i=e[a])?Ue(i.items,t):i.value===t?h.some(i):h.none();if(s.isSome())return s}var i;return h.none()})(e),Se=Ie,xe=(e,t)=>e.bind((e=>Ue(e,t))),Ne=e=>{const t=Se((t=>e.convertURL(t.value||t.url||"","src"))),a=new Promise((a=>{((e,t)=>{const a=R(e);r(a)?fetch(a).then((e=>{e.ok&&e.json().then(t)})):g(a)?a(t):t(a)})(e,(e=>{a(t(e).map((e=>w([[{text:"None",value:""}],e]))))}))})),i=(A=E(e),Ie(_e)(A)),s=N(e),o=T(e),n=(e=>U(e.options.get("images_upload_url")))(e),l=(e=>d(e.options.get("images_upload_handler")))(e),c=(e=>{const t=he(e);return t?ce((t=>pe(e,t)),t):{src:"",alt:"",title:"",width:"",height:"",class:"",style:"",caption:!1,hspace:"",vspace:"",border:"",borderStyle:"",isDecorative:!1}})(e),m=L(e),u=j(e),p=x(e),b=M(e),v=k(e),y=z(e),f=h.some(O(e)).filter((e=>r(e)&&e.length>0));var A;return a.then((e=>({image:c,imageList:e,classList:i,hasAdvTab:s,hasUploadTab:o,hasUploadUrl:n,hasUploadHandler:l,hasDescription:m,hasImageTitle:u,hasDimensions:p,hasImageCaption:b,prependURL:f,hasAccessibilityOptions:v,automaticUploads:y})))},Te=e=>{const t=e.imageList.map((e=>({name:"images",type:"listbox",label:"Image list",items:e}))),a={name:"alt",type:"input",label:"Alternative description",enabled:!(e.hasAccessibilityOptions&&e.image.isDecorative)},i=e.classList.map((e=>({name:"classes",type:"listbox",label:"Class",items:e})));return w([[{name:"src",type:"urlinput",filetype:"image",label:"Source"}],t.toArray(),e.hasAccessibilityOptions&&e.hasDescription?[{type:"label",label:"Accessibility",items:[{name:"isDecorative",type:"checkbox",label:"Image is decorative"}]}]:[],e.hasDescription?[a]:[],e.hasImageTitle?[{name:"title",type:"input",label:"Image title"}]:[],e.hasDimensions?[{name:"dimensions",type:"sizeinput"}]:[],[{...(s=e.classList.isSome()&&e.hasImageCaption,s?{type:"grid",columns:2}:{type:"panel"}),items:w([i.toArray(),e.hasImageCaption?[{type:"label",label:"Caption",items:[{type:"checkbox",name:"caption",label:"Show caption"}]}]:[]])}]]);var s},Oe=e=>({title:"General",name:"general",items:Te(e)}),Ee=Te,Le=e=>({src:{value:e.src,meta:{}},images:e.src,alt:e.alt,title:e.title,dimensions:{width:e.width,height:e.height},classes:e.class,caption:e.caption,style:e.style,vspace:e.vspace,border:e.border,hspace:e.hspace,borderstyle:e.borderStyle,fileinput:[],isDecorative:e.isDecorative}),je=(e,t)=>({src:e.src.value,alt:null!==e.alt&&0!==e.alt.length||!t?e.alt:null,title:e.title,width:e.dimensions.width,height:e.dimensions.height,class:e.classes,style:e.style,caption:e.caption,hspace:e.hspace,vspace:e.vspace,border:e.border,borderStyle:e.borderstyle,isDecorative:e.isDecorative}),Me=(e,t,a,i)=>{((e,t)=>{const a=t.getData();((e,t)=>/^(?:[a-zA-Z]+:)?\/\//.test(t)?h.none():e.prependURL.bind((e=>t.substring(0,e.length)!==e?h.some(e+t):h.none())))(e,a.src.value).each((e=>{t.setData({src:{value:e,meta:a.src.meta}})}))})(t,i),((e,t)=>{const a=t.getData(),i=a.src.meta;if(void 0!==i){const s=fe({},a);((e,t,a)=>{e.hasDescription&&r(a.alt)&&(t.alt=a.alt),e.hasAccessibilityOptions&&(t.isDecorative=a.isDecorative||t.isDecorative||!1),e.hasImageTitle&&r(a.title)&&(t.title=a.title),e.hasDimensions&&(r(a.width)&&(t.dimensions.width=a.width),r(a.height)&&(t.dimensions.height=a.height)),r(a.class)&&xe(e.classList,a.class).each((e=>{t.classes=e.value})),e.hasImageCaption&&m(a.caption)&&(t.caption=a.caption),e.hasAdvTab&&(r(a.style)&&(t.style=a.style),r(a.vspace)&&(t.vspace=a.vspace),r(a.border)&&(t.border=a.border),r(a.hspace)&&(t.hspace=a.hspace),r(a.borderstyle)&&(t.borderstyle=a.borderstyle))})(e,s,i),t.setData(s)}})(t,i),((e,t,a,i)=>{const s=i.getData(),r=s.src.value,o=s.src.meta||{};o.width||o.height||!t.hasDimensions||(U(r)?e.imageSize(r).then((e=>{a.open&&i.setData({dimensions:e})})).catch((e=>console.error(e))):i.setData({dimensions:{width:"",height:""}}))})(e,t,a,i),((e,t,a)=>{const i=a.getData(),s=xe(e.imageList,i.src.value);t.prevImage=s,a.setData({images:s.map((e=>e.value)).getOr("")})})(t,a,i)},Re=(e,t,a,i)=>{const s=i.getData();var r;i.block("Uploading image"),(r=s.fileinput,((e,t)=>0{i.unblock()}),(s=>{const r=URL.createObjectURL(s),o=()=>{i.unblock(),URL.revokeObjectURL(r)},n=s=>{i.setData({src:{value:s,meta:{}}}),i.showTab("general"),Me(e,t,a,i)};var l;(l=s,new Promise(((e,t)=>{const a=new FileReader;a.onload=()=>{e(a.result)},a.onerror=()=>{var e;t(null===(e=a.error)||void 0===e?void 0:e.message)},a.readAsDataURL(l)}))).then((a=>{const l=e.createBlobCache(s,r,a);t.automaticUploads?e.uploadImage(l).then((e=>{n(e.url),o()})).catch((t=>{o(),e.alertErr(t)})):(e.addToBlobCache(l),n(l.blobUri()),i.unblock())}))}))},ke=(e,t,a)=>(i,s)=>{"src"===s.name?Me(e,t,a,i):"images"===s.name?((e,t,a,i)=>{const s=i.getData(),r=xe(t.imageList,s.images);r.each((e=>{const t=""===s.alt||a.prevImage.map((e=>e.text===s.alt)).getOr(!1);t?""===e.value?i.setData({src:e,alt:a.prevAlt}):i.setData({src:e,alt:e.text}):i.setData({src:e})})),a.prevImage=r,Me(e,t,a,i)})(e,t,a,i):"alt"===s.name?a.prevAlt=i.getData().alt:"fileinput"===s.name?Re(e,t,a,i):"isDecorative"===s.name&&i.setEnabled("alt",!i.getData().isDecorative)},ze=e=>()=>{e.open=!1},Pe=e=>e.hasAdvTab||e.hasUploadUrl||e.hasUploadHandler?{type:"tabpanel",tabs:w([[Oe(e)],e.hasAdvTab?[{title:"Advanced",name:"advanced",items:[{type:"grid",columns:2,items:[{type:"input",label:"Vertical space",name:"vspace",inputMode:"numeric"},{type:"input",label:"Horizontal space",name:"hspace",inputMode:"numeric"},{type:"input",label:"Border width",name:"border",inputMode:"numeric"},{type:"listbox",name:"borderstyle",label:"Border style",items:[{text:"Select...",value:""},{text:"Solid",value:"solid"},{text:"Dotted",value:"dotted"},{text:"Dashed",value:"dashed"},{text:"Double",value:"double"},{text:"Groove",value:"groove"},{text:"Ridge",value:"ridge"},{text:"Inset",value:"inset"},{text:"Outset",value:"outset"},{text:"None",value:"none"},{text:"Hidden",value:"hidden"}]}]}]}]:[],e.hasUploadTab&&(e.hasUploadUrl||e.hasUploadHandler)?[{title:"Upload",name:"upload",items:[{type:"dropzone",name:"fileinput"}]}]:[]])}:{type:"panel",items:Ee(e)},Be=(e,t,a)=>i=>{const s=fe(Le(t.image),i.getData()),r={...s,style:le(a.normalizeCss,je(s,!1))};e.execCommand("mceUpdateImage",!1,je(r,t.hasAccessibilityOptions)),e.editorUpload.uploadImagesAuto(),i.close()},Fe=e=>t=>G(e,t)?(e=>new Promise((t=>{const a=document.createElement("img"),i=e=>{a.onload=a.onerror=null,a.parentNode&&a.parentNode.removeChild(a),t(e)};a.onload=()=>{const e={width:P(a.width,a.clientWidth),height:P(a.height,a.clientHeight)};i(Promise.resolve(e))},a.onerror=()=>{i(Promise.reject(`Failed to get image dimensions for: ${e}`))};const s=a.style;s.visibility="hidden",s.position="fixed",s.bottom=s.left="0px",s.width=s.height="auto",document.body.appendChild(a),a.src=e})))(e.documentBaseURI.toAbsolute(t)).then((e=>({width:String(e.width),height:String(e.height)}))):Promise.resolve({width:"",height:""}),He=e=>(t,a,i)=>{var s;return e.editorUpload.blobCache.create({blob:t,blobUri:a,name:null===(s=t.name)||void 0===s?void 0:s.replace(/\.[^\.]+$/,""),filename:t.name,base64:i.split(",")[1]})},Ge=e=>t=>{e.editorUpload.blobCache.add(t)},We=e=>t=>{e.windowManager.alert(t)},$e=e=>t=>pe(e,t),Ve=e=>t=>e.dom.parseStyle(t),Ke=e=>(t,a)=>e.dom.serializeStyle(t,a),Ze=e=>t=>Ae(e).upload([t],!1).then((e=>{var t;return 0===e.length?Promise.reject("Failed to upload image"):!1===e[0].status?Promise.reject(null===(t=e[0].error)||void 0===t?void 0:t.message):e[0]})),qe=e=>{const t={imageSize:Fe(e),addToBlobCache:Ge(e),createBlobCache:He(e),alertErr:We(e),normalizeCss:$e(e),parseStyle:Ve(e),serializeStyle:Ke(e),uploadImage:Ze(e)};return{open:()=>{Ne(e).then((a=>{const i=(e=>({prevImage:xe(e.imageList,e.image.src),prevAlt:e.image.alt,open:!0}))(a);return{title:"Insert/Edit Image",size:"normal",body:Pe(a),buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:Le(a.image),onSubmit:Be(e,a,t),onChange:ke(t,a,i),onClose:ze(i)}})).then(e.windowManager.open)}}},Je=e=>{const t=e.attr("class");return d(t)&&/\bimage\b/.test(t)},Qe=e=>t=>{let a=t.length;const i=t=>{t.attr("contenteditable",e?"true":null)};for(;a--;){const s=t[a];Je(s)&&(s.attr("contenteditable",e?"false":null),De.each(s.getAll("figcaption"),i))}},Xe=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("image",(e=>{(e=>{const t=e.options.register;t("image_dimensions",{processor:"boolean",default:!0}),t("image_advtab",{processor:"boolean",default:!1}),t("image_uploadtab",{processor:"boolean",default:!0}),t("image_prepend_url",{processor:"string",default:""}),t("image_class_list",{processor:"object[]"}),t("image_description",{processor:"boolean",default:!0}),t("image_title",{processor:"boolean",default:!1}),t("image_caption",{processor:"boolean",default:!1}),t("image_list",{processor:e=>{const t=!1===e||r(e)||((e,t)=>{if(l(e)){for(let a=0,i=e.length;a{e.on("PreInit",(()=>{e.parser.addNodeFilter("figure",Qe(!0)),e.serializer.addNodeFilter("figure",Qe(!1))}))})(e),(e=>{e.ui.registry.addToggleButton("image",{icon:"image",tooltip:"Insert/edit image",onAction:qe(e).open,onSetup:t=>{t.setActive(d(he(e)));const a=e.selection.selectorChangedWithUnbind("img:not([data-mce-object]):not([data-mce-placeholder]),figure.image",t.setActive).unbind,i=Xe(e)(t);return()=>{a(),i()}}}),e.ui.registry.addMenuItem("image",{icon:"image",text:"Image...",onAction:qe(e).open,onSetup:Xe(e)}),e.ui.registry.addContextMenu("image",{update:e=>re(e)||"IMG"===e.nodeName&&!H(e)?["image"]:[]})})(e),(e=>{e.addCommand("mceImage",qe(e).open),e.addCommand("mceUpdateImage",((t,a)=>{e.undoManager.transact((()=>ye(e,a)))}))})(e)}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/importcss/plugin.min.js b/src/assets/tinyMCE/plugins/importcss/plugin.min.js deleted file mode 100644 index bfb8a1d90..000000000 --- a/src/assets/tinyMCE/plugins/importcss/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(s=r=e,(o=String).prototype.isPrototypeOf(s)||(null===(n=r.constructor)||void 0===n?void 0:n.name)===o.name)?"string":t;var s,r,o,n})(t)===e,s=t("string"),r=t("object"),o=t("array"),n=("function",e=>"function"==typeof e);var c=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),i=tinymce.util.Tools.resolve("tinymce.EditorManager"),l=tinymce.util.Tools.resolve("tinymce.Env"),a=tinymce.util.Tools.resolve("tinymce.util.Tools");const p=e=>t=>t.options.get(e),u=p("importcss_merge_classes"),m=p("importcss_exclusive"),f=p("importcss_selector_converter"),y=p("importcss_selector_filter"),d=p("importcss_groups"),h=p("importcss_append"),_=p("importcss_file_filter"),g=p("skin"),v=p("skin_url"),b=Array.prototype.push,x=/^\.(?:ephox|tiny-pageembed|mce)(?:[.-]+\w+)+$/,T=e=>s(e)?t=>-1!==t.indexOf(e):e instanceof RegExp?t=>e.test(t):e,S=(e,t)=>{let s={};const r=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(t);if(!r)return;const o=r[1],n=r[2].substr(1).split(".").join(" "),c=a.makeMap("a,img");return r[1]?(s={title:t},e.schema.getTextBlockElements()[o]?s.block=o:e.schema.getBlockElements()[o]||c[o.toLowerCase()]?s.selector=o:s.inline=o):r[2]&&(s={inline:"span",title:t.substr(1),classes:n}),u(e)?s.classes=n:s.attributes={class:n},s},k=(e,t)=>null===t||m(e),w=e=>{e.on("init",(()=>{const t=(()=>{const e=[],t=[],s={};return{addItemToGroup:(e,r)=>{s[e]?s[e].push(r):(t.push(e),s[e]=[r])},addItem:t=>{e.push(t)},toFormats:()=>{return(r=t,n=e=>{const t=s[e];return 0===t.length?[]:[{title:e,items:t}]},(e=>{const t=[];for(let s=0,r=e.length;s{const s=e.length,r=new Array(s);for(let o=0;oa.map(e,(e=>a.extend({},e,{original:e,selectors:{},filter:T(e.filter)}))))(d(e)),u=(t,s)=>{if(((e,t,s,r)=>!(k(e,s)?t in r:t in s.selectors))(e,t,s,r)){((e,t,s,r)=>{k(e,s)?r[t]=!0:s.selectors[t]=!0})(e,t,s,r);const o=((e,t,s,r)=>{let o;const n=f(e);return o=r&&r.selector_converter?r.selector_converter:n||(()=>S(e,s)),o.call(t,s,r)})(e,e.plugins.importcss,t,s);if(o){const t=o.name||c.DOM.uniqueId();return e.formatter.register(t,o),{title:o.title,format:t}}}return null};a.each(((e,t,r)=>{const o=[],n={},c=(t,n)=>{let p,u=t.href;if(u=(e=>{const t=l.cacheSuffix;return s(e)&&(e=e.replace("?"+t,"").replace("&"+t,"")),e})(u),u&&(!r||r(u,n))&&!((e,t)=>{const s=g(e);if(s){const r=v(e),o=r?e.documentBaseURI.toAbsolute(r):i.baseURL+"/skins/ui/"+s,n=i.baseURL+"/skins/content/";return t===o+"/content"+(e.inline?".inline":"")+".min.css"||-1!==t.indexOf(n)}return!1})(e,u)){a.each(t.imports,(e=>{c(e,!0)}));try{p=t.cssRules||t.rules}catch(e){}a.each(p,(e=>{e.styleSheet?c(e.styleSheet,!0):e.selectorText&&a.each(e.selectorText.split(","),(e=>{o.push(a.trim(e))}))}))}};a.each(e.contentCSS,(e=>{n[e]=!0})),r||(r=(e,t)=>t||n[e]);try{a.each(t.styleSheets,(e=>{c(e)}))}catch(e){}return o})(e,e.getDoc(),T(_(e))),(e=>{if(!x.test(e)&&(!n||n(e))){const s=((e,t)=>a.grep(e,(e=>!e.filter||e.filter(t))))(p,e);if(s.length>0)a.each(s,(s=>{const r=u(e,s);r&&t.addItemToGroup(s.title,r)}));else{const s=u(e,null);s&&t.addItem(s)}}}));const m=t.toFormats();e.dispatch("addStyleModifications",{items:m,replace:!h(e)})}))};e.add("importcss",(e=>((e=>{const t=e.options.register,o=e=>s(e)||n(e)||r(e);t("importcss_merge_classes",{processor:"boolean",default:!0}),t("importcss_exclusive",{processor:"boolean",default:!0}),t("importcss_selector_converter",{processor:"function"}),t("importcss_selector_filter",{processor:o}),t("importcss_file_filter",{processor:o}),t("importcss_groups",{processor:"object[]"}),t("importcss_append",{processor:"boolean",default:!1})})(e),w(e),(e=>({convertSelectorToFormat:t=>S(e,t)}))(e))))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/insertdatetime/plugin.min.js b/src/assets/tinyMCE/plugins/insertdatetime/plugin.min.js deleted file mode 100644 index 73348f8e1..000000000 --- a/src/assets/tinyMCE/plugins/insertdatetime/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>t.options.get(e),a=t("insertdatetime_dateformat"),n=t("insertdatetime_timeformat"),r=t("insertdatetime_formats"),s=t("insertdatetime_element"),i="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),o="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),l="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),m="January February March April May June July August September October November December".split(" "),c=(e,t)=>{if((e=""+e).length(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=(t=t.replace("%D","%m/%d/%Y")).replace("%r","%I:%M:%S %p")).replace("%Y",""+a.getFullYear())).replace("%y",""+a.getYear())).replace("%m",c(a.getMonth()+1,2))).replace("%d",c(a.getDate(),2))).replace("%H",""+c(a.getHours(),2))).replace("%M",""+c(a.getMinutes(),2))).replace("%S",""+c(a.getSeconds(),2))).replace("%I",""+((a.getHours()+11)%12+1))).replace("%p",a.getHours()<12?"AM":"PM")).replace("%B",""+e.translate(m[a.getMonth()]))).replace("%b",""+e.translate(l[a.getMonth()]))).replace("%A",""+e.translate(o[a.getDay()]))).replace("%a",""+e.translate(i[a.getDay()]))).replace("%%","%"),u=(e,t)=>{if(s(e)){const a=d(e,t);let n;n=/%[HMSIp]/.test(t)?d(e,"%Y-%m-%dT%H:%M"):d(e,"%Y-%m-%d");const r=e.dom.getParent(e.selection.getStart(),"time");r?((e,t,a,n)=>{const r=e.dom.create("time",{datetime:a},n);e.dom.replace(r,t),e.selection.select(r,!0),e.selection.collapse(!1)})(e,r,n,a):e.insertContent('")}else e.insertContent(d(e,t))};var p=tinymce.util.Tools.resolve("tinymce.util.Tools");const g=e=>t=>{const a=()=>{t.setEnabled(e.selection.isEditable())};return e.on("NodeChange",a),a(),()=>{e.off("NodeChange",a)}};e.add("insertdatetime",(e=>{(e=>{const t=e.options.register;t("insertdatetime_dateformat",{processor:"string",default:e.translate("%Y-%m-%d")}),t("insertdatetime_timeformat",{processor:"string",default:e.translate("%H:%M:%S")}),t("insertdatetime_formats",{processor:"string[]",default:["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"]}),t("insertdatetime_element",{processor:"boolean",default:!1})})(e),(e=>{e.addCommand("mceInsertDate",((t,n)=>{u(e,null!=n?n:a(e))})),e.addCommand("mceInsertTime",((t,a)=>{u(e,null!=a?a:n(e))}))})(e),(e=>{const t=r(e),a=(e=>{let t=e;return{get:()=>t,set:e=>{t=e}}})((e=>{const t=r(e);return t.length>0?t[0]:n(e)})(e)),s=t=>e.execCommand("mceInsertDate",!1,t);e.ui.registry.addSplitButton("insertdatetime",{icon:"insert-time",tooltip:"Insert date/time",select:e=>e===a.get(),fetch:a=>{a(p.map(t,(t=>({type:"choiceitem",text:d(e,t),value:t}))))},onAction:e=>{s(a.get())},onItemAction:(e,t)=>{a.set(t),s(t)},onSetup:g(e)});const i=e=>()=>{a.set(e),s(e)};e.ui.registry.addNestedMenuItem("insertdatetime",{icon:"insert-time",text:"Date/time",getSubmenuItems:()=>p.map(t,(t=>({type:"menuitem",text:d(e,t),onAction:i(t)}))),onSetup:g(e)})})(e)}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/link/plugin.min.js b/src/assets/tinyMCE/plugins/link/plugin.min.js deleted file mode 100644 index 57e8a8342..000000000 --- a/src/assets/tinyMCE/plugins/link/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=o=e,(r=String).prototype.isPrototypeOf(n)||(null===(l=o.constructor)||void 0===l?void 0:l.name)===r.name)?"string":t;var n,o,r,l})(t)===e,n=e=>t=>typeof t===e,o=t("string"),r=t("object"),l=t("array"),a=(null,e=>null===e);const i=n("boolean"),s=e=>!(e=>null==e)(e),c=n("function"),u=(e,t)=>{if(l(e)){for(let n=0,o=e.length;n{},d=(e,t)=>e===t;class m{constructor(e,t){this.tag=e,this.value=t}static some(e){return new m(!0,e)}static none(){return m.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?m.some(e(this.value)):m.none()}bind(e){return this.tag?e(this.value):m.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:m.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return s(e)?m.some(e):m.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}m.singletonNone=new m(!1);const h=Array.prototype.indexOf,f=Array.prototype.push,p=e=>{const t=[];for(let n=0,o=e.length;n{for(let n=0;ne.exists((e=>n(e,t))),y=e=>{const t=[],n=e=>{t.push(e)};for(let t=0;te?m.some(t):m.none(),b=e=>t=>t.options.get(e),_=b("link_assume_external_targets"),w=b("link_context_toolbar"),C=b("link_list"),O=b("link_default_target"),N=b("link_default_protocol"),A=b("link_target_list"),S=b("link_rel_list"),E=b("link_class_list"),T=b("link_title"),R=b("allow_unsafe_link_target"),P=b("link_quicklink");var L=tinymce.util.Tools.resolve("tinymce.util.Tools");const M=e=>o(e.value)?e.value:"",D=(e,t)=>{const n=[];return L.each(e,(e=>{const r=(e=>o(e.text)?e.text:o(e.title)?e.title:"")(e);if(void 0!==e.menu){const o=D(e.menu,t);n.push({text:r,items:o})}else{const o=t(e);n.push({text:r,value:o})}})),n},B=(e=M)=>t=>m.from(t).map((t=>D(t,e))),I=e=>B(M)(e),j=B,K=(e,t)=>n=>({name:e,type:"listbox",label:t,items:n}),U=M,q=Object.keys,F=Object.hasOwnProperty,V=(e,t)=>F.call(e,t);var $=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),z=tinymce.util.Tools.resolve("tinymce.util.URI");const G=e=>s(e)&&"a"===e.nodeName.toLowerCase(),H=e=>G(e)&&!!Q(e),J=(e,t)=>{if(e.collapsed)return[];{const n=e.cloneContents(),o=n.firstChild,r=new $(o,n),l=[];let a=o;do{t(a)&&l.push(a)}while(a=r.next());return l}},W=e=>/^\w+:/i.test(e),Q=e=>{var t,n;return null!==(n=null!==(t=e.getAttribute("data-mce-href"))&&void 0!==t?t:e.getAttribute("href"))&&void 0!==n?n:""},X=(e,t)=>{const n=["noopener"],o=e?e.split(/\s+/):[],r=e=>e.filter((e=>-1===L.inArray(n,e))),l=t?(e=>(e=r(e)).length>0?e.concat(n):n)(o):r(o);return l.length>0?(e=>L.trim(e.sort().join(" ")))(l):""},Y=(e,t)=>(t=t||te(e.selection.getRng())[0]||e.selection.getNode(),le(t)?m.from(e.dom.select("a[href]",t)[0]):m.from(e.dom.getParent(t,"a[href]"))),Z=(e,t)=>Y(e,t).isSome(),ee=(e,t)=>t.fold((()=>e.getContent({format:"text"})),(e=>e.innerText||e.textContent||"")).replace(/\uFEFF/g,""),te=e=>J(e,H),ne=e=>L.grep(e,H),oe=e=>ne(e).length>0,re=e=>{const t=e.schema.getTextInlineElements();if(Y(e).exists((e=>e.hasAttribute("data-mce-block"))))return!1;const n=e.selection.getRng();return!!n.collapsed||0===J(n,(e=>1===e.nodeType&&!G(e)&&!V(t,e.nodeName.toLowerCase()))).length},le=e=>s(e)&&"FIGURE"===e.nodeName&&/\bimage\b/i.test(e.className),ae=(e,t,n)=>{const o=e.selection.getNode(),r=Y(e,o),l=((e,t)=>{const n={...t};if(0===S(e).length&&!R(e)){const e=X(n.rel,"_blank"===n.target);n.rel=e||null}return m.from(n.target).isNone()&&!1===A(e)&&(n.target=O(e)),n.href=((e,t)=>"http"!==t&&"https"!==t||W(e)?e:t+"://"+e)(n.href,_(e)),n})(e,(e=>{return t=["title","rel","class","target"],n=(t,n)=>(e[n].each((e=>{t[n]=e.length>0?e:null})),t),o={href:e.href},((e,t)=>{for(let n=0,o=e.length;n{o=n(o,e)})),o;var t,n,o})(n));e.undoManager.transact((()=>{n.href===t.href&&t.attach(),r.fold((()=>{((e,t,n,o)=>{const r=e.dom;le(t)?ge(r,t,o):n.fold((()=>{e.execCommand("mceInsertLink",!1,o)}),(t=>{e.insertContent(r.createHTML("a",o,r.encode(t)))}))})(e,o,n.text,l)}),(t=>{e.focus(),((e,t,n,o)=>{n.each((e=>{V(t,"innerText")?t.innerText=e:t.textContent=e})),e.dom.setAttribs(t,o),e.selection.select(t)})(e,t,n.text,l)}))}))},ie=e=>{const{class:t,href:n,rel:o,target:r,text:l,title:i}=e;return((e,t)=>{const n={};var o;return((e,t,n,o)=>{((e,t)=>{const n=q(e);for(let o=0,r=n.length;o{(t(e,r)?n:o)(e,r)}))})(e,((e,t)=>!1===a(e)),(o=n,(e,t)=>{o[t]=e}),g),n})({class:t.getOrNull(),href:n,rel:o.getOrNull(),target:r.getOrNull(),text:l.getOrNull(),title:i.getOrNull()})},se=(e,t,n)=>{const o=((e,t)=>{const n=e.options.get,o={allow_html_data_urls:n("allow_html_data_urls"),allow_script_urls:n("allow_script_urls"),allow_svg_data_urls:n("allow_svg_data_urls")},r=t.href;return{...t,href:z.isDomSafe(r,"a",o)?r:""}})(e,n);e.hasPlugin("rtc",!0)?e.execCommand("createlink",!1,ie(o)):ae(e,t,o)},ce=e=>{e.hasPlugin("rtc",!0)?e.execCommand("unlink"):(e=>{e.undoManager.transact((()=>{const t=e.selection.getNode();le(t)?ue(e,t):(e=>{const t=e.dom,n=e.selection,o=n.getBookmark(),r=n.getRng().cloneRange(),l=t.getParent(r.startContainer,"a[href]",e.getBody()),a=t.getParent(r.endContainer,"a[href]",e.getBody());l&&r.setStartBefore(l),a&&r.setEndAfter(a),n.setRng(r),e.execCommand("unlink"),n.moveToBookmark(o)})(e),e.focus()}))})(e)},ue=(e,t)=>{var n;const o=e.dom.select("img",t)[0];if(o){const r=e.dom.getParents(o,"a[href]",t)[0];r&&(null===(n=r.parentNode)||void 0===n||n.insertBefore(o,r),e.dom.remove(r))}},ge=(e,t,n)=>{var o;const r=e.select("img",t)[0];if(r){const t=e.create("a",n);null===(o=r.parentNode)||void 0===o||o.insertBefore(t,r),t.appendChild(r)}},de=(e,t)=>k(t,(t=>(e=>{return V(t=e,n="items")&&void 0!==t[n]&&null!==t[n];var t,n})(t)?de(e,t.items):x(t.value===e,t))),me=(e,t)=>{const n={text:e.text,title:e.title},o=(e,o)=>{const r=(l=t,a=o,"link"===a?l.link:"anchor"===a?l.anchor:m.none()).getOr([]);var l,a;return((e,t,n,o)=>{const r=o[t],l=e.length>0;return void 0!==r?de(r,n).map((t=>({url:{value:t.value,meta:{text:l?e:t.text,attach:g}},text:l?e:t.text}))):m.none()})(n.text,o,r,e)};return{onChange:(e,t)=>{const r=t.name;return"url"===r?(e=>{const t=(o=e.url,x(n.text.length<=0,m.from(null===(r=o.meta)||void 0===r?void 0:r.text).getOr(o.value)));var o,r;const l=(e=>{var t;return x(n.title.length<=0,m.from(null===(t=e.meta)||void 0===t?void 0:t.title).getOr(""))})(e.url);return t.isSome()||l.isSome()?m.some({...t.map((e=>({text:e}))).getOr({}),...l.map((e=>({title:e}))).getOr({})}):m.none()})(e()):((e,t)=>h.call(e,t))(["anchor","link"],r)>-1?o(e(),r):"text"===r||"title"===r?(n[r]=e()[r],m.none()):m.none()}}};var he=tinymce.util.Tools.resolve("tinymce.util.Delay");const fe=e=>{const t=e.href;return t.indexOf("@")>0&&-1===t.indexOf("/")&&-1===t.indexOf("mailto:")?m.some({message:"The URL you entered seems to be an email address. Do you want to add the required mailto: prefix?",preprocess:e=>({...e,href:"mailto:"+t})}):m.none()},pe=(e,t)=>n=>{const o=n.href;return 1===e&&!W(o)||0===e&&/^\s*www(\.|\d\.)/i.test(o)?m.some({message:`The URL you entered seems to be an external link. Do you want to add the required ${t}:// prefix?`,preprocess:e=>({...e,href:t+"://"+o})}):m.none()},ke=e=>{const t=e.dom.select("a:not([href])"),n=p(((e,t)=>{const n=e.length,o=new Array(n);for(let r=0;r{const t=e.name||e.id;return t?[{text:t,value:"#"+t}]:[]})));return n.length>0?m.some([{text:"None",value:""}].concat(n)):m.none()},ve=e=>{const t=E(e);return t.length>0?I(t):m.none()},ye=e=>{try{return m.some(JSON.parse(e))}catch(e){return m.none()}},xe=(e,t)=>{const n=S(e);if(n.length>0){const o=v(t,"_blank"),r=e=>X(U(e),o);return(!1===R(e)?j(r):I)(n)}return m.none()},be=[{text:"Current window",value:""},{text:"New window",value:"_blank"}],_e=e=>{const t=A(e);return l(t)?I(t).orThunk((()=>m.some(be))):!1===t?m.none():m.some(be)},we=(e,t,n)=>{const o=e.getAttrib(t,n);return null!==o&&o.length>0?m.some(o):m.none()},Ce=(e,t)=>(e=>{const t=t=>e.convertURL(t.value||t.url||"","href"),n=C(e);return new Promise((e=>{o(n)?fetch(n).then((e=>e.ok?e.text().then(ye):Promise.reject())).then(e,(()=>e(m.none()))):c(n)?n((t=>e(m.some(t)))):e(m.from(n))})).then((e=>e.bind(j(t)).map((e=>e.length>0?[{text:"None",value:""}].concat(e):e))))})(e).then((n=>{const o=((e,t)=>{const n=e.dom,o=re(e)?m.some(ee(e.selection,t)):m.none(),r=t.bind((e=>m.from(n.getAttrib(e,"href")))),l=t.bind((e=>m.from(n.getAttrib(e,"target")))),a=t.bind((e=>we(n,e,"rel"))),i=t.bind((e=>we(n,e,"class")));return{url:r,text:o,title:t.bind((e=>we(n,e,"title"))),target:l,rel:a,linkClass:i}})(e,t);return{anchor:o,catalogs:{targets:_e(e),rels:xe(e,o.target),classes:ve(e),anchor:ke(e),link:n},optNode:t,flags:{titleEnabled:T(e)}}})),Oe=e=>{const t=(e=>{const t=Y(e);return Ce(e,t)})(e);t.then((t=>{const n=((e,t)=>n=>{const o=n.getData();if(!o.url.value)return ce(e),void n.close();const r=e=>m.from(o[e]).filter((n=>!v(t.anchor[e],n))),l={href:o.url.value,text:r("text"),target:r("target"),rel:r("rel"),class:r("linkClass"),title:r("title")},a={href:o.url.value,attach:void 0!==o.url.meta&&o.url.meta.attach?o.url.meta.attach:g};((e,t)=>k([fe,pe(_(e),N(e))],(e=>e(t))).fold((()=>Promise.resolve(t)),(n=>new Promise((o=>{((e,t,n)=>{const o=e.selection.getRng();he.setEditorTimeout(e,(()=>{e.windowManager.confirm(t,(t=>{e.selection.setRng(o),n(t)}))}))})(e,n.message,(e=>{o(e?n.preprocess(t):t)}))})))))(e,l).then((t=>{se(e,a,t)})),n.close()})(e,t);return((e,t,n)=>{const o=e.anchor.text.map((()=>({name:"text",type:"input",label:"Text to display"}))).toArray(),r=e.flags.titleEnabled?[{name:"title",type:"input",label:"Title"}]:[],l=((e,t)=>{const n=e.anchor,o=n.url.getOr("");return{url:{value:o,meta:{original:{value:o}}},text:n.text.getOr(""),title:n.title.getOr(""),anchor:o,link:o,rel:n.rel.getOr(""),target:n.target.or(t).getOr(""),linkClass:n.linkClass.getOr("")}})(e,m.from(O(n))),a=e.catalogs,i=me(l,a);return{title:"Insert/Edit Link",size:"normal",body:{type:"panel",items:p([[{name:"url",type:"urlinput",filetype:"file",label:"URL"}],o,r,y([a.anchor.map(K("anchor","Anchors")),a.rels.map(K("rel","Rel")),a.targets.map(K("target","Open link in...")),a.link.map(K("link","Link list")),a.classes.map(K("linkClass","Class"))])])},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],initialData:l,onChange:(e,{name:t})=>{i.onChange(e.getData,{name:t}).each((t=>{e.setData(t)}))},onSubmit:t}})(t,n,e)})).then((t=>{e.windowManager.open(t)}))};var Ne=tinymce.util.Tools.resolve("tinymce.util.VK");const Ae=(e,t)=>e.dom.getParent(t,"a[href]"),Se=e=>Ae(e,e.selection.getStart()),Ee=(e,t)=>{if(t){const n=Q(t);if(/^#/.test(n)){const t=e.dom.select(n);t.length&&e.selection.scrollIntoView(t[0],!0)}else(e=>{const t=document.createElement("a");t.target="_blank",t.href=e,t.rel="noreferrer noopener";const n=document.createEvent("MouseEvents");n.initMouseEvent("click",!0,!0,window,0,0,0,0,0,!1,!1,!1,!1,0,null),((e,t)=>{document.body.appendChild(e),e.dispatchEvent(t),document.body.removeChild(e)})(t,n)})(t.href)}},Te=e=>()=>{e.execCommand("mceLink",!1,{dialog:!0})},Re=e=>()=>{Ee(e,Se(e))},Pe=(e,t)=>(e.on("NodeChange",t),()=>e.off("NodeChange",t)),Le=e=>t=>{const n=()=>{t.setActive(!e.mode.isReadOnly()&&Z(e,e.selection.getNode())),t.setEnabled(e.selection.isEditable())};return n(),Pe(e,n)},Me=e=>t=>{const n=()=>{t.setEnabled(e.selection.isEditable())};return n(),Pe(e,n)},De=e=>t=>{const n=()=>t.setEnabled((e=>1===(e.selection.isCollapsed()?ne(e.dom.getParents(e.selection.getStart())):te(e.selection.getRng())).length)(e));return n(),Pe(e,n)},Be=e=>t=>{const n=e.dom.getParents(e.selection.getStart()),o=n=>{t.setEnabled((t=>{return oe(t)||(n=e.selection.getRng(),te(n).length>0);var n})(n)&&e.selection.isEditable())};return o(n),Pe(e,(e=>o(e.parents)))};e.add("link",(e=>{(e=>{const t=e.options.register;t("link_assume_external_targets",{processor:e=>{const t=o(e)||i(e);return t?!0===e?{value:1,valid:t}:"http"===e||"https"===e?{value:e,valid:t}:{value:0,valid:t}:{valid:!1,message:"Must be a string or a boolean."}},default:!1}),t("link_context_toolbar",{processor:"boolean",default:!1}),t("link_list",{processor:e=>o(e)||c(e)||u(e,r)}),t("link_default_target",{processor:"string"}),t("link_default_protocol",{processor:"string",default:"https"}),t("link_target_list",{processor:e=>i(e)||u(e,r),default:!0}),t("link_rel_list",{processor:"object[]",default:[]}),t("link_class_list",{processor:"object[]",default:[]}),t("link_title",{processor:"boolean",default:!0}),t("allow_unsafe_link_target",{processor:"boolean",default:!1}),t("link_quicklink",{processor:"boolean",default:!1})})(e),(e=>{e.ui.registry.addToggleButton("link",{icon:"link",tooltip:"Insert/edit link",onAction:Te(e),onSetup:Le(e)}),e.ui.registry.addButton("openlink",{icon:"new-tab",tooltip:"Open link",onAction:Re(e),onSetup:De(e)}),e.ui.registry.addButton("unlink",{icon:"unlink",tooltip:"Remove link",onAction:()=>ce(e),onSetup:Be(e)})})(e),(e=>{e.ui.registry.addMenuItem("openlink",{text:"Open link",icon:"new-tab",onAction:Re(e),onSetup:De(e)}),e.ui.registry.addMenuItem("link",{icon:"link",text:"Link...",shortcut:"Meta+K",onSetup:Me(e),onAction:Te(e)}),e.ui.registry.addMenuItem("unlink",{icon:"unlink",text:"Remove link",onAction:()=>ce(e),onSetup:Be(e)})})(e),(e=>{e.ui.registry.addContextMenu("link",{update:t=>e.dom.isEditable(t)?oe(e.dom.getParents(t,"a"))?"link unlink openlink":"link":""})})(e),(e=>{const t=t=>{const n=e.selection.getNode();return t.setEnabled(Z(e,n)),g};e.ui.registry.addContextForm("quicklink",{launch:{type:"contextformtogglebutton",icon:"link",tooltip:"Link",onSetup:Le(e)},label:"Link",predicate:t=>w(e)&&Z(e,t),initValue:()=>Y(e).fold((()=>""),Q),commands:[{type:"contextformtogglebutton",icon:"link",tooltip:"Link",primary:!0,onSetup:t=>{const n=e.selection.getNode();return t.setActive(Z(e,n)),Le(e)(t)},onAction:t=>{const n=t.getValue(),o=(t=>{const n=Y(e),o=re(e);if(n.isNone()&&o){const o=ee(e.selection,n);return x(0===o.length,t)}return m.none()})(n);se(e,{href:n,attach:g},{href:n,text:o,title:m.none(),rel:m.none(),target:m.none(),class:m.none()}),(e=>{e.selection.collapse(!1)})(e),t.hide()}},{type:"contextformbutton",icon:"unlink",tooltip:"Remove link",onSetup:t,onAction:t=>{ce(e),t.hide()}},{type:"contextformbutton",icon:"new-tab",tooltip:"Open link",onSetup:t,onAction:t=>{Re(e)(),t.hide()}}]})})(e),(e=>{e.on("click",(t=>{const n=Ae(e,t.target);n&&Ne.metaKeyPressed(t)&&(t.preventDefault(),Ee(e,n))})),e.on("keydown",(t=>{if(!t.isDefaultPrevented()&&13===t.keyCode&&(e=>!0===e.altKey&&!1===e.shiftKey&&!1===e.ctrlKey&&!1===e.metaKey)(t)){const n=Se(e);n&&(t.preventDefault(),Ee(e,n))}}))})(e),(e=>{e.addCommand("mceLink",((t,n)=>{!0!==(null==n?void 0:n.dialog)&&P(e)?e.dispatch("contexttoolbar-show",{toolbarKey:"quicklink"}):Oe(e)}))})(e),(e=>{e.addShortcut("Meta+K","",(()=>{e.execCommand("mceLink")}))})(e)}))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/lists/plugin.min.js b/src/assets/tinyMCE/plugins/lists/plugin.min.js deleted file mode 100644 index 2dc22048d..000000000 --- a/src/assets/tinyMCE/plugins/lists/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(n=r=e,(o=String).prototype.isPrototypeOf(n)||(null===(s=r.constructor)||void 0===s?void 0:s.name)===o.name)?"string":t;var n,r,o,s})(t)===e,n=e=>t=>typeof t===e,r=t("string"),o=t("object"),s=t("array"),i=n("boolean"),l=e=>!(e=>null==e)(e),a=n("function"),d=n("number"),c=()=>{},u=(e,t)=>e===t,m=e=>t=>!e(t),p=(!1,()=>false);class g{constructor(e,t){this.tag=e,this.value=t}static some(e){return new g(!0,e)}static none(){return g.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?g.some(e(this.value)):g.none()}bind(e){return this.tag?e(this.value):g.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:g.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return l(e)?g.some(e):g.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}g.singletonNone=new g(!1);const h=Array.prototype.slice,f=Array.prototype.indexOf,y=Array.prototype.push,v=(e,t)=>{return n=e,r=t,f.call(n,r)>-1;var n,r},b=(e,t)=>{for(let n=0,r=e.length;n{const n=e.length,r=new Array(n);for(let o=0;o{for(let n=0,r=e.length;n{const n=[];for(let r=0,o=e.length;r(S(e,((e,r)=>{n=t(n,e,r)})),n),O=(e,t,n)=>{for(let r=0,o=e.length;rO(e,t,p),T=(e,t)=>(e=>{const t=[];for(let n=0,r=e.length;n{const t=h.call(e,0);return t.reverse(),t},x=(e,t)=>t>=0&&tx(e,0),w=e=>x(e,e.length-1),D=(e,t)=>{const n=[],r=a(t)?e=>b(n,(n=>t(n,e))):e=>v(n,e);for(let t=0,o=e.length;te.exists((e=>n(e,t))),I=(e,t,n)=>e.isSome()&&t.isSome()?g.some(n(e.getOrDie(),t.getOrDie())):g.none(),P=e=>{if(null==e)throw new Error("Node cannot be null or undefined");return{dom:e}},M=(e,t)=>{const n=(t||document).createElement(e);return P(n)},R=P,U=(e,t)=>e.dom===t.dom;"undefined"!=typeof window?window:Function("return this;")();const $=e=>e.dom.nodeName.toLowerCase(),_=(1,e=>1===(e=>e.dom.nodeType)(e));const F=e=>t=>_(t)&&$(t)===e,H=e=>g.from(e.dom.parentNode).map(R),V=e=>C(e.dom.childNodes,R),j=(e,t)=>{const n=e.dom.childNodes;return g.from(n[t]).map(R)},K=e=>j(e,0),z=e=>j(e,e.dom.childNodes.length-1),Q=(e,t,n)=>{let r=e.dom;const o=a(n)?n:p;for(;r.parentNode;){r=r.parentNode;const e=R(r);if(t(e))return g.some(e);if(o(e))break}return g.none()},q=(e,t,n)=>((e,t,n,r,o)=>r(n)?g.some(n):a(o)&&o(n)?g.none():t(n,r,o))(0,Q,e,t,n),W=(e,t)=>{H(e).each((n=>{n.dom.insertBefore(t.dom,e.dom)}))},Z=(e,t)=>{e.dom.appendChild(t.dom)},G=(e,t)=>{S(t,(t=>{Z(e,t)}))},J=e=>{e.dom.textContent="",S(V(e),(e=>{X(e)}))},X=e=>{const t=e.dom;null!==t.parentNode&&t.parentNode.removeChild(t)};var Y=tinymce.util.Tools.resolve("tinymce.dom.RangeUtils"),ee=tinymce.util.Tools.resolve("tinymce.dom.TreeWalker"),te=tinymce.util.Tools.resolve("tinymce.util.VK");const ne=e=>C(e,R),re=Object.keys,oe=(e,t)=>{const n=re(e);for(let r=0,o=n.length;r{const n=e.dom;oe(t,((e,t)=>{((e,t,n)=>{if(!(r(n)||i(n)||d(n)))throw console.error("Invalid call to Attribute.set. Key ",t,":: Value ",n,":: Element ",e),new Error("Attribute value was not simple");e.setAttribute(t,n+"")})(n,t,e)}))},ie=e=>L(e.dom.attributes,((e,t)=>(e[t.name]=t.value,e)),{}),le=e=>((e,t)=>R(e.dom.cloneNode(!0)))(e),ae=(e,t)=>{const n=((e,t)=>{const n=M(t),r=ie(e);return se(n,r),n})(e,t);var r,o;o=n,(e=>g.from(e.dom.nextSibling).map(R))(r=e).fold((()=>{H(r).each((e=>{Z(e,o)}))}),(e=>{W(e,o)}));const s=V(e);return G(n,s),X(e),n};var de=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),ce=tinymce.util.Tools.resolve("tinymce.util.Tools");const ue=e=>t=>l(t)&&t.nodeName.toLowerCase()===e,me=e=>t=>l(t)&&e.test(t.nodeName),pe=e=>l(e)&&3===e.nodeType,ge=e=>l(e)&&1===e.nodeType,he=me(/^(OL|UL|DL)$/),fe=me(/^(OL|UL)$/),ye=ue("ol"),ve=me(/^(LI|DT|DD)$/),be=me(/^(DT|DD)$/),Ce=me(/^(TH|TD)$/),Se=ue("br"),Ne=(e,t)=>l(t)&&t.nodeName in e.schema.getTextBlockElements(),Le=(e,t)=>l(e)&&e.nodeName in t,Oe=(e,t)=>l(t)&&t.nodeName in e.schema.getVoidElements(),ke=(e,t,n)=>{const r=e.isEmpty(t);return!(n&&e.select("span[data-mce-type=bookmark]",t).length>0)&&r},Te=(e,t)=>e.isChildOf(t,e.getRoot()),Ae=e=>t=>t.options.get(e),xe=Ae("lists_indent_on_tab"),Ee=Ae("forced_root_block"),we=Ae("forced_root_block_attrs"),De=(e,t)=>{const n=e.dom,r=e.schema.getBlockElements(),o=n.createFragment(),s=Ee(e),i=we(e);let l,a,d=!1;for(a=n.create(s,i),Le(t.firstChild,r)||o.appendChild(a);l=t.firstChild;){const e=l.nodeName;d||"SPAN"===e&&"bookmark"===l.getAttribute("data-mce-type")||(d=!0),Le(l,r)?(o.appendChild(l),a=null):(a||(a=n.create(s,i),o.appendChild(a)),a.appendChild(l))}return!d&&a&&a.appendChild(n.create("br",{"data-mce-bogus":"1"})),o},Be=de.DOM,Ie=F("dd"),Pe=F("dt"),Me=(e,t)=>{var n;Ie(t)?ae(t,"dt"):Pe(t)&&(n=t,g.from(n.dom.parentElement).map(R)).each((n=>((e,t,n)=>{const r=Be.select('span[data-mce-type="bookmark"]',t),o=De(e,n),s=Be.createRng();s.setStartAfter(n),s.setEndAfter(t);const i=s.extractContents();for(let t=i.firstChild;t;t=t.firstChild)if("LI"===t.nodeName&&e.dom.isEmpty(t)){Be.remove(t);break}e.dom.isEmpty(i)||Be.insertAfter(i,t),Be.insertAfter(o,t);const l=n.parentElement;l&&ke(e.dom,l)&&(e=>{const t=e.parentNode;t&&ce.each(r,(e=>{t.insertBefore(e,n.parentNode)})),Be.remove(e)})(l),Be.remove(n),ke(e.dom,t)&&Be.remove(t)})(e,n.dom,t.dom)))},Re=e=>{Pe(e)&&ae(e,"dd")},Ue=(e,t)=>{if(pe(e))return{container:e,offset:t};const n=Y.getNode(e,t);return pe(n)?{container:n,offset:t>=e.childNodes.length?n.data.length:0}:n.previousSibling&&pe(n.previousSibling)?{container:n.previousSibling,offset:n.previousSibling.data.length}:n.nextSibling&&pe(n.nextSibling)?{container:n.nextSibling,offset:0}:{container:e,offset:t}},$e=e=>{const t=e.cloneRange(),n=Ue(e.startContainer,e.startOffset);t.setStart(n.container,n.offset);const r=Ue(e.endContainer,e.endOffset);return t.setEnd(r.container,r.offset),t},_e=["OL","UL","DL"],Fe=_e.join(","),He=(e,t)=>{const n=t||e.selection.getStart(!0);return e.dom.getParent(n,Fe,Ke(e,n))},Ve=e=>{const t=e.selection.getSelectedBlocks();return N(((e,t)=>{const n=ce.map(t,(t=>e.dom.getParent(t,"li,dd,dt",Ke(e,t))||t));return D(n)})(e,t),ve)},je=(e,t)=>{const n=e.dom.getParents(t,"TD,TH");return n.length>0?n[0]:e.getBody()},Ke=(e,t)=>{const n=e.dom.getParents(t,e.dom.isBlock),r=k(n,(t=>{return n=e.schema,!he(r=t)&&!ve(r)&&b(_e,(e=>n.isValidChild(r.nodeName,e)));var n,r}));return r.getOr(e.getBody())},ze=(e,t)=>{const n=e.dom.getParents(t,"ol,ul",Ke(e,t));return w(n)},Qe=(e,t)=>{const n=C(t,(t=>ze(e,t).getOr(t)));return D(n)},qe=e=>/\btox\-/.test(e.className),We=(e,t)=>O(e,he,Ce).exists((e=>e.nodeName===t&&!qe(e))),Ze=(e,t)=>null!==t&&!e.dom.isEditable(t),Ge=(e,t)=>{const n=e.dom.getParent(t,"ol,ul,dl");return Ze(e,n)},Je=(e,t)=>{const n=e.selection.getNode();return t({parents:e.dom.getParents(n),element:n}),e.on("NodeChange",t),()=>e.off("NodeChange",t)},Xe=(e,t,n)=>e.dispatch("ListMutation",{action:t,element:n}),Ye=(et=/^\s+|\s+$/g,e=>e.replace(et,""));var et;const tt=(e,t,n)=>{((e,t,n)=>{if(!r(n))throw console.error("Invalid call to CSS.set. Property ",t,":: Value ",n,":: Element ",e),new Error("CSS value must be a string: "+n);(e=>void 0!==e.style&&a(e.style.getPropertyValue))(e)&&e.style.setProperty(t,n)})(e.dom,t,n)},nt=(e,t)=>{Z(e.item,t.list)},rt=(e,t)=>{const n={list:M(t,e),item:M("li",e)};return Z(n.list,n.item),n},ot=e=>((e,t)=>{const n=e.dom;if(1!==n.nodeType)return!1;{const e=n;if(void 0!==e.matches)return e.matches(t);if(void 0!==e.msMatchesSelector)return e.msMatchesSelector(t);if(void 0!==e.webkitMatchesSelector)return e.webkitMatchesSelector(t);if(void 0!==e.mozMatchesSelector)return e.mozMatchesSelector(t);throw new Error("Browser lacks native selectors")}})(e,"OL,UL"),st=e=>K(e).exists(ot),it=e=>e.depth>0,lt=e=>e.isSelected,at=e=>{const t=V(e),n=z(e).exists(ot)?t.slice(0,-1):t;return C(n,le)},dt=e=>(S(e,((t,n)=>{((e,t)=>{const n=e[t].depth,r=e=>e.depth===n&&!e.dirty,o=e=>e.depthO(e.slice(t+1),r,o)))})(e,n).fold((()=>{t.dirty&&(e=>{e.listAttributes=((e,t)=>{const n={};var r;return((e,t,n,r)=>{oe(e,((e,o)=>{(t(e,o)?n:r)(e,o)}))})(e,t,(r=n,(e,t)=>{r[t]=e}),c),n})(e.listAttributes,((e,t)=>"start"!==t))})(t)}),(e=>{return r=e,(n=t).listType=r.listType,void(n.listAttributes={...r.listAttributes});var n,r}))})),e),ct=(e,t,n,r)=>K(r).filter(ot).fold((()=>{t.each((e=>{U(e.start,r)&&n.set(!0)}));const o=((e,t,n)=>H(e).filter(_).map((r=>({depth:t,dirty:!1,isSelected:n,content:at(e),itemAttributes:ie(e),listAttributes:ie(r),listType:$(r)}))))(r,e,n.get());t.each((e=>{U(e.end,r)&&n.set(!1)}));const s=z(r).filter(ot).map((r=>ut(e,t,n,r))).getOr([]);return o.toArray().concat(s)}),(r=>ut(e,t,n,r))),ut=(e,t,n,r)=>T(V(r),(r=>(ot(r)?ut:ct)(e+1,t,n,r))),mt=(e,t)=>{const n=dt(t);return((e,t)=>{const n=L(t,((t,n)=>n.depth>t.length?((e,t,n)=>{const r=((e,t,n)=>{const r=[];for(let o=0;o{for(let t=1;t{for(let t=0;t{se(e.list,t.listAttributes),se(e.item,t.itemAttributes),G(e.item,t.content)}))})(r,n),o=r,I(w(t),E(o),nt),t.concat(r)})(e,t,n):((e,t,n)=>{const r=t.slice(0,n.depth);return w(r).each((t=>{const r=((e,t,n)=>{const r=M("li",e);return se(r,t),G(r,n),r})(e,n.itemAttributes,n.content);((e,t)=>{Z(e.list,t),e.item=t})(t,r),((e,t)=>{$(e.list)!==t.listType&&(e.list=ae(e.list,t.listType)),se(e.list,t.listAttributes)})(t,n)})),r})(e,t,n)),[]);return E(n).map((e=>e.list))})(e.contentDocument,n).toArray()},pt=(e,t,n)=>{const r=((e,t)=>{const n=(e=>{let t=!1;return{get:()=>t,set:e=>{t=e}}})();return C(e,(e=>({sourceList:e,entries:ut(0,t,n,e)})))})(t,(e=>{const t=C(Ve(e),R);return I(k(t,m(st)),k(A(t),m(st)),((e,t)=>({start:e,end:t})))})(e));S(r,(t=>{((e,t)=>{S(N(e,lt),(e=>((e,t)=>{switch(e){case"Indent":t.depth++;break;case"Outdent":t.depth--;break;case"Flatten":t.depth=0}t.dirty=!0})(t,e)))})(t.entries,n);const r=((e,t)=>T(((e,t)=>{if(0===e.length)return[];{let n=t(e[0]);const r=[];let o=[];for(let s=0,i=e.length;sE(t).exists(it)?mt(e,t):((e,t)=>{const n=dt(t);return C(n,(t=>{const n=((e,t)=>{const n=document.createDocumentFragment();return S(e,(e=>{n.appendChild(e.dom)})),R(n)})(t.content);return R(De(e,n.dom))}))})(e,t))))(e,t.entries);var o;S(r,(t=>{Xe(e,"Indent"===n?"IndentList":"OutdentList",t.dom)})),o=t.sourceList,S(r,(e=>{W(o,e)})),X(t.sourceList)}))},gt=(e,t)=>{const n=ne((e=>{const t=(e=>{const t=ze(e,e.selection.getStart()),n=N(e.selection.getSelectedBlocks(),fe);return t.toArray().concat(n)})(e);return Qe(e,t)})(e)),r=ne((e=>N(Ve(e),be))(e));let o=!1;if(n.length||r.length){const s=e.selection.getBookmark();pt(e,n,t),((e,t,n)=>{S(n,"Indent"===t?Re:t=>Me(e,t))})(e,t,r),e.selection.moveToBookmark(s),e.selection.setRng($e(e.selection.getRng())),e.nodeChanged(),o=!0}return o},ht=(e,t)=>!(e=>{const t=He(e);return Ze(e,t)})(e)&>(e,t),ft=e=>ht(e,"Indent"),yt=e=>ht(e,"Outdent"),vt=e=>ht(e,"Flatten"),bt=e=>"\ufeff"===e;var Ct=tinymce.util.Tools.resolve("tinymce.dom.BookmarkManager");const St=de.DOM,Nt=e=>{const t={},n=n=>{let r=e[n?"startContainer":"endContainer"],o=e[n?"startOffset":"endOffset"];if(ge(r)){const e=St.create("span",{"data-mce-type":"bookmark"});r.hasChildNodes()?(o=Math.min(o,r.childNodes.length-1),n?r.insertBefore(e,r.childNodes[o]):St.insertAfter(e,r.childNodes[o])):r.appendChild(e),r=e,o=0}t[n?"startContainer":"endContainer"]=r,t[n?"startOffset":"endOffset"]=o};return n(!0),e.collapsed||n(),t},Lt=e=>{const t=t=>{let n=e[t?"startContainer":"endContainer"],r=e[t?"startOffset":"endOffset"];if(n){if(ge(n)&&n.parentNode){const e=n;r=(e=>{var t;let n=null===(t=e.parentNode)||void 0===t?void 0:t.firstChild,r=0;for(;n;){if(n===e)return r;ge(n)&&"bookmark"===n.getAttribute("data-mce-type")||r++,n=n.nextSibling}return-1})(n),n=n.parentNode,St.remove(e),!n.hasChildNodes()&&St.isBlock(n)&&n.appendChild(St.create("br"))}e[t?"startContainer":"endContainer"]=n,e[t?"startOffset":"endOffset"]=r}};t(!0),t();const n=St.createRng();return n.setStart(e.startContainer,e.startOffset),e.endContainer&&n.setEnd(e.endContainer,e.endOffset),$e(n)},Ot=e=>{switch(e){case"UL":return"ToggleUlList";case"OL":return"ToggleOlList";case"DL":return"ToggleDLList"}},kt=(e,t)=>{ce.each(t,((t,n)=>{e.setAttribute(n,t)}))},Tt=(e,t,n)=>{((e,t,n)=>{const r=n["list-style-type"]?n["list-style-type"]:null;e.setStyle(t,"list-style-type",r)})(e,t,n),((e,t,n)=>{kt(t,n["list-attributes"]),ce.each(e.select("li",t),(e=>{kt(e,n["list-item-attributes"])}))})(e,t,n)},At=(e,t)=>l(t)&&!Le(t,e.schema.getBlockElements()),xt=(e,t,n,r)=>{let o=t[n?"startContainer":"endContainer"];const s=t[n?"startOffset":"endOffset"];ge(o)&&(o=o.childNodes[Math.min(s,o.childNodes.length-1)]||o),!n&&Se(o.nextSibling)&&(o=o.nextSibling);const i=(t,n)=>{var o;const s=new ee(t,r),i=n?"next":"prev";let l;for(;l=s[i]();)if(!Oe(e,l)&&!bt(l.textContent)&&0!==(null===(o=l.textContent)||void 0===o?void 0:o.length))return g.some(l);return g.none()};if(n&&pe(o))if(bt(o.textContent))o=i(o,!1).getOr(o);else for(null!==o.parentNode&&At(e,o.parentNode)&&(o=o.parentNode);null!==o.previousSibling&&(At(e,o.previousSibling)||pe(o.previousSibling));)o=o.previousSibling;if(!n&&pe(o))if(bt(o.textContent))o=i(o,!0).getOr(o);else for(null!==o.parentNode&&At(e,o.parentNode)&&(o=o.parentNode);null!==o.nextSibling&&(At(e,o.nextSibling)||pe(o.nextSibling));)o=o.nextSibling;for(;o.parentNode!==r;){const t=o.parentNode;if(Ne(e,o))return o;if(/^(TD|TH)$/.test(t.nodeName))return o;o=t}return o},Et=(e,t,n)=>{const r=e.selection.getRng();let o="LI";const s=Ke(e,e.selection.getStart(!0)),i=e.dom;if("false"===i.getContentEditable(e.selection.getNode()))return;"DL"===(t=t.toUpperCase())&&(o="DT");const l=Nt(r),a=N(((e,t,n)=>{const r=[],o=e.dom,s=xt(e,t,!0,n),i=xt(e,t,!1,n);let l;const a=[];for(let e=s;e&&(a.push(e),e!==i);e=e.nextSibling);return ce.each(a,(t=>{var s;if(Ne(e,t))return r.push(t),void(l=null);if(o.isBlock(t)||Se(t))return Se(t)&&o.remove(t),void(l=null);const i=t.nextSibling;Ct.isBookmarkNode(t)&&(he(i)||Ne(e,i)||!i&&t.parentNode===n)?l=null:(l||(l=o.create("p"),null===(s=t.parentNode)||void 0===s||s.insertBefore(l,t),r.push(l)),l.appendChild(t))})),r})(e,r,s),e.dom.isEditable);ce.each(a,(r=>{let s;const l=r.previousSibling,a=r.parentNode;ve(a)||(l&&he(l)&&l.nodeName===t&&((e,t,n)=>{const r=e.getStyle(t,"list-style-type");let o=n?n["list-style-type"]:"";return o=null===o?"":o,r===o})(i,l,n)?(s=l,r=i.rename(r,o),l.appendChild(r)):(s=i.create(t),a.insertBefore(s,r),s.appendChild(r),r=i.rename(r,o)),((e,t,n)=>{ce.each(["margin","margin-right","margin-bottom","margin-left","margin-top","padding","padding-right","padding-bottom","padding-left","padding-top"],(n=>e.setStyle(t,n,"")))})(i,r),Tt(i,s,n),Dt(e.dom,s))})),e.selection.setRng(Lt(l))},wt=(e,t,n)=>{return((e,t)=>he(e)&&e.nodeName===(null==t?void 0:t.nodeName))(t,n)&&((e,t,n)=>e.getStyle(t,"list-style-type",!0)===e.getStyle(n,"list-style-type",!0))(e,t,n)&&(r=n,t.className===r.className);var r},Dt=(e,t)=>{let n,r=t.nextSibling;if(wt(e,t,r)){const o=r;for(;n=o.firstChild;)t.appendChild(n);e.remove(o)}if(r=t.previousSibling,wt(e,t,r)){const o=r;for(;n=o.lastChild;)t.insertBefore(n,t.firstChild);e.remove(o)}},Bt=e=>"list-style-type"in e,It=(e,t,n)=>{const r=He(e);if(Ge(e,r)||!e.hasEditableRoot())return;const s=(e=>{const t=He(e),n=e.selection.getSelectedBlocks();return((e,t)=>l(e)&&1===t.length&&t[0]===e)(t,n)?(e=>N(e.querySelectorAll(Fe),he))(t):N(n,(e=>he(e)&&t!==e))})(e),i=o(n)?n:{};s.length>0?((e,t,n,r,o)=>{const s=he(t);if(s&&t.nodeName===r&&!Bt(o))vt(e);else{Et(e,r,o);const i=Nt(e.selection.getRng()),l=s?[t,...n]:n;ce.each(l,(t=>{((e,t,n,r)=>{if(t.nodeName!==n){const o=e.dom.rename(t,n);Tt(e.dom,o,r),Xe(e,Ot(n),o)}else Tt(e.dom,t,r),Xe(e,Ot(n),t)})(e,t,r,o)})),e.selection.setRng(Lt(i))}})(e,r,s,t,i):((e,t,n,r)=>{if(t!==e.getBody())if(t)if(t.nodeName!==n||Bt(r)||qe(t)){const o=Nt(e.selection.getRng());Tt(e.dom,t,r);const s=e.dom.rename(t,n);Dt(e.dom,s),e.selection.setRng(Lt(o)),Et(e,n,r),Xe(e,Ot(n),s)}else vt(e);else Et(e,n,r),Xe(e,Ot(n),t)})(e,r,t,i)},Pt=de.DOM,Mt=(e,t)=>{const n=ce.grep(e.select("ol,ul",t));ce.each(n,(t=>{((e,t)=>{const n=t.parentElement;if(n&&"LI"===n.nodeName&&n.firstChild===t){const r=n.previousSibling;r&&"LI"===r.nodeName?(r.appendChild(t),ke(e,n)&&Pt.remove(n)):Pt.setStyle(n,"listStyleType","none")}if(he(n)){const e=n.previousSibling;e&&"LI"===e.nodeName&&e.appendChild(t)}})(e,t)}))},Rt=(e,t,n,r)=>{let o=t.startContainer;const s=t.startOffset;if(pe(o)&&(n?s0))return o;const i=e.schema.getNonEmptyElements();ge(o)&&(o=Y.getNode(o,s));const l=new ee(o,r);n&&((e,t)=>!!Se(t)&&e.isBlock(t.nextSibling)&&!Se(t.previousSibling))(e.dom,o)&&l.next();const a=n?l.next.bind(l):l.prev2.bind(l);for(;o=a();){if("LI"===o.nodeName&&!o.hasChildNodes())return o;if(i[o.nodeName])return o;if(pe(o)&&o.data.length>0)return o}return null},Ut=(e,t)=>{const n=t.childNodes;return 1===n.length&&!he(n[0])&&e.isBlock(n[0])},$t=(e,t,n)=>{let r;const o=t.parentNode;if(!Te(e,t)||!Te(e,n))return;he(n.lastChild)&&(r=n.lastChild),o===n.lastChild&&Se(o.previousSibling)&&e.remove(o.previousSibling);const s=n.lastChild;s&&Se(s)&&t.hasChildNodes()&&e.remove(s),ke(e,n,!0)&&J(R(n)),((e,t,n)=>{let r;const o=Ut(e,n)?n.firstChild:n;if(((e,t)=>{Ut(e,t)&&e.remove(t.firstChild,!0)})(e,t),!ke(e,t,!0))for(;r=t.firstChild;)o.appendChild(r)})(e,t,n),r&&n.appendChild(r);const i=((e,t)=>{const n=e.dom,r=t.dom;return n!==r&&n.contains(r)})(R(n),R(t))?e.getParents(t,he,n):[];e.remove(t),S(i,(t=>{ke(e,t)&&t!==e.getRoot()&&e.remove(t)}))},_t=(e,t)=>{const n=e.dom,r=e.selection,o=r.getStart(),s=je(e,o),i=n.getParent(r.getStart(),"LI",s);if(i){const o=i.parentElement;if(o===e.getBody()&&ke(n,o))return!0;const l=$e(r.getRng()),a=n.getParent(Rt(e,l,t,s),"LI",s);if(a&&a!==i)return e.undoManager.transact((()=>{var n,r;t?((e,t,n,r)=>{const o=e.dom;if(o.isEmpty(r))((e,t,n)=>{J(R(n)),$t(e.dom,t,n),e.selection.setCursorLocation(n,0)})(e,n,r);else{const s=Nt(t);$t(o,n,r),e.selection.setRng(Lt(s))}})(e,l,a,i):(null===(r=(n=i).parentNode)||void 0===r?void 0:r.firstChild)===n?yt(e):((e,t,n,r)=>{const o=Nt(t);$t(e.dom,n,r);const s=Lt(o);e.selection.setRng(s)})(e,l,i,a)})),!0;if(!a&&!t&&0===l.startOffset&&0===l.endOffset)return e.undoManager.transact((()=>{vt(e)})),!0}return!1},Ft=e=>{const t=e.selection.getStart(),n=je(e,t);return e.dom.getParent(t,"LI,DT,DD",n)||Ve(e).length>0},Ht=(e,t)=>{const n=e.selection;return!Ge(e,n.getNode())&&(n.isCollapsed()?((e,t)=>_t(e,t)||((e,t)=>{const n=e.dom,r=e.selection.getStart(),o=je(e,r),s=n.getParent(r,n.isBlock,o);if(s&&n.isEmpty(s)){const r=$e(e.selection.getRng()),i=n.getParent(Rt(e,r,t,o),"LI",o);if(i){const l=e=>v(["td","th","caption"],$(e)),a=e=>e.dom===o;return!!((e,t,n=u)=>I(e,t,n).getOr(e.isNone()&&t.isNone()))(q(R(i),l,a),q(R(r.startContainer),l,a),U)&&(e.undoManager.transact((()=>{((e,t,n)=>{const r=e.getParent(t.parentNode,e.isBlock,n);e.remove(t),r&&e.isEmpty(r)&&e.remove(r)})(n,s,o),Dt(n,i.parentNode),e.selection.select(i,!0),e.selection.collapse(t)})),!0)}}return!1})(e,t))(e,t):(e=>!!Ft(e)&&(e.undoManager.transact((()=>{e.execCommand("Delete"),Mt(e.dom,e.getBody())})),!0))(e))},Vt=e=>{const t=A(Ye(e).split("")),n=C(t,((e,t)=>{const n=e.toUpperCase().charCodeAt(0)-"A".charCodeAt(0)+1;return Math.pow(26,t)*n}));return L(n,((e,t)=>e+t),0)},jt=e=>{if(--e<0)return"";{const t=e%26,n=Math.floor(e/26);return jt(n)+String.fromCharCode("A".charCodeAt(0)+t)}},Kt=e=>{const t=parseInt(e.start,10);return B(e.listStyleType,"upper-alpha")?jt(t):B(e.listStyleType,"lower-alpha")?jt(t).toLowerCase():e.start},zt=(e,t)=>()=>{const n=He(e);return l(n)&&n.nodeName===t},Qt=e=>{e.addCommand("mceListProps",(()=>{(e=>{const t=He(e);ye(t)&&!Ge(e,t)&&e.windowManager.open({title:"List Properties",body:{type:"panel",items:[{type:"input",name:"start",label:"Start list at number",inputMode:"numeric"}]},initialData:{start:Kt({start:e.dom.getAttrib(t,"start","1"),listStyleType:g.from(e.dom.getStyle(t,"list-style-type"))})},buttons:[{type:"cancel",name:"cancel",text:"Cancel"},{type:"submit",name:"save",text:"Save",primary:!0}],onSubmit:t=>{(e=>{switch((e=>/^[0-9]+$/.test(e)?2:/^[A-Z]+$/.test(e)?0:/^[a-z]+$/.test(e)?1:e.length>0?4:3)(e)){case 2:return g.some({listStyleType:g.none(),start:e});case 0:return g.some({listStyleType:g.some("upper-alpha"),start:Vt(e).toString()});case 1:return g.some({listStyleType:g.some("lower-alpha"),start:Vt(e).toString()});case 3:return g.some({listStyleType:g.none(),start:""});case 4:return g.none()}})(t.getData().start).each((t=>{e.execCommand("mceListUpdate",!1,{attrs:{start:"1"===t.start?"":t.start},styles:{"list-style-type":t.listStyleType.getOr("")}})})),t.close()}})})(e)}))};var qt=tinymce.util.Tools.resolve("tinymce.html.Node");const Wt=e=>3===e.type,Zt=e=>0===e.length,Gt=e=>{const t=(t,n)=>{const r=qt.create("li");S(t,(e=>r.append(e))),n?e.insert(r,n,!0):e.append(r)},n=L(e.children(),((e,n)=>Wt(n)?[...e,n]:Zt(e)||Wt(n)?e:(t(e,n),[])),[]);Zt(n)||t(n)},Jt=(e,t)=>n=>(n.setEnabled(e.selection.isEditable()),Je(e,(r=>{n.setActive(We(r.parents,t)),n.setEnabled(!Ge(e,r.element)&&e.selection.isEditable())}))),Xt=(e,t)=>n=>Je(e,(r=>n.setEnabled(We(r.parents,t)&&!Ge(e,r.element))));e.add("lists",(e=>((e=>{(0,e.options.register)("lists_indent_on_tab",{processor:"boolean",default:!0})})(e),(e=>{e.on("PreInit",(()=>{const{parser:t}=e;t.addNodeFilter("ul,ol",(e=>S(e,Gt)))}))})(e),e.hasPlugin("rtc",!0)?Qt(e):((e=>{xe(e)&&(e=>{e.on("keydown",(t=>{t.keyCode!==te.TAB||te.metaKeyPressed(t)||e.undoManager.transact((()=>{(t.shiftKey?yt(e):ft(e))&&t.preventDefault()}))}))})(e),(e=>{e.on("ExecCommand",(t=>{const n=t.command.toLowerCase();"delete"!==n&&"forwarddelete"!==n||!Ft(e)||Mt(e.dom,e.getBody())})),e.on("keydown",(t=>{t.keyCode===te.BACKSPACE?Ht(e,!1)&&t.preventDefault():t.keyCode===te.DELETE&&Ht(e,!0)&&t.preventDefault()}))})(e)})(e),(e=>{e.on("BeforeExecCommand",(t=>{const n=t.command.toLowerCase();"indent"===n?ft(e):"outdent"===n&&yt(e)})),e.addCommand("InsertUnorderedList",((t,n)=>{It(e,"UL",n)})),e.addCommand("InsertOrderedList",((t,n)=>{It(e,"OL",n)})),e.addCommand("InsertDefinitionList",((t,n)=>{It(e,"DL",n)})),e.addCommand("RemoveList",(()=>{vt(e)})),Qt(e),e.addCommand("mceListUpdate",((t,n)=>{o(n)&&((e,t)=>{const n=He(e);null===n||Ge(e,n)||e.undoManager.transact((()=>{o(t.styles)&&e.dom.setStyles(n,t.styles),o(t.attrs)&&oe(t.attrs,((t,r)=>e.dom.setAttrib(n,r,t)))}))})(e,n)})),e.addQueryStateHandler("InsertUnorderedList",zt(e,"UL")),e.addQueryStateHandler("InsertOrderedList",zt(e,"OL")),e.addQueryStateHandler("InsertDefinitionList",zt(e,"DL"))})(e)),(e=>{const t=t=>()=>e.execCommand(t);e.hasPlugin("advlist")||(e.ui.registry.addToggleButton("numlist",{icon:"ordered-list",active:!1,tooltip:"Numbered list",onAction:t("InsertOrderedList"),onSetup:Jt(e,"OL")}),e.ui.registry.addToggleButton("bullist",{icon:"unordered-list",active:!1,tooltip:"Bullet list",onAction:t("InsertUnorderedList"),onSetup:Jt(e,"UL")}))})(e),(e=>{const t={text:"List properties...",icon:"ordered-list",onAction:()=>e.execCommand("mceListProps"),onSetup:Xt(e,"OL")};e.ui.registry.addMenuItem("listprops",t),e.ui.registry.addContextMenu("lists",{update:t=>{const n=He(e,t);return ye(n)?["listprops"]:[]}})})(e),(e=>({backspaceDelete:t=>{Ht(e,t)}}))(e))))}(); \ No newline at end of file diff --git a/src/assets/tinyMCE/plugins/media/plugin.min.js b/src/assets/tinyMCE/plugins/media/plugin.min.js deleted file mode 100644 index 7229267d3..000000000 --- a/src/assets/tinyMCE/plugins/media/plugin.min.js +++ /dev/null @@ -1,4 +0,0 @@ -/** - * TinyMCE version 6.5.1 (2023-06-19) - */ -!function(){"use strict";var e=tinymce.util.Tools.resolve("tinymce.PluginManager");const t=e=>t=>(e=>{const t=typeof e;return null===e?"null":"object"===t&&Array.isArray(e)?"array":"object"===t&&(r=o=e,(a=String).prototype.isPrototypeOf(r)||(null===(s=o.constructor)||void 0===s?void 0:s.name)===a.name)?"string":t;var r,o,a,s})(t)===e,r=t("string"),o=t("object"),a=t("array"),s=e=>!(e=>null==e)(e);class i{constructor(e,t){this.tag=e,this.value=t}static some(e){return new i(!0,e)}static none(){return i.singletonNone}fold(e,t){return this.tag?t(this.value):e()}isSome(){return this.tag}isNone(){return!this.tag}map(e){return this.tag?i.some(e(this.value)):i.none()}bind(e){return this.tag?e(this.value):i.none()}exists(e){return this.tag&&e(this.value)}forall(e){return!this.tag||e(this.value)}filter(e){return!this.tag||e(this.value)?this:i.none()}getOr(e){return this.tag?this.value:e}or(e){return this.tag?this:e}getOrThunk(e){return this.tag?this.value:e()}orThunk(e){return this.tag?this:e()}getOrDie(e){if(this.tag)return this.value;throw new Error(null!=e?e:"Called getOrDie on None")}static from(e){return s(e)?i.some(e):i.none()}getOrNull(){return this.tag?this.value:null}getOrUndefined(){return this.value}each(e){this.tag&&e(this.value)}toArray(){return this.tag?[this.value]:[]}toString(){return this.tag?`some(${this.value})`:"none()"}}i.singletonNone=new i(!1);const n=Array.prototype.push,c=(e,t)=>{for(let r=0,o=e.length;r{const t=[];for(let r=0,o=e.length;rh(e,t)?i.from(e[t]):i.none(),h=(e,t)=>u.call(e,t),p=e=>t=>t.options.get(e),g=p("audio_template_callback"),b=p("video_template_callback"),w=p("iframe_template_callback"),v=p("media_live_embeds"),y=p("media_filter_html"),f=p("media_url_resolver"),x=p("media_alt_source"),_=p("media_poster"),j=p("media_dimensions");var k=tinymce.util.Tools.resolve("tinymce.util.Tools"),O=tinymce.util.Tools.resolve("tinymce.dom.DOMUtils"),A=tinymce.util.Tools.resolve("tinymce.html.DomParser");const S=O.DOM,$=e=>e.replace(/px$/,""),C=e=>{const t=e.attr("style"),r=t?S.parseStyle(t):{};return{type:"ephox-embed-iri",source:e.attr("data-ephox-embed-iri"),altsource:"",poster:"",width:d(r,"max-width").map($).getOr(""),height:d(r,"max-height").map($).getOr("")}},D=(e,t)=>{let r={};for(let o=A({validate:!1,forced_root_block:!1},t).parse(e);o;o=o.walk())if(1===o.type){const e=o.name;if(o.attr("data-ephox-embed-iri")){r=C(o);break}r.source||"param"!==e||(r.source=o.attr("movie")),"iframe"!==e&&"object"!==e&&"embed"!==e&&"video"!==e&&"audio"!==e||(r.type||(r.type=e),r=k.extend(o.attributes.map,r)),"script"===e&&(r={type:"script",source:o.attr("src")}),"source"===e&&(r.source?r.altsource||(r.altsource=o.attr("src")):r.source=o.attr("src")),"img"!==e||r.poster||(r.poster=o.attr("src"))}return r.source=r.source||r.src||"",r.altsource=r.altsource||"",r.poster=r.poster||"",r},T=e=>{var t;const r=null!==(t=e.toLowerCase().split(".").pop())&&void 0!==t?t:"";return d({mp3:"audio/mpeg",m4a:"audio/x-m4a",wav:"audio/wav",mp4:"video/mp4",webm:"video/webm",ogg:"video/ogg",swf:"application/x-shockwave-flash"},r).getOr("")};var z=tinymce.util.Tools.resolve("tinymce.html.Node"),F=tinymce.util.Tools.resolve("tinymce.html.Serializer");const M=(e,t={})=>A({forced_root_block:!1,validate:!1,allow_conditional_comments:!0,...t},e),N=O.DOM,R=e=>/^[0-9.]+$/.test(e)?e+"px":e,E=(e,t)=>{const r=t.attr("style"),o=r?N.parseStyle(r):{};s(e.width)&&(o["max-width"]=R(e.width)),s(e.height)&&(o["max-height"]=R(e.height)),t.attr("style",N.serializeStyle(o))},U=["source","altsource"],P=(e,t,r,o)=>{let a=0,s=0;const i=M(o);i.addNodeFilter("source",(e=>a=e.length));const n=i.parse(e);for(let e=n;e;e=e.walk())if(1===e.type){const o=e.name;if(e.attr("data-ephox-embed-iri")){E(t,e);break}switch(o){case"video":case"object":case"embed":case"img":case"iframe":void 0!==t.height&&void 0!==t.width&&(e.attr("width",t.width),e.attr("height",t.height))}if(r)switch(o){case"video":e.attr("poster",t.poster),e.attr("src",null);for(let r=a;r<2;r++)if(t[U[r]]){const o=new z("source",1);o.attr("src",t[U[r]]),o.attr("type",t[U[r]+"mime"]||null),e.append(o)}break;case"iframe":e.attr("src",t.source);break;case"object":const r=e.getAll("img").length>0;if(t.poster&&!r){e.attr("src",t.poster);const r=new z("img",1);r.attr("src",t.poster),r.attr("width",t.width),r.attr("height",t.height),e.append(r)}break;case"source":if(s<2&&(e.attr("src",t[U[s]]),e.attr("type",t[U[s]+"mime"]||null),!t[U[s]])){e.remove();continue}s++;break;case"img":t.poster||e.remove()}}return F({},o).serialize(n)},L=[{regex:/youtu\.be\/([\w\-_\?&=.]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/youtube\.com(.+)v=([^&]+)(&([a-z0-9&=\-_]+))?/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$2?$4",allowFullscreen:!0},{regex:/youtube.com\/embed\/([a-z0-9\?&=\-_]+)/i,type:"iframe",w:560,h:314,url:"www.youtube.com/embed/$1",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)\?h=(\w+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?h=$2&title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)\?h=(\w+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?h=$3&title=0&byline=0",allowFullscreen:!0},{regex:/vimeo\.com\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$1?title=0&byline=0&portrait=0&color=8dc7dc",allowFullscreen:!0},{regex:/vimeo\.com\/(.*)\/([0-9]+)/,type:"iframe",w:425,h:350,url:"player.vimeo.com/video/$2?title=0&byline=0",allowFullscreen:!0},{regex:/maps\.google\.([a-z]{2,3})\/maps\/(.+)msid=(.+)/,type:"iframe",w:425,h:350,url:'maps.google.com/maps/ms?msid=$2&output=embed"',allowFullscreen:!1},{regex:/dailymotion\.com\/video\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0},{regex:/dai\.ly\/([^_]+)/,type:"iframe",w:480,h:270,url:"www.dailymotion.com/embed/video/$1",allowFullscreen:!0}],I=(e,t)=>{const r=(e=>{const t=e.match(/^(https?:\/\/|www\.)(.+)$/i);return t&&t.length>1?"www."===t[1]?"https://":t[1]:"https://"})(t),o=e.regex.exec(t);let a=r+e.url;if(s(o))for(let e=0;eo[e]?o[e]:""));return a.replace(/\?$/,"")},B=e=>{const t=L.filter((t=>t.regex.test(e)));return t.length>0?k.extend({},t[0],{url:I(t[0],e)}):null},G=(e,t)=>{var r;const o=k.extend({},t);if(!o.source&&(k.extend(o,D(null!==(r=o.embed)&&void 0!==r?r:"",e.schema)),!o.source))return"";o.altsource||(o.altsource=""),o.poster||(o.poster=""),o.source=e.convertURL(o.source,"source"),o.altsource=e.convertURL(o.altsource,"source"),o.sourcemime=T(o.source),o.altsourcemime=T(o.altsource),o.poster=e.convertURL(o.poster,"poster");const a=B(o.source);if(a&&(o.source=a.url,o.type=a.type,o.allowfullscreen=a.allowFullscreen,o.width=o.width||String(a.w),o.height=o.height||String(a.h)),o.embed)return P(o.embed,o,!0,e.schema);{const t=g(e),r=b(e),a=w(e);return o.width=o.width||"300",o.height=o.height||"150",k.each(o,((t,r)=>{o[r]=e.dom.encode(""+t)})),"iframe"===o.type?((e,t)=>{if(t)return t(e);{const t=e.allowfullscreen?' allowFullscreen="1"':"";return'"}})(o,a):"application/x-shockwave-flash"===o.sourcemime?(e=>{let t='';return e.poster&&(t+=''),t+="",t})(o):-1!==o.sourcemime.indexOf("audio")?((e,t)=>t?t(e):'")(o,t):"script"===o.type?(e=>' + + + +``` + +Yes, it's that simple. Read [the docs](https://dexie.org/docs/) to get into the details. + +#### Hello World (for modern browsers) + +All modern browsers support ES modules and top-level awaits. No transipler needed. Here's the previous example in a modern flavour: + +```html + + + + + + +``` + +#### Hello World (React + Typescript) + +Real-world apps are often built using components in various frameworks. Here's a version of Hello World written for React and Typescript. There are also links below this sample to more tutorials for different frameworks... + +```tsx +import React from 'react'; +import { Dexie, type EntityTable } from 'dexie'; +import { useLiveQuery } from 'dexie-react-hooks'; + +// Typing for your entities (hint is to move this to its own module) +export interface Friend { + id: number; + name: string; + age: number; +} + +// Database declaration (move this to its own module also) +export const db = new Dexie('FriendDatabase') as Dexie & { + friends: EntityTable; +}; +db.version(1).stores({ + friends: '++id, age', +}); + +// Component: +export function MyDexieReactComponent() { + const youngFriends = useLiveQuery(() => + db.friends + .where('age') + .below(30) + .toArray() + ); + + return ( + <> +

    My young friends

    +
      + {youngFriends?.map((f) => ( +
    • + Name: {f.name}, Age: {f.age} +
    • + ))} +
    + + + ); +} +``` + +[Tutorials for React, Svelte, Vue, Angular and vanilla JS](https://dexie.org/docs/Tutorial/Getting-started) + +[API Reference](https://dexie.org/docs/API-Reference) + +[Samples](https://dexie.org/docs/Samples) + +### Performance + +Dexie has kick-ass performance. Its [bulk methods]() take advantage of a lesser-known feature in IndexedDB that makes it possible to store stuff without listening to every onsuccess event. This speeds up the performance to a maximum. + +#### Supported operations + +```js +above(key): Collection; +aboveOrEqual(key): Collection; +add(item, key?): Promise; +and(filter: (x) => boolean): Collection; +anyOf(keys[]): Collection; +anyOfIgnoreCase(keys: string[]): Collection; +below(key): Collection; +belowOrEqual(key): Collection; +between(lower, upper, includeLower?, includeUpper?): Collection; +bulkAdd(items: Array): Promise; +bulkDelete(keys: Array): Promise; +bulkPut(items: Array): Promise; +clear(): Promise; +count(): Promise; +delete(key): Promise; +distinct(): Collection; +each(callback: (obj) => any): Promise; +eachKey(callback: (key) => any): Promise; +eachPrimaryKey(callback: (key) => any): Promise; +eachUniqueKey(callback: (key) => any): Promise; +equals(key): Collection; +equalsIgnoreCase(key): Collection; +filter(fn: (obj) => boolean): Collection; +first(): Promise; +get(key): Promise; +inAnyRange(ranges): Collection; +keys(): Promise; +last(): Promise; +limit(n: number): Collection; +modify(changeCallback: (obj: T, ctx:{value: T}) => void): Promise; +modify(changes: { [keyPath: string]: any } ): Promise; +noneOf(keys: Array): Collection; +notEqual(key): Collection; +offset(n: number): Collection; +or(indexOrPrimayKey: string): WhereClause; +orderBy(index: string): Collection; +primaryKeys(): Promise; +put(item: T, key?: Key): Promise; +reverse(): Collection; +sortBy(keyPath: string): Promise; +startsWith(key: string): Collection; +startsWithAnyOf(prefixes: string[]): Collection; +startsWithAnyOfIgnoreCase(prefixes: string[]): Collection; +startsWithIgnoreCase(key: string): Collection; +toArray(): Promise; +toCollection(): Collection; +uniqueKeys(): Promise; +until(filter: (value) => boolean, includeStopEntry?: boolean): Collection; +update(key: Key, changes: { [keyPath: string]: any }): Promise; +``` + +This is a mix of methods from [WhereClause](https://dexie.org/docs/WhereClause/WhereClause), [Table](https://dexie.org/docs/Table/Table) and [Collection](https://dexie.org/docs/Collection/Collection). Dive into the [API reference](https://dexie.org/docs/API-Reference) to see the details. + +## Dexie Cloud + +[Dexie Cloud](https://dexie.org/cloud/) is a commercial offering that can be used as an add-on to Dexie.js. It syncs a Dexie database with a server and enables developers to build apps without having to care about backend or database layer else than the frontend code with Dexie.js as the sole database layer. + +Source for a sample Dexie Cloud app: [Dexie Cloud To-do app](https://github.com/dexie/Dexie.js/tree/master/samples/dexie-cloud-todo-app) + +See the sample Dexie Cloud app in action: https://dexie.github.io/Dexie.js/dexie-cloud-todo-app/ + +## Samples + +https://dexie.org/docs/Samples + +https://github.com/dexie/Dexie.js/tree/master/samples + +## Knowledge Base + +[https://dexie.org/docs/Questions-and-Answers](https://dexie.org/docs/Questions-and-Answers) + +## Website + +[https://dexie.org](https://dexie.org) + +## Install via npm + +``` +npm install dexie +``` + +## Download + +For those who don't like package managers, here's the download links: + +### UMD (for legacy script includes as well as commonjs require): + +https://unpkg.com/dexie@latest/dist/dexie.min.js + +https://unpkg.com/dexie@latest/dist/dexie.min.js.map + +### Modern (ES module): + +https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs + +https://unpkg.com/dexie@latest/dist/modern/dexie.min.mjs.map + +### Typings: + +https://unpkg.com/dexie@latest/dist/dexie.d.ts + +# Contributing + +See [CONTRIBUTING.md](CONTRIBUTING.md) + +## Build + +``` +pnpm install +pnpm run build +``` + +## Test + +``` +pnpm test +``` + +## Watch + +``` +pnpm run watch +``` + +
    + +[![Browser testing via LAMDBATEST](https://dexie.org/assets/images/lambdatest2.png)](https://www.lambdatest.com/) + +[npm-image]: https://img.shields.io/npm/v/dexie.svg?style=flat +[npm-url]: https://npmjs.org/package/dexie diff --git a/src/dexie/SECURITY.md b/src/dexie/SECURITY.md new file mode 100644 index 000000000..d3c09d562 --- /dev/null +++ b/src/dexie/SECURITY.md @@ -0,0 +1,26 @@ +# Security Policy + +## Supported Versions + +| Version | Supported | Branch +| ------- | ------------------ | -------- +| 4.x | :white_check_mark: | master +| 3.x | :white_check_mark: | master-3 +| 2.0.x | :x: | master-2 +| 1.5.x | :x: | master-1 +| < 1.5.1 | :x: | + +## Reporting a Vulnerability + +To report a security vulnerability in Dexie.js, please send an email to code@dexie.org describing the vulnerability and how to reproduce it. + +If we find an issue to be regarded as a security vulnerability, we will patch and release a new version in all the supported versions as soon as possible. +Keep in mind though that this is an uncommercial open source project which means that sometimes you might have to be the one that +*fixes* the issue and not just report it. + +## Fixing a Vulnerability + +Fix the issue in the corresponding branch for the major version according to the table above where it applies and +create pull requests. Make sure that you have the words "security" or "vulnerability" in the title of the Pull Request +in order to get the correct attention for it to be merged and released as soon as possible. + diff --git a/src/dexie/dist/dexie.d.ts b/src/dexie/dist/dexie.d.ts new file mode 100644 index 000000000..130ee26a6 --- /dev/null +++ b/src/dexie/dist/dexie.d.ts @@ -0,0 +1,1174 @@ +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * By David Fahlander, david.fahlander@gmail.com + * + * Version 4.0.7, Sun May 26 2024 + * + * https://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ + */ + // Generated by dts-bundle-generator v5.9.0 + +export interface IndexSpec { + name: string; + keyPath: string | Array | undefined; + unique: boolean | undefined; + multi: boolean | undefined; + auto: boolean | undefined; + compound: boolean | undefined; + src: string; +} +export interface TableSchema { + name: string; + primKey: IndexSpec; + indexes: IndexSpec[]; + mappedClass: Function; + idxByName: { + [name: string]: IndexSpec; + }; + readHook?: (x: any) => any; +} +export type IndexableTypePart = string | number | Date | ArrayBuffer | ArrayBufferView | DataView | Array>; +export type IndexableTypeArray = Array; +export type IndexableTypeArrayReadonly = ReadonlyArray; +export type IndexableType = IndexableTypePart | IndexableTypeArrayReadonly; +export interface DexieEvent { + subscribers: Function[]; + fire(...args: any[]): any; + subscribe(fn: (...args: any[]) => any): void; + unsubscribe(fn: (...args: any[]) => any): void; +} +export interface DexieEventSet { + (eventName: string): DexieEvent; // To be able to unsubscribe. + addEventType(eventName: string, chainFunction?: (f1: Function, f2: Function) => Function, defaultFunction?: Function): DexieEvent; + addEventType(events: { + [eventName: string]: ("asap" | [ + (f1: Function, f2: Function) => Function, + Function + ]); + }): DexieEvent; +} +export interface TransactionEvents extends DexieEventSet { + (eventName: "complete", subscriber: () => any): void; + (eventName: "abort", subscriber: () => any): void; + (eventName: "error", subscriber: (error: any) => any): void; + complete: DexieEvent; + abort: DexieEvent; + error: DexieEvent; +} +export interface Transaction { + db: Dexie; + active: boolean; + mode: IDBTransactionMode; + idbtrans: IDBTransaction; + //tables: { [type: string]: Table }; Deprecated since 2.0. Obsolete from v3.0. + storeNames: Array; + explicit?: boolean; + parent?: Transaction; + on: TransactionEvents; + abort(): void; + table(tableName: string): Table; + table(tableName: string): Table; + table(tableName: string): Table; + table(tableName: string): Table; +} +export interface CreatingHookContext { + onsuccess?: (primKey: Key) => void; + onerror?: (err: any) => void; +} +export interface UpdatingHookContext { + onsuccess?: (updatedObj: T) => void; + onerror?: (err: any) => void; +} +export interface DeletingHookContext { + onsuccess?: () => void; + onerror?: (err: any) => void; +} +export interface TableHooks extends DexieEventSet { + (eventName: "creating", subscriber: (this: CreatingHookContext, primKey: TKey, obj: T, transaction: Transaction) => void | undefined | TKey): void; + (eventName: "reading", subscriber: (obj: T) => T | any): void; + (eventName: "updating", subscriber: (this: UpdatingHookContext, modifications: Object, primKey: TKey, obj: T, transaction: Transaction) => any): void; + (eventName: "deleting", subscriber: (this: DeletingHookContext, primKey: TKey, obj: T, transaction: Transaction) => any): void; + creating: DexieEvent; + reading: DexieEvent; + updating: DexieEvent; + deleting: DexieEvent; +} +export type ThenShortcut = (value: T) => TResult | PromiseLike; +export interface WhereClause { + above(key: any): Collection; + aboveOrEqual(key: any): Collection; + anyOf(keys: ReadonlyArray): Collection; + anyOf(...keys: Array): Collection; + anyOfIgnoreCase(keys: string[]): Collection; + anyOfIgnoreCase(...keys: string[]): Collection; + below(key: any): Collection; + belowOrEqual(key: any): Collection; + between(lower: any, upper: any, includeLower?: boolean, includeUpper?: boolean): Collection; + equals(key: IndexableType): Collection; + equalsIgnoreCase(key: string): Collection; + inAnyRange(ranges: ReadonlyArray<{ + 0: any; + 1: any; + }>, options?: { + includeLowers?: boolean; + includeUppers?: boolean; + }): Collection; + startsWith(key: string): Collection; + startsWithAnyOf(prefixes: string[]): Collection; + startsWithAnyOf(...prefixes: string[]): Collection; + startsWithIgnoreCase(key: string): Collection; + startsWithAnyOfIgnoreCase(prefixes: string[]): Collection; + startsWithAnyOfIgnoreCase(...prefixes: string[]): Collection; + noneOf(keys: ReadonlyArray): Collection; + notEqual(key: IndexableType): Collection; +} +export interface PromiseExtendedConstructor extends PromiseConstructor { + readonly prototype: PromiseExtended; + new (executor: (resolve: (value?: T | PromiseLike) => void, reject: (reason?: any) => void) => void): PromiseExtended; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike, + T9 | PromiseLike, + T10 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9, + T10 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike, + T9 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8, + T9 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6, + T7, + T8 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6, + T7 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5, + T6 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4, + T5 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3, + T4 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike + ]): PromiseExtended<[ + T1, + T2, + T3 + ]>; + all(values: [ + T1 | PromiseLike, + T2 | PromiseLike + ]): PromiseExtended<[ + T1, + T2 + ]>; + all(values: (T | PromiseLike)[]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike, + T9 | PromiseLike, + T10 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike, + T9 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike, + T8 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike, + T7 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike, + T6 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike, + T5 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike, + T4 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike, + T3 | PromiseLike + ]): PromiseExtended; + race(values: [ + T1 | PromiseLike, + T2 | PromiseLike + ]): PromiseExtended; + race(values: (T | PromiseLike)[]): PromiseExtended; + reject(reason: any): PromiseExtended; + reject(reason: any): PromiseExtended; + resolve(value: T | PromiseLike): PromiseExtended; + resolve(): PromiseExtended; +} +/** The interface of Dexie.Promise, which basically extends standard Promise with methods: + * + * finally() - also subject for standardization + * timeout() - set a completion timeout + * catch(ErrorClass, handler) - java style error catching + * catch(errorName, handler) - cross-domain safe type error catching (checking error.name instead of instanceof) + * + */ +export interface PromiseExtended extends Promise { + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): PromiseExtended; + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): PromiseExtended; + catch(ErrorConstructor: Function, onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): PromiseExtended; + catch(errorName: string, onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): PromiseExtended; + finally(onFinally?: () => U | PromiseLike): PromiseExtended; + timeout(ms: number, msg?: string): PromiseExtended; +} +export type KeyPaths = { + [P in keyof T]: P extends string ? T[P] extends Array ? K extends object // only drill into the array element if it's an object + ? P | `${P}.${number}` | `${P}.${number}.${KeyPaths}` : P | `${P}.${number}` : T[P] extends (...args: any[]) => any // Method + ? never : T[P] extends object ? P | `${P}.${KeyPaths}` : P : never; +}[keyof T]; +export type KeyPathValue = PATH extends `${infer R}.${infer S}` ? R extends keyof T ? KeyPathValue : T extends any[] ? PATH extends `${number}.${infer S}` ? KeyPathValue : void : void : PATH extends `${number}` ? T extends any[] ? T[number] : void : PATH extends keyof T ? T[PATH] : void; +export declare const PropModSymbol: unique symbol; +export type PropModSpec = { + replacePrefix?: [ + string, + string + ]; + add?: number | BigInt | Array; + remove?: number | BigInt | Array; +}; +export class PropModification implements PropModSpec { + [PropModSymbol]?: true; + replacePrefix?: [ + string, + string + ]; + add?: number | BigInt | Array; + remove?: number | BigInt | Array; + execute(value: T): T; + constructor(spec: PropModSpec); +} +export type UpdateSpec = { + [KP in KeyPaths]?: KeyPathValue | PropModification; +}; +export interface Collection { + db: Dexie; + and(filter: (x: T) => boolean): Collection; + clone(props?: Object): Collection; + count(): PromiseExtended; + count(thenShortcut: ThenShortcut): PromiseExtended; + distinct(): Collection; + each(callback: (obj: T, cursor: { + key: IndexableType; + primaryKey: TKey; + }) => any): PromiseExtended; + eachKey(callback: (key: IndexableType, cursor: { + key: IndexableType; + primaryKey: TKey; + }) => any): PromiseExtended; + eachPrimaryKey(callback: (key: TKey, cursor: { + key: IndexableType; + primaryKey: TKey; + }) => any): PromiseExtended; + eachUniqueKey(callback: (key: IndexableType, cursor: { + key: IndexableType; + primaryKey: TKey; + }) => any): PromiseExtended; + filter(filter: (x: T) => x is S): Collection; + filter(filter: (x: T) => boolean): Collection; + first(): PromiseExtended; + first(thenShortcut: ThenShortcut): PromiseExtended; + keys(): PromiseExtended; + keys(thenShortcut: ThenShortcut): PromiseExtended; + primaryKeys(): PromiseExtended; + primaryKeys(thenShortcut: ThenShortcut): PromiseExtended; + last(): PromiseExtended; + last(thenShortcut: ThenShortcut): PromiseExtended; + limit(n: number): Collection; + offset(n: number): Collection; + or(indexOrPrimayKey: string): WhereClause; + raw(): Collection; + reverse(): Collection; + sortBy(keyPath: string): PromiseExtended; + sortBy(keyPath: string, thenShortcut: ThenShortcut): PromiseExtended; + toArray(): PromiseExtended>; + toArray(thenShortcut: ThenShortcut): PromiseExtended; + uniqueKeys(): PromiseExtended; + uniqueKeys(thenShortcut: ThenShortcut): PromiseExtended; + until(filter: (value: T) => boolean, includeStopEntry?: boolean): Collection; + // Mutating methods + delete(): PromiseExtended; + modify(changeCallback: (obj: T, ctx: { + value: TInsertType; + }) => void | boolean): PromiseExtended; + modify(changes: UpdateSpec): PromiseExtended; +} +export type IntervalTree = IntervalTreeNode | EmptyRange; +export interface IntervalTreeNode { + from: IndexableType; // lower bound + to: IndexableType; // upper bound + l: IntervalTreeNode | null; // left + r: IntervalTreeNode | null; // right + d: number; // depth +} +export interface EmptyRange { + d: 0; +} +export interface DexieOnReadyEvent { + subscribe(fn: (vipDb: Dexie) => any, bSticky: boolean): void; + unsubscribe(fn: (vipDb: Dexie) => any): void; + fire(vipDb: Dexie): any; +} +export interface DexieVersionChangeEvent { + subscribe(fn: (event: IDBVersionChangeEvent) => any): void; + unsubscribe(fn: (event: IDBVersionChangeEvent) => any): void; + fire(event: IDBVersionChangeEvent): any; +} +export interface DexiePopulateEvent { + subscribe(fn: (trans: Transaction) => any): void; + unsubscribe(fn: (trans: Transaction) => any): void; + fire(trans: Transaction): any; +} +export interface DexieCloseEvent { + subscribe(fn: (event: Event) => any): void; + unsubscribe(fn: (event: Event) => any): void; + fire(event: Event): any; +} +export interface DbEvents extends DexieEventSet { + (eventName: "ready", subscriber: (vipDb: Dexie) => any, bSticky?: boolean): void; + (eventName: "populate", subscriber: (trans: Transaction) => any): void; + (eventName: "blocked", subscriber: (event: IDBVersionChangeEvent) => any): void; + (eventName: "versionchange", subscriber: (event: IDBVersionChangeEvent) => any): void; + (eventName: "close", subscriber: (event: Event) => any): void; + ready: DexieOnReadyEvent; + populate: DexiePopulateEvent; + blocked: DexieEvent; + versionchange: DexieVersionChangeEvent; + close: DexieCloseEvent; +} +/** Set of mutated parts of the database + */ +export type ObservabilitySet = { + /** Database part having been mutated. + * + * This structure is produced in observability-middleware.ts + * and consumed in live-query.ts. + * + * Format of 'part': + * + * `idb://${dbName}/${tableName}/${indexName}` + * + * * dbName is the database name + * * tableName is the table name + * * indexName is any of: + * 1. An empty string - represents the primary keys of the affected objs + * 2. ":dels" - represents primary keys of deleted objects in the table + * 3. The keyPath of an index, such as "name", "age" or "address.city" - + * represents indexes that, if used in a query, might affect the + * result of that query. + * + * IntervalTree + * * See definition of IntervalTree type in rangeset.d.ts + * * See rangesOverlap() in rangeset.ts that can be used to compare two + * IntervalTrees and detect collissions. + * * See RangeSet class that can be used to create an IntervalTree and add + * ranges to it. + */ + [part: string]: IntervalTree; +}; +export interface DexieOnStorageMutatedEvent { + subscribe(fn: (parts: ObservabilitySet) => any): void; + unsubscribe(fn: (parts: ObservabilitySet) => any): void; + fire(parts: ObservabilitySet): any; +} +export interface GlobalDexieEvents extends DexieEventSet { + (eventName: "storagemutated", subscriber: (parts: ObservabilitySet) => any): void; + storagemutated: DexieOnStorageMutatedEvent; +} +export const enum DBCoreRangeType { + Equal = 1, + Range = 2, + Any = 3, + Never = 4 +} +export interface DBCoreKeyRange { + readonly type: DBCoreRangeType; + readonly lower: any; + readonly lowerOpen?: boolean; + readonly upper: any; + readonly upperOpen?: boolean; +} +export interface DBCoreTransaction { + abort(): void; +} +export interface DbCoreTransactionOptions { + durability: ChromeTransactionDurability; +} +export type DBCoreMutateRequest = DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest | DBCoreDeleteRangeRequest; +export interface DBCoreMutateResponse { + numFailures: number; + failures: { + [operationNumber: number]: Error; + }; + lastResult: any; + results?: any[]; // Present on AddRequest and PutRequest. +} +export interface DBCoreAddRequest { + type: "add"; + trans: DBCoreTransaction; + values: readonly any[]; + keys?: any[]; + mutatedParts?: ObservabilitySet; + /** @deprecated Will always get results since 3.1.0-alpha.5 */ + wantResults?: boolean; +} +export interface DBCorePutRequest { + type: "put"; + trans: DBCoreTransaction; + values: readonly any[]; + keys?: any[]; + mutatedParts?: ObservabilitySet; + criteria?: { + index: string | null; + range: DBCoreKeyRange; + }; + changeSpec?: { + [keyPath: string]: any; + }; // Common changeSpec for each key + isAdditionalChunk?: boolean; + updates?: { + keys: any[]; + changeSpecs: { + [keyPath: string]: any; + }[]; // changeSpec per key. + }; + /** @deprecated Will always get results since 3.1.0-alpha.5 */ + wantResults?: boolean; +} +export interface DBCoreDeleteRequest { + type: "delete"; + trans: DBCoreTransaction; + keys: any[]; + mutatedParts?: ObservabilitySet; + criteria?: { + index: string | null; + range: DBCoreKeyRange; + }; + isAdditionalChunk?: boolean; +} +export interface DBCoreDeleteRangeRequest { + type: "deleteRange"; + trans: DBCoreTransaction; + range: DBCoreKeyRange; + mutatedParts?: ObservabilitySet; +} +export interface DBCoreGetManyRequest { + trans: DBCoreTransaction; + keys: any[]; + cache?: "immutable" | "clone"; + obsSet?: ObservabilitySet; +} +export interface DBCoreGetRequest { + trans: DBCoreTransaction; + key: any; + obsSet?: ObservabilitySet; +} +export interface DBCoreQuery { + index: DBCoreIndex; //keyPath: null | string | string[]; // null represents primary key. string a property, string[] several properties. + range: DBCoreKeyRange; +} +export interface DBCoreQueryRequest { + trans: DBCoreTransaction; + values?: boolean; + limit?: number; + query: DBCoreQuery; + obsSet?: ObservabilitySet; +} +export interface DBCoreQueryResponse { + result: any[]; +} +export interface DBCoreOpenCursorRequest { + trans: DBCoreTransaction; + values?: boolean; + unique?: boolean; + reverse?: boolean; + query: DBCoreQuery; + obsSet?: ObservabilitySet; +} +export interface DBCoreCountRequest { + trans: DBCoreTransaction; + query: DBCoreQuery; + obsSet?: ObservabilitySet; +} +export interface DBCoreCursor { + readonly trans: DBCoreTransaction; + readonly key: any; + readonly primaryKey: any; + readonly value?: any; + readonly done?: boolean; + continue(key?: any): void; + continuePrimaryKey(key: any, primaryKey: any): void; + advance(count: number): void; + start(onNext: () => void): Promise; + stop(value?: any | Promise): void; + next(): Promise; + fail(error: Error): void; +} +export interface DBCoreSchema { + name: string; + tables: DBCoreTableSchema[]; +} +export interface DBCoreTableSchema { + readonly name: string; + readonly primaryKey: DBCoreIndex; + readonly indexes: DBCoreIndex[]; + readonly getIndexByKeyPath: (keyPath: null | string | string[]) => DBCoreIndex | undefined; +} +export interface DBCoreIndex { + /** Name of the index, or null for primary key */ + readonly name: string | null; + /** True if this index represents the primary key */ + readonly isPrimaryKey?: boolean; + /** True if this index represents the primary key and is not inbound (https://dexie.org/docs/inbound) */ + readonly outbound?: boolean; + /** True if and only if keyPath is an array (https://dexie.org/docs/Compound-Index) */ + readonly compound?: boolean; + /** keyPath, null for primary key, string for single-property indexes, Array for compound indexes */ + readonly keyPath: null | string | string[]; + /** Auto-generated primary key (does not apply to secondary indexes) */ + readonly autoIncrement?: boolean; + /** Whether index is unique. Also true if index is primary key. */ + readonly unique?: boolean; + /** Whether index is multiEntry. */ + readonly multiEntry?: boolean; + /** Extract (using keyPath) a key from given value (object). Null for outbound primary keys */ + readonly extractKey: ((value: any) => any) | null; + /** If this index is a virtual index, lowLevelIndex represents the actual IndexedDB index behind it */ + readonly lowLevelIndex?: DBCoreIndex; +} +export interface DBCore { + stack: "dbcore"; + // Transaction and Object Store + transaction(stores: string[], mode: "readonly" | "readwrite", options?: DbCoreTransactionOptions): DBCoreTransaction; + // Utility methods + readonly MIN_KEY: any; + readonly MAX_KEY: any; + readonly schema: DBCoreSchema; + table(name: string): DBCoreTable; +} +export interface DBCoreTable { + readonly name: string; + readonly schema: DBCoreTableSchema; + mutate(req: DBCoreMutateRequest): Promise; + get(req: DBCoreGetRequest): Promise; + getMany(req: DBCoreGetManyRequest): Promise; + query(req: DBCoreQueryRequest): Promise; + openCursor(req: DBCoreOpenCursorRequest): Promise; + count(req: DBCoreCountRequest): Promise; +} +export interface Table { + db: Dexie; + name: string; + schema: TableSchema; + hook: TableHooks; + core: DBCoreTable; + get(key: TKey): PromiseExtended; + get(key: TKey, thenShortcut: ThenShortcut): PromiseExtended; + get(equalityCriterias: { + [key: string]: any; + }): PromiseExtended; + get(equalityCriterias: { + [key: string]: any; + }, thenShortcut: ThenShortcut): PromiseExtended; + where(index: string | string[]): WhereClause; + where(equalityCriterias: { + [key: string]: any; + }): Collection; + filter(fn: (obj: T) => boolean): Collection; + count(): PromiseExtended; + count(thenShortcut: ThenShortcut): PromiseExtended; + offset(n: number): Collection; + limit(n: number): Collection; + each(callback: (obj: T, cursor: { + key: any; + primaryKey: TKey; + }) => any): PromiseExtended; + toArray(): PromiseExtended>; + toArray(thenShortcut: ThenShortcut): PromiseExtended; + toCollection(): Collection; + orderBy(index: string | string[]): Collection; + reverse(): Collection; + mapToClass(constructor: Function): Function; + add(item: TInsertType, key?: TKey): PromiseExtended; + update(key: TKey | T, changes: UpdateSpec | ((obj: T, ctx: { + value: any; + primKey: IndexableType; + }) => void | boolean)): PromiseExtended; + put(item: TInsertType, key?: TKey): PromiseExtended; + delete(key: TKey): PromiseExtended; + clear(): PromiseExtended; + bulkGet(keys: TKey[]): PromiseExtended<(T | undefined)[]>; + bulkAdd(items: readonly TInsertType[], keys: IndexableTypeArrayReadonly, options: { + allKeys: B; + }): PromiseExtended; + bulkAdd(items: readonly TInsertType[], options: { + allKeys: B; + }): PromiseExtended; + bulkAdd(items: readonly TInsertType[], keys?: IndexableTypeArrayReadonly, options?: { + allKeys: boolean; + }): PromiseExtended; + bulkPut(items: readonly TInsertType[], keys: IndexableTypeArrayReadonly, options: { + allKeys: B; + }): PromiseExtended; + bulkPut(items: readonly TInsertType[], options: { + allKeys: B; + }): PromiseExtended; + bulkPut(items: readonly TInsertType[], keys?: IndexableTypeArrayReadonly, options?: { + allKeys: boolean; + }): PromiseExtended; + bulkUpdate(keysAndChanges: ReadonlyArray<{ + key: TKey; + changes: UpdateSpec; + }>): PromiseExtended; + bulkDelete(keys: TKey[]): PromiseExtended; +} +export interface Version { + stores(schema: { + [tableName: string]: string | null; + }): Version; + upgrade(fn: (trans: Transaction) => PromiseLike | void): Version; +} +export type TransactionMode = "readonly" | "readwrite" | "r" | "r!" | "r?" | "rw" | "rw!" | "rw?"; +export type DbSchema = { + [tableName: string]: TableSchema; +}; +export interface Middleware { + stack: TStack["stack"]; + create: (down: TStack) => Partial; + level?: number; + name?: string; +} +export interface DexieStacks { + dbcore: DBCore; +} +export type TableProp = { + [K in keyof DX]: DX[K] extends { + schema: any; + get: any; + put: any; + add: any; + where: any; + } ? K : never; +}[keyof DX] & string; +export type TXWithTables = Dexie extends DX ? Transaction // If not subclassed, just expect a Transaction without table props + : Transaction & { + [P in TableProp]: DX[P]; +}; +export interface Dexie { + readonly name: string; + readonly tables: Table[]; + readonly verno: number; + readonly vip: Dexie; + readonly _allTables: { + [name: string]: Table; + }; + readonly core: DBCore; + _createTransaction: (this: Dexie, mode: IDBTransactionMode, storeNames: ArrayLike, dbschema: DbSchema, parentTransaction?: Transaction | null) => Transaction; + readonly _novip: Dexie; + _dbSchema: DbSchema; + version(versionNumber: number): Version; + on: DbEvents; + open(): PromiseExtended; + table(tableName: string): Table; + transaction(mode: TransactionMode, tables: readonly (string | Table)[], scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, table2: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, table4: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + transaction(mode: TransactionMode, table: string | Table, table2: string | Table, table3: string | Table, table5: string | Table, scope: (trans: TXWithTables) => PromiseLike | U): PromiseExtended; + close(closeOptions?: { + disableAutoOpen: boolean; + }): void; + delete(closeOptions?: { + disableAutoOpen: boolean; + }): PromiseExtended; + isOpen(): boolean; + hasBeenClosed(): boolean; + hasFailed(): boolean; + dynamicallyOpened(): boolean; + backendDB(): IDBDatabase; + use(middleware: Middleware): this; + // Add more supported stacks here... : use(middleware: Middleware): this; + unuse({ stack, create }: Middleware<{ + stack: keyof DexieStacks; + }>): this; + unuse({ stack, name }: { + stack: keyof DexieStacks; + name: string; + }): this; + // Make it possible to touch physical class constructors where they reside - as properties on db instance. + // For example, checking if (x instanceof db.Table). Can't do (x instanceof Dexie.Table because it's just a virtual interface) + Table: { + prototype: Table; + }; + WhereClause: { + prototype: WhereClause; + }; + Version: { + prototype: Version; + }; + Transaction: { + prototype: Transaction; + }; + Collection: { + prototype: Collection; + }; +} +/** DexieError + * + * Common base class for all errors originating from Dexie.js except TypeError, + * SyntaxError and RangeError. + * + * https://dexie.org/docs/DexieErrors/DexieError + * + */ +export interface DexieError extends Error { + name: string; + message: string; + stack: string; + inner: any; + toString(): string; +} +/** + * List of the names of auto-generated error classes that extends DexieError + * and shares the interface of DexieError. + * + * Each error should be documented at https://dexie.org/docs/DexieErrors/Dexie. + * + * The generic type DexieExceptionClasses is a map of full error name to + * error constructor. The DexieExceptionClasses is mixed in into Dexie, + * so that it is always possible to throw or catch certain errors via + * Dexie.ErrorName. Example: + * + * try { + * throw new Dexie.InvalidTableError("Invalid table foo", innerError?); + * } catch (err) { + * if (err instanceof Dexie.InvalidTableError) { + * // Could also have check for err.name === "InvalidTableError", or + * // err.name === Dexie.errnames.InvalidTableError. + * console.log("Seems to be an invalid table here..."); + * } else { + * throw err; + * } + * } + */ +export type DexieErrors = { + // https://dexie.org/docs/DexieErrors/Dexie.OpenFailedError + OpenFailed: "OpenFailedError"; + // https://dexie.org/docs/DexieErrors/Dexie.VersionChangeError + VersionChange: "VersionChangeError"; + // https://dexie.org/docs/DexieErrors/Dexie.SchemaError + Schema: "SchemaError"; + // https://dexie.org/docs/DexieErrors/Dexie.UpgradeError + Upgrade: "UpgradeError"; + // https://dexie.org/docs/DexieErrors/Dexie.InvalidTableError + InvalidTable: "InvalidTableError"; + // https://dexie.org/docs/DexieErrors/Dexie.MissingAPIError + MissingAPI: "MissingAPIError"; + // https://dexie.org/docs/DexieErrors/Dexie.NoSuchDatabaseError + NoSuchDatabase: "NoSuchDatabaseError"; + // https://dexie.org/docs/DexieErrors/Dexie.InvalidArgumentError + InvalidArgument: "InvalidArgumentError"; + // https://dexie.org/docs/DexieErrors/Dexie.SubTransactionError + SubTransaction: "SubTransactionError"; + // https://dexie.org/docs/DexieErrors/Dexie.UnsupportedError + Unsupported: "UnsupportedError"; + // https://dexie.org/docs/DexieErrors/Dexie.InternalError + Internal: "InternalError"; + // https://dexie.org/docs/DexieErrors/Dexie.DatabaseClosedError + DatabaseClosed: "DatabaseClosedError"; + // https://dexie.org/docs/DexieErrors/Dexie.PrematureCommitError + PrematureCommit: "PrematureCommitError"; + // https://dexie.org/docs/DexieErrors/Dexie.ForeignAwaitError + ForeignAwait: "ForeignAwaitError"; + // https://dexie.org/docs/DexieErrors/Dexie.UnknownError + Unknown: "UnknownError"; + // https://dexie.org/docs/DexieErrors/Dexie.ConstraintError + Constraint: "ConstraintError"; + // https://dexie.org/docs/DexieErrors/Dexie.DataError + Data: "DataError"; + // https://dexie.org/docs/DexieErrors/Dexie.TransactionInactiveError + TransactionInactive: "TransactionInactiveError"; + // https://dexie.org/docs/DexieErrors/Dexie.ReadOnlyError + ReadOnly: "ReadOnlyError"; + // https://dexie.org/docs/DexieErrors/Dexie.VersionError + Version: "VersionError"; + // https://dexie.org/docs/DexieErrors/Dexie.NotFoundError + NotFound: "NotFoundError"; + // https://dexie.org/docs/DexieErrors/Dexie.InvalidStateError + InvalidState: "InvalidStateError"; + // https://dexie.org/docs/DexieErrors/Dexie.InvalidAccessError + InvalidAccess: "InvalidAccessError"; + // https://dexie.org/docs/DexieErrors/Dexie.AbortError + Abort: "AbortError"; + // https://dexie.org/docs/DexieErrors/Dexie.TimeoutError + Timeout: "TimeoutError"; + // https://dexie.org/docs/DexieErrors/Dexie.QuotaExceededError + QuotaExceeded: "QuotaExceededError"; + // https://dexie.org/docs/DexieErrors/Dexie.DataCloneError + DataClone: "DataCloneError"; +}; +/** ModifyError + * + * https://dexie.org/docs/DexieErrors/Dexie.ModifyError + */ +export interface ModifyError extends DexieError { + failures: Array; + failedKeys: IndexableTypeArrayReadonly; + successCount: number; +} +/** BulkError + * + * https://dexie.org/docs/DexieErrors/Dexie.BulkError + */ +export interface BulkError extends DexieError { + failures: Error[]; + failuresByPos: { + [operationNumber: number]: Error; + }; +} +export interface DexieErrorConstructor { + new (msg?: string, inner?: Object): DexieError; + new (inner: Object): DexieError; + prototype: DexieError; +} +export interface ModifyErrorConstructor { + new (msg?: string, failures?: any[], successCount?: number, failedKeys?: IndexableTypeArrayReadonly): ModifyError; + prototype: ModifyError; +} +export interface BulkErrorConstructor { + new (msg?: string, failures?: { + [operationNumber: number]: Error; + }): BulkError; + prototype: BulkError; +} +export type ExceptionSet = { + [P in DexieErrors[keyof DexieErrors]]: DexieErrorConstructor; +}; +export type DexieExceptionClasses = ExceptionSet & { + DexieError: DexieErrorConstructor; + ModifyError: ModifyErrorConstructor; + BulkError: BulkErrorConstructor; +}; +export interface DexieDOMDependencies { + indexedDB: IDBFactory; + IDBKeyRange: typeof IDBKeyRange; +} +declare global { + interface SymbolConstructor { + readonly observable: symbol; + } +} +export interface Subscribable { + subscribe(observer: Partial>): Unsubscribable; +} +export interface Unsubscribable { + unsubscribe(): void; +} +export interface Observable { + subscribe(observerOrNext?: Observer | ((value: T) => void)): Subscription; + subscribe(next?: ((value: T) => void) | null, error?: ((error: any) => void) | null, complete?: (() => void) | null): Subscription; + getValue?(): T; + hasValue?(): boolean; + [Symbol.observable]: () => Subscribable; +} +export interface Subscription { + unsubscribe(): void; + readonly closed: boolean; +} +export interface Observer { + start?: (subscription: Subscription) => void; + next?: (value: T) => void; + error?: (error: any) => void; + complete?: () => void; +} +export type GlobalQueryCache = { + // TODO: Change to parts: {[part: string]: TblQueryCache} + // och unsignaledParts: ObservabilitySet; + [part: string]: TblQueryCache; // part is `idb://${dbName}/${tableName}` +}; +export interface TblQueryCache { + queries: { + query: { + [indexName: string]: CacheEntry[]; + }; + count: { + [indexName: string]: CacheEntry[]; + }; + }; + objs: Map; + optimisticOps: DBCoreMutateRequest[]; + unsignaledParts: ObservabilitySet; +} +export interface CacheEntryCommon { + subscribers: Set<() => void>; + obsSet: ObservabilitySet; + //txObsSet: ObservabilitySet; + promise: Promise; + dirty: boolean; +} +export type CacheEntry = CacheEntryCommon & ({ + type: "query"; + req: DBCoreQueryRequest; + res?: readonly any[]; +} | { + type: "count"; + req: DBCoreCountRequest; + res?: number; +}); +export type ChromeTransactionDurability = "default" | "strict" | "relaxed"; +export interface DexieOptions { + addons?: Array<(db: Dexie) => void>; + autoOpen?: boolean; + indexedDB?: { + open: Function; + }; + IDBKeyRange?: { + bound: Function; + lowerBound: Function; + upperBound: Function; + }; + allowEmptyDB?: boolean; + modifyChunkSize?: number; + chromeTransactionDurability?: ChromeTransactionDurability; + cache?: "immutable" | "cloned" | "disabled"; +} +export interface DexieConstructor extends DexieExceptionClasses { + new (databaseName: string, options?: DexieOptions): Dexie; + prototype: Dexie; + addons: Array<(db: Dexie) => void>; + version: number; + semVer: string; + currentTransaction: Transaction; + waitFor(promise: PromiseLike | T, timeoutMilliseconds?: number): Promise; + getDatabaseNames(): Promise; + getDatabaseNames(thenShortcut: ThenShortcut): Promise; + vip(scopeFunction: () => U): U; + ignoreTransaction(fn: () => U): U; + disableBfCache?: boolean; + liveQuery(fn: () => T | Promise): Observable; + extendObservabilitySet(target: ObservabilitySet, newSet: ObservabilitySet): ObservabilitySet; + override(origFunc: F, overridedFactory: (fn: any) => any): F; // ? + getByKeyPath(obj: Object, keyPath: string | string[]): any; + setByKeyPath(obj: Object, keyPath: string | string[], value: any): void; + delByKeyPath(obj: Object, keyPath: string | string[]): void; + shallowClone(obj: T): T; + deepClone(obj: T): T; + asap(fn: Function): void; //? + maxKey: Array> | string; + minKey: number; + exists(dbName: string): Promise; + delete(dbName: string): Promise; + dependencies: DexieDOMDependencies; + default: Dexie; // Work-around for different build tools handling default imports differently. + cache: GlobalQueryCache; + debug: false | true | "dexie"; + Promise: PromiseExtendedConstructor; + //TableSchema: {}; // Deprecate! + //IndexSpec: {new():IndexSpec}; //? Deprecate + Events: (ctx?: any) => DexieEventSet; + on: GlobalDexieEvents; + errnames: DexieErrors; +} +export class Entity { + protected constructor(); + protected readonly db: TDexieSubClass; + table(): TableProp; +} +export type IsStrictlyAny = (T extends never ? true : false) extends false ? false : true; +/** Extract the union of literal method names in T + */ +export type MethodProps = { + [P in keyof T]: IsStrictlyAny extends true ? never // Plain property of type any (not method) + : T[P] extends (...args: any[]) => any ? P // a function (method) + : never; +}[keyof T]; +/** Default insert type of T is a subset of T where: + * * given optional props (such as an auto-generated primary key) are made optional + * * methods are omitted + */ +export type InsertType = Omit> & { + [P in OptionalProps]?: T[P]; +}; +/** IDType extract the actual type of the primary key: + * * If TKey is a literal type that names a property of T, extract the type using T[TKey] + * * Else, use TKey as is. + */ +export type IDType = IsStrictlyAny extends true ? TKeyPropNameOrKeyType : TKeyPropNameOrKeyType extends string ? TKeyPropNameOrKeyType extends keyof T ? T[TKeyPropNameOrKeyType] : TKeyPropNameOrKeyType : TKeyPropNameOrKeyType; +export type EntityTable> = Table, TInsertType>; +export declare var Dexie: DexieConstructor; +export interface _Table extends Table { +} +export interface _Collection extends Collection { +} +export declare module Dexie { + // The "Dexie.Promise" type. + type Promise = PromiseExtended; // Because many samples have been Dexie.Promise. + // The "Dexie.Table" interface. Same as named exported interface Table. + interface Table extends _Table { + } // Because all samples have been Dexie.Table<...> + // The "Dexie.Collection" interface. Same as named exported interface Collection. + interface Collection extends _Collection { + } // Because app-code may declare it. +} +export function liveQuery(querier: () => T | Promise): Observable; +export function mergeRanges(target: IntervalTree, newSet: IntervalTree): void; +export function rangesOverlap(rangeSet1: IntervalTree, rangeSet2: IntervalTree): boolean; +export function cmp(a: any, b: any): number; +export function replacePrefix(a: string, b: string): PropModification; +export function add(num: number | bigint | any[]): PropModification; +export function remove(num: number | bigint | any[]): PropModification; +/** Exporting 'Dexie' as the default export. + **/ +export default Dexie; + +export {}; diff --git a/src/dexie/dist/dexie.js b/src/dexie/dist/dexie.js new file mode 100644 index 000000000..afafcc381 --- /dev/null +++ b/src/dexie/dist/dexie.js @@ -0,0 +1,5898 @@ +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * By David Fahlander, david.fahlander@gmail.com + * + * Version 4.0.7, Sun May 26 2024 + * + * https://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ + */ + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, global.Dexie = factory()); +})(this, (function () { 'use strict'; + + /*! ***************************************************************************** + Copyright (c) Microsoft Corporation. + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. + ***************************************************************************** */ + var extendStatics = function(d, b) { + extendStatics = Object.setPrototypeOf || + ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; + return extendStatics(d, b); + }; + function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); + extendStatics(d, b); + function __() { this.constructor = d; } + d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); + } + var __assign = function() { + __assign = Object.assign || function __assign(t) { + for (var s, i = 1, n = arguments.length; i < n; i++) { + s = arguments[i]; + for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p]; + } + return t; + }; + return __assign.apply(this, arguments); + }; + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); + } + + var _global = typeof globalThis !== 'undefined' ? globalThis : + typeof self !== 'undefined' ? self : + typeof window !== 'undefined' ? window : + global; + + var keys = Object.keys; + var isArray = Array.isArray; + if (typeof Promise !== 'undefined' && !_global.Promise) { + _global.Promise = Promise; + } + function extend(obj, extension) { + if (typeof extension !== 'object') + return obj; + keys(extension).forEach(function (key) { + obj[key] = extension[key]; + }); + return obj; + } + var getProto = Object.getPrototypeOf; + var _hasOwn = {}.hasOwnProperty; + function hasOwn(obj, prop) { + return _hasOwn.call(obj, prop); + } + function props(proto, extension) { + if (typeof extension === 'function') + extension = extension(getProto(proto)); + (typeof Reflect === "undefined" ? keys : Reflect.ownKeys)(extension).forEach(function (key) { + setProp(proto, key, extension[key]); + }); + } + var defineProperty = Object.defineProperty; + function setProp(obj, prop, functionOrGetSet, options) { + defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ? + { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : + { value: functionOrGetSet, configurable: true, writable: true }, options)); + } + function derive(Child) { + return { + from: function (Parent) { + Child.prototype = Object.create(Parent.prototype); + setProp(Child.prototype, "constructor", Child); + return { + extend: props.bind(null, Child.prototype) + }; + } + }; + } + var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; + function getPropertyDescriptor(obj, prop) { + var pd = getOwnPropertyDescriptor(obj, prop); + var proto; + return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); + } + var _slice = [].slice; + function slice(args, start, end) { + return _slice.call(args, start, end); + } + function override(origFunc, overridedFactory) { + return overridedFactory(origFunc); + } + function assert(b) { + if (!b) + throw new Error("Assertion Failed"); + } + function asap$1(fn) { + if (_global.setImmediate) + setImmediate(fn); + else + setTimeout(fn, 0); + } + function arrayToObject(array, extractor) { + return array.reduce(function (result, item, i) { + var nameAndValue = extractor(item, i); + if (nameAndValue) + result[nameAndValue[0]] = nameAndValue[1]; + return result; + }, {}); + } + function getByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) + return obj[keyPath]; + if (!keyPath) + return obj; + if (typeof keyPath !== 'string') { + var rv = []; + for (var i = 0, l = keyPath.length; i < l; ++i) { + var val = getByKeyPath(obj, keyPath[i]); + rv.push(val); + } + return rv; + } + var period = keyPath.indexOf('.'); + if (period !== -1) { + var innerObj = obj[keyPath.substr(0, period)]; + return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1)); + } + return undefined; + } + function setByKeyPath(obj, keyPath, value) { + if (!obj || keyPath === undefined) + return; + if ('isFrozen' in Object && Object.isFrozen(obj)) + return; + if (typeof keyPath !== 'string' && 'length' in keyPath) { + assert(typeof value !== 'string' && 'length' in value); + for (var i = 0, l = keyPath.length; i < l; ++i) { + setByKeyPath(obj, keyPath[i], value[i]); + } + } + else { + var period = keyPath.indexOf('.'); + if (period !== -1) { + var currentKeyPath = keyPath.substr(0, period); + var remainingKeyPath = keyPath.substr(period + 1); + if (remainingKeyPath === "") + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) + obj.splice(currentKeyPath, 1); + else + delete obj[currentKeyPath]; + } + else + obj[currentKeyPath] = value; + else { + var innerObj = obj[currentKeyPath]; + if (!innerObj || !hasOwn(obj, currentKeyPath)) + innerObj = (obj[currentKeyPath] = {}); + setByKeyPath(innerObj, remainingKeyPath, value); + } + } + else { + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(keyPath))) + obj.splice(keyPath, 1); + else + delete obj[keyPath]; + } + else + obj[keyPath] = value; + } + } + } + function delByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string') + setByKeyPath(obj, keyPath, undefined); + else if ('length' in keyPath) + [].map.call(keyPath, function (kp) { + setByKeyPath(obj, kp, undefined); + }); + } + function shallowClone(obj) { + var rv = {}; + for (var m in obj) { + if (hasOwn(obj, m)) + rv[m] = obj[m]; + } + return rv; + } + var concat = [].concat; + function flatten(a) { + return concat.apply([], a); + } + var intrinsicTypeNames = "BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey" + .split(',').concat(flatten([8, 16, 32, 64].map(function (num) { return ["Int", "Uint", "Float"].map(function (t) { return t + num + "Array"; }); }))).filter(function (t) { return _global[t]; }); + var intrinsicTypes = new Set(intrinsicTypeNames.map(function (t) { return _global[t]; })); + function cloneSimpleObjectTree(o) { + var rv = {}; + for (var k in o) + if (hasOwn(o, k)) { + var v = o[k]; + rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v); + } + return rv; + } + function objectIsEmpty(o) { + for (var k in o) + if (hasOwn(o, k)) + return false; + return true; + } + var circularRefs = null; + function deepClone(any) { + circularRefs = new WeakMap(); + var rv = innerDeepClone(any); + circularRefs = null; + return rv; + } + function innerDeepClone(x) { + if (!x || typeof x !== 'object') + return x; + var rv = circularRefs.get(x); + if (rv) + return rv; + if (isArray(x)) { + rv = []; + circularRefs.set(x, rv); + for (var i = 0, l = x.length; i < l; ++i) { + rv.push(innerDeepClone(x[i])); + } + } + else if (intrinsicTypes.has(x.constructor)) { + rv = x; + } + else { + var proto = getProto(x); + rv = proto === Object.prototype ? {} : Object.create(proto); + circularRefs.set(x, rv); + for (var prop in x) { + if (hasOwn(x, prop)) { + rv[prop] = innerDeepClone(x[prop]); + } + } + } + return rv; + } + var toString = {}.toString; + function toStringTag(o) { + return toString.call(o).slice(8, -1); + } + var iteratorSymbol = typeof Symbol !== 'undefined' ? + Symbol.iterator : + '@@iterator'; + var getIteratorOf = typeof iteratorSymbol === "symbol" ? function (x) { + var i; + return x != null && (i = x[iteratorSymbol]) && i.apply(x); + } : function () { return null; }; + function delArrayItem(a, x) { + var i = a.indexOf(x); + if (i >= 0) + a.splice(i, 1); + return i >= 0; + } + var NO_CHAR_ARRAY = {}; + function getArrayOf(arrayLike) { + var i, a, x, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') + return [arrayLike]; + if ((it = getIteratorOf(arrayLike))) { + a = []; + while ((x = it.next()), !x.done) + a.push(x.value); + return a; + } + if (arrayLike == null) + return [arrayLike]; + i = arrayLike.length; + if (typeof i === 'number') { + a = new Array(i); + while (i--) + a[i] = arrayLike[i]; + return a; + } + return [arrayLike]; + } + i = arguments.length; + a = new Array(i); + while (i--) + a[i] = arguments[i]; + return a; + } + var isAsyncFunction = typeof Symbol !== 'undefined' + ? function (fn) { return fn[Symbol.toStringTag] === 'AsyncFunction'; } + : function () { return false; }; + + var dexieErrorNames = [ + 'Modify', + 'Bulk', + 'OpenFailed', + 'VersionChange', + 'Schema', + 'Upgrade', + 'InvalidTable', + 'MissingAPI', + 'NoSuchDatabase', + 'InvalidArgument', + 'SubTransaction', + 'Unsupported', + 'Internal', + 'DatabaseClosed', + 'PrematureCommit', + 'ForeignAwait' + ]; + var idbDomErrorNames = [ + 'Unknown', + 'Constraint', + 'Data', + 'TransactionInactive', + 'ReadOnly', + 'Version', + 'NotFound', + 'InvalidState', + 'InvalidAccess', + 'Abort', + 'Timeout', + 'QuotaExceeded', + 'Syntax', + 'DataClone' + ]; + var errorList = dexieErrorNames.concat(idbDomErrorNames); + var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed", + MissingAPI: "IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb" + }; + function DexieError(name, msg) { + this.name = name; + this.message = msg; + } + derive(DexieError).from(Error).extend({ + toString: function () { return this.name + ": " + this.message; } + }); + function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + Object.keys(failures) + .map(function (key) { return failures[key].toString(); }) + .filter(function (v, i, s) { return s.indexOf(v) === i; }) + .join('\n'); + } + function ModifyError(msg, failures, successCount, failedKeys) { + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; + this.message = getMultiErrorMessage(msg, failures); + } + derive(ModifyError).from(DexieError); + function BulkError(msg, failures) { + this.name = "BulkError"; + this.failures = Object.keys(failures).map(function (pos) { return failures[pos]; }); + this.failuresByPos = failures; + this.message = getMultiErrorMessage(msg, this.failures); + } + derive(BulkError).from(DexieError); + var errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + "Error", obj); }, {}); + var BaseException = DexieError; + var exceptions = errorList.reduce(function (obj, name) { + var fullName = name + "Error"; + function DexieError(msgOrInner, inner) { + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } + else if (typeof msgOrInner === 'string') { + this.message = "".concat(msgOrInner).concat(!inner ? '' : '\n ' + inner); + this.inner = inner || null; + } + else if (typeof msgOrInner === 'object') { + this.message = "".concat(msgOrInner.name, " ").concat(msgOrInner.message); + this.inner = msgOrInner; + } + } + derive(DexieError).from(BaseException); + obj[name] = DexieError; + return obj; + }, {}); + exceptions.Syntax = SyntaxError; + exceptions.Type = TypeError; + exceptions.Range = RangeError; + var exceptionMap = idbDomErrorNames.reduce(function (obj, name) { + obj[name + "Error"] = exceptions[name]; + return obj; + }, {}); + function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + setProp(rv, "stack", { get: function () { + return this.inner.stack; + } }); + } + return rv; + } + var fullNameExceptions = errorList.reduce(function (obj, name) { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; + }, {}); + fullNameExceptions.ModifyError = ModifyError; + fullNameExceptions.DexieError = DexieError; + fullNameExceptions.BulkError = BulkError; + + function nop() { } + function mirror(val) { return val; } + function pureFunctionChain(f1, f2) { + if (f1 == null || f1 === mirror) + return f2; + return function (val) { + return f2(f1(val)); + }; + } + function callBoth(on1, on2) { + return function () { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; + } + function hookCreatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res !== undefined) + arguments[0] = res; + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== undefined ? res2 : res; + }; + } + function hookDeletingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = this.onerror = null; + f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; + } + function hookUpdatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function (modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === undefined ? + (res2 === undefined ? undefined : res2) : + (extend(res, res2)); + }; + } + function reverseStoppableEventChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + if (f2.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; + } + function promisableChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res && typeof res.then === 'function') { + var thiz = this, i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + return res.then(function () { + return f2.apply(thiz, args); + }); + } + return f2.apply(this, arguments); + }; + } + + var debug = typeof location !== 'undefined' && + /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); + function setDebug(value, filter) { + debug = value; + } + + var INTERNAL = {}; + var ZONE_ECHO_LIMIT = 100, _a$1 = typeof Promise === 'undefined' ? + [] : + (function () { + var globalP = Promise.resolve(); + if (typeof crypto === 'undefined' || !crypto.subtle) + return [globalP, getProto(globalP), globalP]; + var nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); + return [ + nativeP, + getProto(nativeP), + globalP + ]; + })(), resolvedNativePromise = _a$1[0], nativePromiseProto = _a$1[1], resolvedGlobalPromise = _a$1[2], nativePromiseThen = nativePromiseProto && nativePromiseProto.then; + var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; + var patchGlobalPromise = !!resolvedGlobalPromise; + function schedulePhysicalTick() { + queueMicrotask(physicalTick); + } + var asap = function (callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } + }; + var isOutsideMicroTick = true, + needsNewPhysicalTick = true, + unhandledErrors = [], + rejectingErrors = [], + rejectionMapper = mirror; + var globalPSD = { + id: 'global', + global: true, + ref: 0, + unhandleds: [], + onunhandled: nop, + pgp: false, + env: {}, + finalize: nop + }; + var PSD = globalPSD; + var microtickQueue = []; + var numScheduledCalls = 0; + var tickFinalizers = []; + function DexiePromise(fn) { + if (typeof this !== 'object') + throw new TypeError('Promises must be constructed via new'); + this._listeners = []; + this._lib = false; + var psd = (this._PSD = PSD); + if (typeof fn !== 'function') { + if (fn !== INTERNAL) + throw new TypeError('Not a function'); + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); + return; + } + this._state = null; + this._value = null; + ++psd.ref; + executePromiseTask(this, fn); + } + var thenProp = { + get: function () { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var _this = this; + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + var cleanup = possibleAwait && !decrementExpectedAwaits(); + var rv = new DexiePromise(function (resolve, reject) { + propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); + }); + if (this._consoleTask) + rv._consoleTask = this._consoleTask; + return rv; + } + then.prototype = INTERNAL; + return then; + }, + set: function (value) { + setProp(this, 'then', value && value.prototype === INTERNAL ? + thenProp : + { + get: function () { + return value; + }, + set: thenProp.set + }); + } + }; + props(DexiePromise.prototype, { + then: thenProp, + _then: function (onFulfilled, onRejected) { + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + catch: function (onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + var type = arguments[0], handler = arguments[1]; + return typeof type === 'function' ? this.then(null, function (err) { + return err instanceof type ? handler(err) : PromiseReject(err); + }) + : this.then(null, function (err) { + return err && err.name === type ? handler(err) : PromiseReject(err); + }); + }, + finally: function (onFinally) { + return this.then(function (value) { + return DexiePromise.resolve(onFinally()).then(function () { return value; }); + }, function (err) { + return DexiePromise.resolve(onFinally()).then(function () { return PromiseReject(err); }); + }); + }, + timeout: function (ms, msg) { + var _this = this; + return ms < Infinity ? + new DexiePromise(function (resolve, reject) { + var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms); + _this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } + }); + if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise'); + globalPSD.env = snapShot(); + function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; + } + props(DexiePromise, { + all: function () { + var values = getArrayOf.apply(null, arguments) + .map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (values.length === 0) + resolve([]); + var remaining = values.length; + values.forEach(function (a, i) { return DexiePromise.resolve(a).then(function (x) { + values[i] = x; + if (!--remaining) + resolve(values); + }, reject); }); + }); + }, + resolve: function (value) { + if (value instanceof DexiePromise) + return value; + if (value && typeof value.then === 'function') + return new DexiePromise(function (resolve, reject) { + value.then(resolve, reject); + }); + var rv = new DexiePromise(INTERNAL, true, value); + return rv; + }, + reject: PromiseReject, + race: function () { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + values.map(function (value) { return DexiePromise.resolve(value).then(resolve, reject); }); + }); + }, + PSD: { + get: function () { return PSD; }, + set: function (value) { return PSD = value; } + }, + totalEchoes: { get: function () { return totalEchoes; } }, + newPSD: newScope, + usePSD: usePSD, + scheduler: { + get: function () { return asap; }, + set: function (value) { asap = value; } + }, + rejectionMapper: { + get: function () { return rejectionMapper; }, + set: function (value) { rejectionMapper = value; } + }, + follow: function (fn, zoneProps) { + return new DexiePromise(function (resolve, reject) { + return newScope(function (resolve, reject) { + var psd = PSD; + psd.unhandleds = []; + psd.onunhandled = reject; + psd.finalize = callBoth(function () { + var _this = this; + run_at_end_of_this_or_next_physical_tick(function () { + _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]); + }); + }, psd.finalize); + fn(); + }, zoneProps, resolve, reject); + }); + } + }); + if (NativePromise) { + if (NativePromise.allSettled) + setProp(DexiePromise, "allSettled", function () { + var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve) { + if (possiblePromises.length === 0) + resolve([]); + var remaining = possiblePromises.length; + var results = new Array(remaining); + possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return results[i] = { status: "fulfilled", value: value }; }, function (reason) { return results[i] = { status: "rejected", reason: reason }; }) + .then(function () { return --remaining || resolve(results); }); }); + }); + }); + if (NativePromise.any && typeof AggregateError !== 'undefined') + setProp(DexiePromise, "any", function () { + var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (possiblePromises.length === 0) + reject(new AggregateError([])); + var remaining = possiblePromises.length; + var failures = new Array(remaining); + possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return resolve(value); }, function (failure) { + failures[i] = failure; + if (!--remaining) + reject(new AggregateError(failures)); + }); }); + }); + }); + } + function executePromiseTask(promise, fn) { + try { + fn(function (value) { + if (promise._state !== null) + return; + if (value === promise) + throw new TypeError('A promise cannot be resolved with itself.'); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === 'function') { + executePromiseTask(promise, function (resolve, reject) { + value instanceof DexiePromise ? + value._then(resolve, reject) : + value.then(resolve, reject); + }); + } + else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, handleRejection.bind(null, promise)); + } + catch (ex) { + handleRejection(promise, ex); + } + } + function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); + } + function propagateAllListeners(promise) { + var listeners = promise._listeners; + promise._listeners = []; + for (var i = 0, len = listeners.length; i < len; ++i) { + propagateToListener(promise, listeners[i]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); + if (numScheduledCalls === 0) { + ++numScheduledCalls; + asap(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } + } + function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap(callListener, [cb, promise, listener]); + } + function callListener(cb, promise, listener) { + try { + var ret, value = promise._value; + if (!promise._state && rejectingErrors.length) + rejectingErrors = []; + ret = debug && promise._consoleTask ? promise._consoleTask.run(function () { return cb(value); }) : cb(value); + if (!promise._state && rejectingErrors.indexOf(value) === -1) { + markErrorAsHandled(promise); + } + listener.resolve(ret); + } + catch (e) { + listener.reject(e); + } + finally { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } + } + function physicalTick() { + usePSD(globalPSD, function () { + beginMicroTickScope() && endMicroTickScope(); + }); + } + function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; + } + function endMicroTickScope() { + var callbacks, i, l; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l = callbacks.length; + for (i = 0; i < l; ++i) { + var item = callbacks[i]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; + } + function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach(function (p) { + p._PSD.onunhandled.call(null, p._value, p); + }); + var finalizers = tickFinalizers.slice(0); + var i = finalizers.length; + while (i) + finalizers[--i](); + } + function run_at_end_of_this_or_next_physical_tick(fn) { + function finalizer() { + fn(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } + function addPossiblyUnhandledError(promise) { + if (!unhandledErrors.some(function (p) { return p._value === promise._value; })) + unhandledErrors.push(promise); + } + function markErrorAsHandled(promise) { + var i = unhandledErrors.length; + while (i) + if (unhandledErrors[--i]._value === promise._value) { + unhandledErrors.splice(i, 1); + return; + } + } + function PromiseReject(reason) { + return new DexiePromise(INTERNAL, false, reason); + } + function wrap(fn, errorCatcher) { + var psd = PSD; + return function () { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn.apply(this, arguments); + } + catch (e) { + errorCatcher && errorCatcher(e); + } + finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; + } + var task = { awaits: 0, echoes: 0, id: 0 }; + var taskCounter = 0; + var zoneStack = []; + var zoneEchoes = 0; + var totalEchoes = 0; + var zone_id_counter = 0; + function newScope(fn, props, a1, a2) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: DexiePromise, + PromiseProp: { value: DexiePromise, configurable: true, writable: true }, + all: DexiePromise.all, + race: DexiePromise.race, + allSettled: DexiePromise.allSettled, + any: DexiePromise.any, + resolve: DexiePromise.resolve, + reject: DexiePromise.reject, + } : {}; + if (props) + extend(psd, props); + ++parent.ref; + psd.finalize = function () { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn, a1, a2); + if (psd.ref === 0) + psd.finalize(); + return rv; + } + function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; + } + function decrementExpectedAwaits() { + if (!task.awaits) + return false; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; + return true; + } + if (('' + nativePromiseThen).indexOf('[native code]') === -1) { + incrementExpectedAwaits = decrementExpectedAwaits = nop; + } + function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then(function (x) { + decrementExpectedAwaits(); + return x; + }, function (e) { + decrementExpectedAwaits(); + return rejection(e); + }); + } + return possiblePromise; + } + function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.awaits = task.id = 0; + } + zoneStack.push(PSD); + switchToZone(targetZone, true); + } + function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); + } + function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + var GlobalPromise = globalPSD.env.Promise; + var targetEnv = targetZone.env; + if (currentZone.global || targetZone.global) { + Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + if (targetEnv.allSettled) + GlobalPromise.allSettled = targetEnv.allSettled; + if (targetEnv.any) + GlobalPromise.any = targetEnv.any; + } + } + } + function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + allSettled: GlobalPromise.allSettled, + any: GlobalPromise.any, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + } : {}; + } + function usePSD(psd, fn, a1, a2, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn(a1, a2, a3); + } + finally { + switchToZone(outerScope, false); + } + } + function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) { + return typeof fn !== 'function' ? fn : function () { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn.apply(this, arguments); + } + finally { + switchToZone(outerZone, false); + if (cleanup) + queueMicrotask(decrementExpectedAwaits); + } + }; + } + function execInGlobalContext(cb) { + if (Promise === NativePromise && task.echoes === 0) { + if (zoneEchoes === 0) { + cb(); + } + else { + enqueueNativeMicroTask(cb); + } + } + else { + setTimeout(cb, 0); + } + } + var rejection = DexiePromise.reject; + + function tempTransaction(db, mode, storeNames, fn) { + if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) { + if (db._state.openComplete) { + return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError)); + } + if (!db._state.isBeingOpened) { + if (!db._state.autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); + } + return db._state.dbReadyPromise.then(function () { return tempTransaction(db, mode, storeNames, fn); }); + } + else { + var trans = db._createTransaction(mode, storeNames, db._dbSchema); + try { + trans.create(); + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(function () { return tempTransaction(db, mode, storeNames, fn); }); + } + return rejection(ex); + } + return trans._promise(mode, function (resolve, reject) { + return newScope(function () { + PSD.trans = trans; + return fn(resolve, reject, trans); + }); + }).then(function (result) { + if (mode === 'readwrite') + try { + trans.idbtrans.commit(); + } + catch (_a) { } + return mode === 'readonly' ? result : trans._completion.then(function () { return result; }); + }); + } + } + + var DEXIE_VERSION = '4.0.7'; + var maxString = String.fromCharCode(65535); + var minKey = -Infinity; + var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; + var STRING_EXPECTED = "String expected."; + var connections = []; + var DBNAMES_DB = '__dbnames'; + var READONLY = 'readonly'; + var READWRITE = 'readwrite'; + + function combine(filter1, filter2) { + return filter1 ? + filter2 ? + function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : + filter1 : + filter2; + } + + var AnyRange = { + type: 3 , + lower: -Infinity, + lowerOpen: false, + upper: [[]], + upperOpen: false + }; + + function workaroundForUndefinedPrimKey(keyPath) { + return typeof keyPath === "string" && !/\./.test(keyPath) + ? function (obj) { + if (obj[keyPath] === undefined && (keyPath in obj)) { + obj = deepClone(obj); + delete obj[keyPath]; + } + return obj; + } + : function (obj) { return obj; }; + } + + function Entity() { + throw exceptions.Type(); + } + + function cmp(a, b) { + try { + var ta = type(a); + var tb = type(b); + if (ta !== tb) { + if (ta === 'Array') + return 1; + if (tb === 'Array') + return -1; + if (ta === 'binary') + return 1; + if (tb === 'binary') + return -1; + if (ta === 'string') + return 1; + if (tb === 'string') + return -1; + if (ta === 'Date') + return 1; + if (tb !== 'Date') + return NaN; + return -1; + } + switch (ta) { + case 'number': + case 'Date': + case 'string': + return a > b ? 1 : a < b ? -1 : 0; + case 'binary': { + return compareUint8Arrays(getUint8Array(a), getUint8Array(b)); + } + case 'Array': + return compareArrays(a, b); + } + } + catch (_a) { } + return NaN; + } + function compareArrays(a, b) { + var al = a.length; + var bl = b.length; + var l = al < bl ? al : bl; + for (var i = 0; i < l; ++i) { + var res = cmp(a[i], b[i]); + if (res !== 0) + return res; + } + return al === bl ? 0 : al < bl ? -1 : 1; + } + function compareUint8Arrays(a, b) { + var al = a.length; + var bl = b.length; + var l = al < bl ? al : bl; + for (var i = 0; i < l; ++i) { + if (a[i] !== b[i]) + return a[i] < b[i] ? -1 : 1; + } + return al === bl ? 0 : al < bl ? -1 : 1; + } + function type(x) { + var t = typeof x; + if (t !== 'object') + return t; + if (ArrayBuffer.isView(x)) + return 'binary'; + var tsTag = toStringTag(x); + return tsTag === 'ArrayBuffer' ? 'binary' : tsTag; + } + function getUint8Array(a) { + if (a instanceof Uint8Array) + return a; + if (ArrayBuffer.isView(a)) + return new Uint8Array(a.buffer, a.byteOffset, a.byteLength); + return new Uint8Array(a); + } + + var Table = (function () { + function Table() { + } + Table.prototype._trans = function (mode, fn, writeLocked) { + var trans = this._tx || PSD.trans; + var tableName = this.name; + var task = debug && typeof console !== 'undefined' && console.createTask && console.createTask("Dexie: ".concat(mode === 'readonly' ? 'read' : 'write', " ").concat(this.name)); + function checkTableInTransaction(resolve, reject, trans) { + if (!trans.schema[tableName]) + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + return fn(trans.idbtrans, trans); + } + var wasRootExec = beginMicroTickScope(); + try { + var p = trans && trans.db._novip === this.db._novip ? + trans === PSD.trans ? + trans._promise(mode, checkTableInTransaction, writeLocked) : + newScope(function () { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) : + tempTransaction(this.db, mode, [this.name], checkTableInTransaction); + if (task) { + p._consoleTask = task; + p = p.catch(function (err) { + console.trace(err); + return rejection(err); + }); + } + return p; + } + finally { + if (wasRootExec) + endMicroTickScope(); + } + }; + Table.prototype.get = function (keyOrCrit, cb) { + var _this = this; + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + if (keyOrCrit == null) + return rejection(new exceptions.Type("Invalid argument to Table.get()")); + return this._trans('readonly', function (trans) { + return _this.core.get({ trans: trans, key: keyOrCrit }) + .then(function (res) { return _this.hook.reading.fire(res); }); + }).then(cb); + }; + Table.prototype.where = function (indexOrCrit) { + if (typeof indexOrCrit === 'string') + return new this.db.WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new this.db.WhereClause(this, "[".concat(indexOrCrit.join('+'), "]")); + var keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + return this + .where(keyPaths[0]) + .equals(indexOrCrit[keyPaths[0]]); + var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) { + if (ix.compound && + keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; })) { + for (var i = 0; i < keyPaths.length; ++i) { + if (keyPaths.indexOf(ix.keyPath[i]) === -1) + return false; + } + return true; + } + return false; + }).sort(function (a, b) { return a.keyPath.length - b.keyPath.length; })[0]; + if (compoundIndex && this.db._maxKey !== maxString) { + var keyPathsInValidOrder = compoundIndex.keyPath.slice(0, keyPaths.length); + return this + .where(keyPathsInValidOrder) + .equals(keyPathsInValidOrder.map(function (kp) { return indexOrCrit[kp]; })); + } + if (!compoundIndex && debug) + console.warn("The query ".concat(JSON.stringify(indexOrCrit), " on ").concat(this.name, " would benefit from a ") + + "compound index [".concat(keyPaths.join('+'), "]")); + var idxByName = this.schema.idxByName; + var idb = this.db._deps.indexedDB; + function equals(a, b) { + return idb.cmp(a, b) === 0; + } + var _a = keyPaths.reduce(function (_a, keyPath) { + var prevIndex = _a[0], prevFilterFn = _a[1]; + var index = idxByName[keyPath]; + var value = indexOrCrit[keyPath]; + return [ + prevIndex || index, + prevIndex || !index ? + combine(prevFilterFn, index && index.multi ? + function (x) { + var prop = getByKeyPath(x, keyPath); + return isArray(prop) && prop.some(function (item) { return equals(value, item); }); + } : function (x) { return equals(value, getByKeyPath(x, keyPath)); }) + : prevFilterFn + ]; + }, [null, null]), idx = _a[0], filterFunction = _a[1]; + return idx ? + this.where(idx.name).equals(indexOrCrit[idx.keyPath]) + .filter(filterFunction) : + compoundIndex ? + this.filter(filterFunction) : + this.where(keyPaths).equals(''); + }; + Table.prototype.filter = function (filterFunction) { + return this.toCollection().and(filterFunction); + }; + Table.prototype.count = function (thenShortcut) { + return this.toCollection().count(thenShortcut); + }; + Table.prototype.offset = function (offset) { + return this.toCollection().offset(offset); + }; + Table.prototype.limit = function (numRows) { + return this.toCollection().limit(numRows); + }; + Table.prototype.each = function (callback) { + return this.toCollection().each(callback); + }; + Table.prototype.toArray = function (thenShortcut) { + return this.toCollection().toArray(thenShortcut); + }; + Table.prototype.toCollection = function () { + return new this.db.Collection(new this.db.WhereClause(this)); + }; + Table.prototype.orderBy = function (index) { + return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? + "[".concat(index.join('+'), "]") : + index)); + }; + Table.prototype.reverse = function () { + return this.toCollection().reverse(); + }; + Table.prototype.mapToClass = function (constructor) { + var _a = this, db = _a.db, tableName = _a.name; + this.schema.mappedClass = constructor; + if (constructor.prototype instanceof Entity) { + constructor = (function (_super) { + __extends(class_1, _super); + function class_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(class_1.prototype, "db", { + get: function () { return db; }, + enumerable: false, + configurable: true + }); + class_1.prototype.table = function () { return tableName; }; + return class_1; + }(constructor)); + } + var inheritedProps = new Set(); + for (var proto = constructor.prototype; proto; proto = getProto(proto)) { + Object.getOwnPropertyNames(proto).forEach(function (propName) { return inheritedProps.add(propName); }); + } + var readHook = function (obj) { + if (!obj) + return obj; + var res = Object.create(constructor.prototype); + for (var m in obj) + if (!inheritedProps.has(m)) + try { + res[m] = obj[m]; + } + catch (_) { } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + }; + Table.prototype.defineClass = function () { + function Class(content) { + extend(this, content); + } + return this.mapToClass(Class); + }; + Table.prototype.add = function (obj, key) { + var _this = this; + var _a = this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + var objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', function (trans) { + return _this.core.mutate({ trans: trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] }); + }).then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }) + .then(function (lastResult) { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + }; + Table.prototype.update = function (keyOrObject, modifications) { + if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { + var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === undefined) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + return this.where(":id").equals(key).modify(modifications); + } + else { + return this.where(":id").equals(keyOrObject).modify(modifications); + } + }; + Table.prototype.put = function (obj, key) { + var _this = this; + var _a = this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + var objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }) + .then(function (lastResult) { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + }; + Table.prototype.delete = function (key) { + var _this = this; + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'delete', keys: [key] }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; }); + }; + Table.prototype.clear = function () { + var _this = this; + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'deleteRange', range: AnyRange }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; }); + }; + Table.prototype.bulkGet = function (keys) { + var _this = this; + return this._trans('readonly', function (trans) { + return _this.core.getMany({ + keys: keys, + trans: trans + }).then(function (result) { return result.map(function (res) { return _this.hook.reading.fire(res); }); }); + }); + }; + Table.prototype.bulkAdd = function (objects, keysOrOptions, options) { + var _this = this; + var keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + var wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', function (trans) { + var _a = _this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + var numObjects = objects.length; + var objectsToAdd = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return _this.core.mutate({ trans: trans, type: 'add', keys: keys, values: objectsToAdd, wantResults: wantResults }) + .then(function (_a) { + var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures; + var result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError("".concat(_this.name, ".bulkAdd(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); + }); + }); + }; + Table.prototype.bulkPut = function (objects, keysOrOptions, options) { + var _this = this; + var keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + var wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', function (trans) { + var _a = _this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + var numObjects = objects.length; + var objectsToPut = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return _this.core.mutate({ trans: trans, type: 'put', keys: keys, values: objectsToPut, wantResults: wantResults }) + .then(function (_a) { + var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures; + var result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError("".concat(_this.name, ".bulkPut(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); + }); + }); + }; + Table.prototype.bulkUpdate = function (keysAndChanges) { + var _this = this; + var coreTable = this.core; + var keys = keysAndChanges.map(function (entry) { return entry.key; }); + var changeSpecs = keysAndChanges.map(function (entry) { return entry.changes; }); + var offsetMap = []; + return this._trans('readwrite', function (trans) { + return coreTable.getMany({ trans: trans, keys: keys, cache: 'clone' }).then(function (objs) { + var resultKeys = []; + var resultObjs = []; + keysAndChanges.forEach(function (_a, idx) { + var key = _a.key, changes = _a.changes; + var obj = objs[idx]; + if (obj) { + for (var _i = 0, _b = Object.keys(changes); _i < _b.length; _i++) { + var keyPath = _b[_i]; + var value = changes[keyPath]; + if (keyPath === _this.schema.primKey.keyPath) { + if (cmp(value, key) !== 0) { + throw new exceptions.Constraint("Cannot update primary key in bulkUpdate()"); + } + } + else { + setByKeyPath(obj, keyPath, value); + } + } + offsetMap.push(idx); + resultKeys.push(key); + resultObjs.push(obj); + } + }); + var numEntries = resultKeys.length; + return coreTable + .mutate({ + trans: trans, + type: 'put', + keys: resultKeys, + values: resultObjs, + updates: { + keys: keys, + changeSpecs: changeSpecs + } + }) + .then(function (_a) { + var numFailures = _a.numFailures, failures = _a.failures; + if (numFailures === 0) + return numEntries; + for (var _i = 0, _b = Object.keys(failures); _i < _b.length; _i++) { + var offset = _b[_i]; + var mappedOffset = offsetMap[Number(offset)]; + if (mappedOffset != null) { + var failure = failures[offset]; + delete failures[offset]; + failures[mappedOffset] = failure; + } + } + throw new BulkError("".concat(_this.name, ".bulkUpdate(): ").concat(numFailures, " of ").concat(numEntries, " operations failed"), failures); + }); + }); + }); + }; + Table.prototype.bulkDelete = function (keys) { + var _this = this; + var numKeys = keys.length; + return this._trans('readwrite', function (trans) { + return _this.core.mutate({ trans: trans, type: 'delete', keys: keys }); + }).then(function (_a) { + var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures; + if (numFailures === 0) + return lastResult; + throw new BulkError("".concat(_this.name, ".bulkDelete(): ").concat(numFailures, " of ").concat(numKeys, " operations failed"), failures); + }); + }; + return Table; + }()); + + function Events(ctx) { + var evs = {}; + var rv = function (eventName, subscriber) { + if (subscriber) { + var i = arguments.length, args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } + else if (typeof (eventName) === 'string') { + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i = 1, l = arguments.length; i < l; ++i) { + add(arguments[i]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === 'object') + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function (cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function (cb) { + context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + keys(cfg).forEach(function (eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } + else if (args === 'asap') { + var context = add(eventName, mirror, function fire() { + var i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + context.subscribers.forEach(function (fn) { + asap$1(function fireEvent() { + fn.apply(null, args); + }); + }); + }); + } + else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } + } + + function makeClassConstructor(prototype, constructor) { + derive(constructor).from({ prototype: prototype }); + return constructor; + } + + function createTableConstructor(db) { + return makeClassConstructor(Table.prototype, function Table(name, tableSchema, trans) { + this.db = db; + this._tx = trans; + this.name = name; + this.schema = tableSchema; + this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + }); + } + + function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && + (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); + } + function addFilter(ctx, fn) { + ctx.filter = combine(ctx.filter, fn); + } + function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory; + ctx.justLimit = isLimitFilter && !curr; + } + function addMatchFilter(ctx, fn) { + ctx.isMatch = combine(ctx.isMatch, fn); + } + function getIndexOrStore(ctx, coreSchema) { + if (ctx.isPrimKey) + return coreSchema.primaryKey; + var index = coreSchema.getIndexByKeyPath(ctx.index); + if (!index) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); + return index; + } + function openCursor(ctx, coreTable, trans) { + var index = getIndexOrStore(ctx, coreTable.schema); + return coreTable.openCursor({ + trans: trans, + values: !ctx.keysOnly, + reverse: ctx.dir === 'prev', + unique: !!ctx.unique, + query: { + index: index, + range: ctx.range + } + }); + } + function iter(ctx, fn, coreTrans, coreTable) { + var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper); + } + else { + var set_1 = {}; + var union = function (item, cursor, advance) { + if (!filter || filter(cursor, advance, function (result) { return cursor.stop(result); }, function (err) { return cursor.fail(err); })) { + var primaryKey = cursor.primaryKey; + var key = '' + primaryKey; + if (key === '[object ArrayBuffer]') + key = '' + new Uint8Array(primaryKey); + if (!hasOwn(set_1, key)) { + set_1[key] = true; + fn(item, cursor, advance); + } + } + }; + return Promise.all([ + ctx.or._iterate(union, coreTrans), + iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) + ]); + } + } + function iterate(cursorPromise, filter, fn, valueMapper) { + var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn; + var wrappedFn = wrap(mappedFn); + return cursorPromise.then(function (cursor) { + if (cursor) { + return cursor.start(function () { + var c = function () { return cursor.continue(); }; + if (!filter || filter(cursor, function (advancer) { return c = advancer; }, function (val) { cursor.stop(val); c = nop; }, function (e) { cursor.fail(e); c = nop; })) + wrappedFn(cursor.value, cursor, function (advancer) { return c = advancer; }); + c(); + }); + } + }); + } + + var PropModSymbol = Symbol(); + var PropModification = (function () { + function PropModification(spec) { + Object.assign(this, spec); + } + PropModification.prototype.execute = function (value) { + var _a; + if (this.add !== undefined) { + var term = this.add; + if (isArray(term)) { + return __spreadArray(__spreadArray([], (isArray(value) ? value : []), true), term, true).sort(); + } + if (typeof term === 'number') + return (Number(value) || 0) + term; + if (typeof term === 'bigint') { + try { + return BigInt(value) + term; + } + catch (_b) { + return BigInt(0) + term; + } + } + throw new TypeError("Invalid term ".concat(term)); + } + if (this.remove !== undefined) { + var subtrahend_1 = this.remove; + if (isArray(subtrahend_1)) { + return isArray(value) ? value.filter(function (item) { return !subtrahend_1.includes(item); }).sort() : []; + } + if (typeof subtrahend_1 === 'number') + return Number(value) - subtrahend_1; + if (typeof subtrahend_1 === 'bigint') { + try { + return BigInt(value) - subtrahend_1; + } + catch (_c) { + return BigInt(0) - subtrahend_1; + } + } + throw new TypeError("Invalid subtrahend ".concat(subtrahend_1)); + } + var prefixToReplace = (_a = this.replacePrefix) === null || _a === void 0 ? void 0 : _a[0]; + if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) { + return this.replacePrefix[1] + value.substring(prefixToReplace.length); + } + return value; + }; + return PropModification; + }()); + + var Collection = (function () { + function Collection() { + } + Collection.prototype._read = function (fn, cb) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readonly', fn).then(cb); + }; + Collection.prototype._write = function (fn) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readwrite', fn, "locked"); + }; + Collection.prototype._addAlgorithm = function (fn) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn); + }; + Collection.prototype._iterate = function (fn, coreTrans) { + return iter(this._ctx, fn, coreTrans, this._ctx.table.core); + }; + Collection.prototype.clone = function (props) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props) + extend(ctx, props); + rv._ctx = ctx; + return rv; + }; + Collection.prototype.raw = function () { + this._ctx.valueMapper = null; + return this; + }; + Collection.prototype.each = function (fn) { + var ctx = this._ctx; + return this._read(function (trans) { return iter(ctx, fn, trans, ctx.table.core); }); + }; + Collection.prototype.count = function (cb) { + var _this = this; + return this._read(function (trans) { + var ctx = _this._ctx; + var coreTable = ctx.table.core; + if (isPlainKeyRange(ctx, true)) { + return coreTable.count({ + trans: trans, + query: { + index: getIndexOrStore(ctx, coreTable.schema), + range: ctx.range + } + }).then(function (count) { return Math.min(count, ctx.limit); }); + } + else { + var count = 0; + return iter(ctx, function () { ++count; return false; }, trans, coreTable) + .then(function () { return count; }); + } + }).then(cb); + }; + Collection.prototype.sortBy = function (keyPath, cb) { + var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i) { + if (i) + return getval(obj[parts[i]], i - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a, b) { + var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function (a) { + return a.sort(sorter); + }).then(cb); + }; + Collection.prototype.toArray = function (cb) { + var _this = this; + return this._read(function (trans) { + var ctx = _this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + var valueMapper_1 = ctx.valueMapper; + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans: trans, + limit: ctx.limit, + values: true, + query: { + index: index, + range: ctx.range + } + }).then(function (_a) { + var result = _a.result; + return valueMapper_1 ? result.map(valueMapper_1) : result; + }); + } + else { + var a_1 = []; + return iter(ctx, function (item) { return a_1.push(item); }, trans, ctx.table.core).then(function () { return a_1; }); + } + }, cb); + }; + Collection.prototype.offset = function (offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function (cursor, advance) { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(function () { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } + else { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function () { return (--offsetLeft < 0); }; + }); + } + return this; + }; + Collection.prototype.limit = function (numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); + addReplayFilter(this._ctx, function () { + var rowsLeft = numRows; + return function (cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); + return rowsLeft >= 0; + }; + }, true); + return this; + }; + Collection.prototype.until = function (filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function (cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } + else { + return true; + } + }); + return this; + }; + Collection.prototype.first = function (cb) { + return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); + }; + Collection.prototype.last = function (cb) { + return this.reverse().first(cb); + }; + Collection.prototype.filter = function (filterFunction) { + addFilter(this._ctx, function (cursor) { + return filterFunction(cursor.value); + }); + addMatchFilter(this._ctx, filterFunction); + return this; + }; + Collection.prototype.and = function (filter) { + return this.filter(filter); + }; + Collection.prototype.or = function (indexName) { + return new this.db.WhereClause(this._ctx.table, indexName, this); + }; + Collection.prototype.reverse = function () { + this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + }; + Collection.prototype.desc = function () { + return this.reverse(); + }; + Collection.prototype.eachKey = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.key, cursor); }); + }; + Collection.prototype.eachUniqueKey = function (cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + }; + Collection.prototype.eachPrimaryKey = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); + }; + Collection.prototype.keys = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.key); + }).then(function () { + return a; + }).then(cb); + }; + Collection.prototype.primaryKeys = function (cb) { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + return this._read(function (trans) { + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans: trans, + values: false, + limit: ctx.limit, + query: { + index: index, + range: ctx.range + } + }); + }).then(function (_a) { + var result = _a.result; + return result; + }).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.primaryKey); + }).then(function () { + return a; + }).then(cb); + }; + Collection.prototype.uniqueKeys = function (cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + }; + Collection.prototype.firstKey = function (cb) { + return this.limit(1).keys(function (a) { return a[0]; }).then(cb); + }; + Collection.prototype.lastKey = function (cb) { + return this.reverse().firstKey(cb); + }; + Collection.prototype.distinct = function () { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; + var set = {}; + addFilter(this._ctx, function (cursor) { + var strKey = cursor.primaryKey.toString(); + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + }; + Collection.prototype.modify = function (changes) { + var _this = this; + var ctx = this._ctx; + return this._write(function (trans) { + var modifyer; + if (typeof changes === 'function') { + modifyer = changes; + } + else { + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function (item) { + var anythingModified = false; + for (var i = 0; i < numKeys; ++i) { + var keyPath = keyPaths[i]; + var val = changes[keyPath]; + var origVal = getByKeyPath(item, keyPath); + if (val instanceof PropModification) { + setByKeyPath(item, keyPath, val.execute(origVal)); + anythingModified = true; + } + else if (origVal !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + } + return anythingModified; + }; + } + var coreTable = ctx.table.core; + var _a = coreTable.schema.primaryKey, outbound = _a.outbound, extractKey = _a.extractKey; + var limit = _this.db._options.modifyChunkSize || 200; + var totalFailures = []; + var successCount = 0; + var failedKeys = []; + var applyMutateResult = function (expectedCount, res) { + var failures = res.failures, numFailures = res.numFailures; + successCount += expectedCount - numFailures; + for (var _i = 0, _a = keys(failures); _i < _a.length; _i++) { + var pos = _a[_i]; + totalFailures.push(failures[pos]); + } + }; + return _this.clone().primaryKeys().then(function (keys) { + var criteria = isPlainKeyRange(ctx) && + ctx.limit === Infinity && + (typeof changes !== 'function' || changes === deleteCallback) && { + index: ctx.index, + range: ctx.range + }; + var nextChunk = function (offset) { + var count = Math.min(limit, keys.length - offset); + return coreTable.getMany({ + trans: trans, + keys: keys.slice(offset, offset + count), + cache: "immutable" + }).then(function (values) { + var addValues = []; + var putValues = []; + var putKeys = outbound ? [] : null; + var deleteKeys = []; + for (var i = 0; i < count; ++i) { + var origValue = values[i]; + var ctx_1 = { + value: deepClone(origValue), + primKey: keys[offset + i] + }; + if (modifyer.call(ctx_1, ctx_1.value, ctx_1) !== false) { + if (ctx_1.value == null) { + deleteKeys.push(keys[offset + i]); + } + else if (!outbound && cmp(extractKey(origValue), extractKey(ctx_1.value)) !== 0) { + deleteKeys.push(keys[offset + i]); + addValues.push(ctx_1.value); + } + else { + putValues.push(ctx_1.value); + if (outbound) + putKeys.push(keys[offset + i]); + } + } + } + return Promise.resolve(addValues.length > 0 && + coreTable.mutate({ trans: trans, type: 'add', values: addValues }) + .then(function (res) { + for (var pos in res.failures) { + deleteKeys.splice(parseInt(pos), 1); + } + applyMutateResult(addValues.length, res); + })).then(function () { return (putValues.length > 0 || (criteria && typeof changes === 'object')) && + coreTable.mutate({ + trans: trans, + type: 'put', + keys: putKeys, + values: putValues, + criteria: criteria, + changeSpec: typeof changes !== 'function' + && changes, + isAdditionalChunk: offset > 0 + }).then(function (res) { return applyMutateResult(putValues.length, res); }); }).then(function () { return (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) && + coreTable.mutate({ + trans: trans, + type: 'delete', + keys: deleteKeys, + criteria: criteria, + isAdditionalChunk: offset > 0 + }).then(function (res) { return applyMutateResult(deleteKeys.length, res); }); }).then(function () { + return keys.length > offset + count && nextChunk(offset + limit); + }); + }); + }; + return nextChunk(0).then(function () { + if (totalFailures.length > 0) + throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); + return keys.length; + }); + }); + }); + }; + Collection.prototype.delete = function () { + var ctx = this._ctx, range = ctx.range; + if (isPlainKeyRange(ctx) && + (ctx.isPrimKey || range.type === 3 )) + { + return this._write(function (trans) { + var primaryKey = ctx.table.core.schema.primaryKey; + var coreRange = range; + return ctx.table.core.count({ trans: trans, query: { index: primaryKey, range: coreRange } }).then(function (count) { + return ctx.table.core.mutate({ trans: trans, type: 'deleteRange', range: coreRange }) + .then(function (_a) { + var failures = _a.failures; _a.lastResult; _a.results; var numFailures = _a.numFailures; + if (numFailures) + throw new ModifyError("Could not delete some values", Object.keys(failures).map(function (pos) { return failures[pos]; }), count - numFailures); + return count - numFailures; + }); + }); + }); + } + return this.modify(deleteCallback); + }; + return Collection; + }()); + var deleteCallback = function (value, ctx) { return ctx.value = null; }; + + function createCollectionConstructor(db) { + return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) { + this.db = db; + var keyRange = AnyRange, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } + catch (ex) { + error = ex; + } + var whereCtx = whereClause._ctx; + var table = whereCtx.table; + var readingHook = table.hook.reading.fire; + this._ctx = { + table: table, + index: whereCtx.index, + isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error: error, + or: whereCtx.or, + valueMapper: readingHook !== mirror ? readingHook : null + }; + }); + } + + function simpleCompare(a, b) { + return a < b ? -1 : a === b ? 0 : 1; + } + function simpleCompareReverse(a, b) { + return a > b ? -1 : a === b ? 0 : 1; + } + + function fail(collectionOrWhereClause, err, T) { + var collection = collectionOrWhereClause instanceof WhereClause ? + new collectionOrWhereClause.Collection(collectionOrWhereClause) : + collectionOrWhereClause; + collection._ctx.error = T ? new T(err) : new TypeError(err); + return collection; + } + function emptyCollection(whereClause) { + return new whereClause.Collection(whereClause, function () { return rangeEqual(""); }).limit(0); + } + function upperFactory(dir) { + return dir === "next" ? + function (s) { return s.toUpperCase(); } : + function (s) { return s.toLowerCase(); }; + } + function lowerFactory(dir) { + return dir === "next" ? + function (s) { return s.toLowerCase(); } : + function (s) { return s.toUpperCase(); }; + } + function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i = 0; i < length; ++i) { + var lwrKeyChar = lowerKey[i]; + if (lwrKeyChar !== lowerNeedle[i]) { + if (cmp(key[i], upperNeedle[i]) < 0) + return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); + if (cmp(key[i], lowerNeedle[i]) < 0) + return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp(key[i], lwrKeyChar) < 0) + llp = i; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); + } + function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every(function (s) { return typeof s === 'string'; })) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = (dir === "next" ? simpleCompare : simpleCompareReverse); + var needleBounds = needles.map(function (needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function (a, b) { + return compare(a.lower, b.lower); + }); + upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); + lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); + direction = dir; + nextKeySuffix = (dir === "next" ? "" : suffix); + } + initDirection("next"); + var c = new whereClause.Collection(whereClause, function () { return createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); }); + c._ondirectionchange = function (direction) { + initDirection(direction); + }; + var firstPossibleNeedle = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + if (typeof key !== 'string') + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } + else { + var lowestPossibleCasing = null; + for (var i = firstPossibleNeedle; i < needlesLen; ++i) { + var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); + } + else { + advance(resolve); + } + return false; + } + }); + return c; + } + function createRange(lower, upper, lowerOpen, upperOpen) { + return { + type: 2 , + lower: lower, + upper: upper, + lowerOpen: lowerOpen, + upperOpen: upperOpen + }; + } + function rangeEqual(value) { + return { + type: 1 , + lower: value, + upper: value + }; + } + + var WhereClause = (function () { + function WhereClause() { + } + Object.defineProperty(WhereClause.prototype, "Collection", { + get: function () { + return this._ctx.table.db.Collection; + }, + enumerable: false, + configurable: true + }); + WhereClause.prototype.between = function (lower, upper, includeLower, includeUpper) { + includeLower = includeLower !== false; + includeUpper = includeUpper === true; + try { + if ((this._cmp(lower, upper) > 0) || + (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) + return emptyCollection(this); + return new this.Collection(this, function () { return createRange(lower, upper, !includeLower, !includeUpper); }); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + }; + WhereClause.prototype.equals = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return rangeEqual(value); }); + }; + WhereClause.prototype.above = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(value, undefined, true); }); + }; + WhereClause.prototype.aboveOrEqual = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(value, undefined, false); }); + }; + WhereClause.prototype.below = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(undefined, value, false, true); }); + }; + WhereClause.prototype.belowOrEqual = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(undefined, value); }); + }; + WhereClause.prototype.startsWith = function (str) { + if (typeof str !== 'string') + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + }; + WhereClause.prototype.startsWithIgnoreCase = function (str) { + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString); + }; + WhereClause.prototype.equalsIgnoreCase = function (str) { + return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], ""); + }; + WhereClause.prototype.anyOfIgnoreCase = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, ""); + }; + WhereClause.prototype.startsWithAnyOfIgnoreCase = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.some(function (n) { return x.indexOf(n) === 0; }); }, set, maxString); + }; + WhereClause.prototype.anyOf = function () { + var _this = this; + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + var compare = this._cmp; + try { + set.sort(compare); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + var c = new this.Collection(this, function () { return createRange(set[0], set[set.length - 1]); }); + c._ondirectionchange = function (direction) { + compare = (direction === "next" ? + _this._ascending : + _this._descending); + set.sort(compare); + }; + var i = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (compare(key, set[i]) > 0) { + ++i; + if (i === set.length) { + advance(resolve); + return false; + } + } + if (compare(key, set[i]) === 0) { + return true; + } + else { + advance(function () { cursor.continue(set[i]); }); + return false; + } + }); + return c; + }; + WhereClause.prototype.notEqual = function (value) { + return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false }); + }; + WhereClause.prototype.noneOf = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new this.Collection(this); + try { + set.sort(this._ascending); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var ranges = set.reduce(function (res, val) { return res ? + res.concat([[res[res.length - 1][1], val]]) : + [[minKey, val]]; }, null); + ranges.push([set[set.length - 1], this.db._maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + }; + WhereClause.prototype.inAnyRange = function (ranges, options) { + var _this = this; + var cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every(function (range) { + return range[0] !== undefined && + range[1] !== undefined && + ascending(range[0], range[1]) <= 0; + })) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + var includeLowers = !options || options.includeLowers !== false; + var includeUppers = options && options.includeUppers === true; + function addRange(ranges, newRange) { + var i = 0, l = ranges.length; + for (; i < l; ++i) { + var range = ranges[i]; + if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i === l) + ranges.push(newRange); + return ranges; + } + var sortDirection = ascending; + function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } + var set; + try { + set = ranges.reduce(addRange, []); + set.sort(rangeSorter); + } + catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var rangePos = 0; + var keyIsBeyondCurrentEntry = includeUppers ? + function (key) { return ascending(key, set[rangePos][1]) > 0; } : + function (key) { return ascending(key, set[rangePos][1]) >= 0; }; + var keyIsBeforeCurrentEntry = includeLowers ? + function (key) { return descending(key, set[rangePos][0]) > 0; } : + function (key) { return descending(key, set[rangePos][0]) >= 0; }; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + var checkKey = keyIsBeyondCurrentEntry; + var c = new this.Collection(this, function () { return createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); }); + c._ondirectionchange = function (direction) { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } + else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (checkKey(key)) { + ++rangePos; + if (rangePos === set.length) { + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + return true; + } + else if (_this._cmp(key, set[rangePos][1]) === 0 || _this._cmp(key, set[rangePos][0]) === 0) { + return false; + } + else { + advance(function () { + if (sortDirection === ascending) + cursor.continue(set[rangePos][0]); + else + cursor.continue(set[rangePos][1]); + }); + return false; + } + }); + return c; + }; + WhereClause.prototype.startsWithAnyOf = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every(function (s) { return typeof s === 'string'; })) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map(function (str) { return [str, str + maxString]; })); + }; + return WhereClause; + }()); + + function createWhereClauseConstructor(db) { + return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) { + this.db = db; + this._ctx = { + table: table, + index: index === ":id" ? null : index, + or: orCollection + }; + this._cmp = this._ascending = cmp; + this._descending = function (a, b) { return cmp(b, a); }; + this._max = function (a, b) { return cmp(a, b) > 0 ? a : b; }; + this._min = function (a, b) { return cmp(a, b) < 0 ? a : b; }; + this._IDBKeyRange = db._deps.IDBKeyRange; + if (!this._IDBKeyRange) + throw new exceptions.MissingAPI(); + }); + } + + function eventRejectHandler(reject) { + return wrap(function (event) { + preventDefault(event); + reject(event.target.error); + return false; + }); + } + function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); + } + + var DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated'; + var STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1'; + var globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME); + + var Transaction = (function () { + function Transaction() { + } + Transaction.prototype._lock = function () { + assert(!PSD.global); + ++this._reculock; + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + }; + Transaction.prototype._unlock = function () { + assert(!PSD.global); + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } + catch (e) { } + } + } + return this; + }; + Transaction.prototype._locked = function () { + return this._reculock && PSD.lockOwnerFor !== this; + }; + Transaction.prototype.create = function (idbtrans) { + var _this = this; + if (!this.mode) + return this; + var idbdb = this.db.idbdb; + var dbOpenError = this.db._state.dbOpenError; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || + (this.db.core + ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) + : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); + idbtrans.onerror = wrap(function (ev) { + preventDefault(ev); + _this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap(function (ev) { + preventDefault(ev); + _this.active && _this._reject(new exceptions.Abort(idbtrans.error)); + _this.active = false; + _this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(function () { + _this.active = false; + _this._resolve(); + if ('mutatedParts' in idbtrans) { + globalEvents.storagemutated.fire(idbtrans["mutatedParts"]); + } + }); + return this; + }; + Transaction.prototype._promise = function (mode, fn, bWriteLock) { + var _this = this; + if (mode === 'readwrite' && this.mode !== 'readwrite') + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new DexiePromise(function (resolve, reject) { + _this._blockedFuncs.push([function () { + _this._promise(mode, fn, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } + else if (bWriteLock) { + return newScope(function () { + var p = new DexiePromise(function (resolve, reject) { + _this._lock(); + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p.finally(function () { return _this._unlock(); }); + p._lib = true; + return p; + }); + } + else { + var p = new DexiePromise(function (resolve, reject) { + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p._lib = true; + return p; + } + }; + Transaction.prototype._root = function () { + return this.parent ? this.parent._root() : this; + }; + Transaction.prototype.waitFor = function (promiseLike) { + var root = this._root(); + var promise = DexiePromise.resolve(promiseLike); + if (root._waitingFor) { + root._waitingFor = root._waitingFor.then(function () { return promise; }); + } + else { + root._waitingFor = promise; + root._waitingQueue = []; + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; + while (root._waitingQueue.length) + (root._waitingQueue.shift())(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + }()); + } + var currentWaitPromise = root._waitingFor; + return new DexiePromise(function (resolve, reject) { + promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () { + if (root._waitingFor === currentWaitPromise) { + root._waitingFor = null; + } + }); + }); + }; + Transaction.prototype.abort = function () { + if (this.active) { + this.active = false; + if (this.idbtrans) + this.idbtrans.abort(); + this._reject(new exceptions.Abort()); + } + }; + Transaction.prototype.table = function (tableName) { + var memoizedTables = (this._memoizedTables || (this._memoizedTables = {})); + if (hasOwn(memoizedTables, tableName)) + return memoizedTables[tableName]; + var tableSchema = this.schema[tableName]; + if (!tableSchema) { + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + } + var transactionBoundTable = new this.db.Table(tableName, tableSchema, this); + transactionBoundTable.core = this.db.core.table(tableName); + memoizedTables[tableName] = transactionBoundTable; + return transactionBoundTable; + }; + return Transaction; + }()); + + function createTransactionConstructor(db) { + return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) { + var _this = this; + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.schema = dbschema; + this.chromeTransactionDurability = chromeTransactionDurability; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; + this._completion = new DexiePromise(function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + }); + this._completion.then(function () { + _this.active = false; + _this.on.complete.fire(); + }, function (e) { + var wasActive = _this.active; + _this.active = false; + _this.on.error.fire(e); + _this.parent ? + _this.parent._reject(e) : + wasActive && _this.idbtrans && _this.idbtrans.abort(); + return rejection(e); + }); + }); + } + + function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) { + return { + name: name, + keyPath: keyPath, + unique: unique, + multi: multi, + auto: auto, + compound: compound, + src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath) + }; + } + function nameFromKeyPath(keyPath) { + return typeof keyPath === 'string' ? + keyPath : + keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : ""; + } + + function createTableSchema(name, primKey, indexes) { + return { + name: name, + primKey: primKey, + indexes: indexes, + mappedClass: null, + idxByName: arrayToObject(indexes, function (index) { return [index.name, index]; }) + }; + } + + function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; + } + var getMaxKey = function (IdbKeyRange) { + try { + IdbKeyRange.only([[]]); + getMaxKey = function () { return [[]]; }; + return [[]]; + } + catch (e) { + getMaxKey = function () { return maxString; }; + return maxString; + } + }; + + function getKeyExtractor(keyPath) { + if (keyPath == null) { + return function () { return undefined; }; + } + else if (typeof keyPath === 'string') { + return getSinglePathKeyExtractor(keyPath); + } + else { + return function (obj) { return getByKeyPath(obj, keyPath); }; + } + } + function getSinglePathKeyExtractor(keyPath) { + var split = keyPath.split('.'); + if (split.length === 1) { + return function (obj) { return obj[keyPath]; }; + } + else { + return function (obj) { return getByKeyPath(obj, keyPath); }; + } + } + + function arrayify(arrayLike) { + return [].slice.call(arrayLike); + } + var _id_counter = 0; + function getKeyPathAlias(keyPath) { + return keyPath == null ? + ":id" : + typeof keyPath === 'string' ? + keyPath : + "[".concat(keyPath.join('+'), "]"); + } + function createDBCore(db, IdbKeyRange, tmpTrans) { + function extractSchema(db, trans) { + var tables = arrayify(db.objectStoreNames); + return { + schema: { + name: db.name, + tables: tables.map(function (table) { return trans.objectStore(table); }).map(function (store) { + var keyPath = store.keyPath, autoIncrement = store.autoIncrement; + var compound = isArray(keyPath); + var outbound = keyPath == null; + var indexByKeyPath = {}; + var result = { + name: store.name, + primaryKey: { + name: null, + isPrimaryKey: true, + outbound: outbound, + compound: compound, + keyPath: keyPath, + autoIncrement: autoIncrement, + unique: true, + extractKey: getKeyExtractor(keyPath) + }, + indexes: arrayify(store.indexNames).map(function (indexName) { return store.index(indexName); }) + .map(function (index) { + var name = index.name, unique = index.unique, multiEntry = index.multiEntry, keyPath = index.keyPath; + var compound = isArray(keyPath); + var result = { + name: name, + compound: compound, + keyPath: keyPath, + unique: unique, + multiEntry: multiEntry, + extractKey: getKeyExtractor(keyPath) + }; + indexByKeyPath[getKeyPathAlias(keyPath)] = result; + return result; + }), + getIndexByKeyPath: function (keyPath) { return indexByKeyPath[getKeyPathAlias(keyPath)]; } + }; + indexByKeyPath[":id"] = result.primaryKey; + if (keyPath != null) { + indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; + } + return result; + }) + }, + hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) && + !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) + }; + } + function makeIDBKeyRange(range) { + if (range.type === 3 ) + return null; + if (range.type === 4 ) + throw new Error("Cannot convert never type to IDBKeyRange"); + var lower = range.lower, upper = range.upper, lowerOpen = range.lowerOpen, upperOpen = range.upperOpen; + var idbRange = lower === undefined ? + upper === undefined ? + null : + IdbKeyRange.upperBound(upper, !!upperOpen) : + upper === undefined ? + IdbKeyRange.lowerBound(lower, !!lowerOpen) : + IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); + return idbRange; + } + function createDbCoreTable(tableSchema) { + var tableName = tableSchema.name; + function mutate(_a) { + var trans = _a.trans, type = _a.type, keys = _a.keys, values = _a.values, range = _a.range; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var outbound = store.keyPath == null; + var isAddOrPut = type === "put" || type === "add"; + if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange') + throw new Error("Invalid operation type: " + type); + var length = (keys || values || { length: 1 }).length; + if (keys && values && keys.length !== values.length) { + throw new Error("Given keys array must have same length as given values array."); + } + if (length === 0) + return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined }); + var req; + var reqs = []; + var failures = []; + var numFailures = 0; + var errorHandler = function (event) { + ++numFailures; + preventDefault(event); + }; + if (type === 'deleteRange') { + if (range.type === 4 ) + return resolve({ numFailures: numFailures, failures: failures, results: [], lastResult: undefined }); + if (range.type === 3 ) + reqs.push(req = store.clear()); + else + reqs.push(req = store.delete(makeIDBKeyRange(range))); + } + else { + var _a = isAddOrPut ? + outbound ? + [values, keys] : + [values, null] : + [keys, null], args1 = _a[0], args2 = _a[1]; + if (isAddOrPut) { + for (var i = 0; i < length; ++i) { + reqs.push(req = (args2 && args2[i] !== undefined ? + store[type](args1[i], args2[i]) : + store[type](args1[i]))); + req.onerror = errorHandler; + } + } + else { + for (var i = 0; i < length; ++i) { + reqs.push(req = store[type](args1[i])); + req.onerror = errorHandler; + } + } + } + var done = function (event) { + var lastResult = event.target.result; + reqs.forEach(function (req, i) { return req.error != null && (failures[i] = req.error); }); + resolve({ + numFailures: numFailures, + failures: failures, + results: type === "delete" ? keys : reqs.map(function (req) { return req.result; }), + lastResult: lastResult + }); + }; + req.onerror = function (event) { + errorHandler(event); + done(event); + }; + req.onsuccess = done; + }); + } + function openCursor(_a) { + var trans = _a.trans, values = _a.values, query = _a.query, reverse = _a.reverse, unique = _a.unique; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var index = query.index, range = query.range; + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? + store : + store.index(index.name); + var direction = reverse ? + unique ? + "prevunique" : + "prev" : + unique ? + "nextunique" : + "next"; + var req = values || !('openKeyCursor' in source) ? + source.openCursor(makeIDBKeyRange(range), direction) : + source.openKeyCursor(makeIDBKeyRange(range), direction); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(function (ev) { + var cursor = req.result; + if (!cursor) { + resolve(null); + return; + } + cursor.___id = ++_id_counter; + cursor.done = false; + var _cursorContinue = cursor.continue.bind(cursor); + var _cursorContinuePrimaryKey = cursor.continuePrimaryKey; + if (_cursorContinuePrimaryKey) + _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); + var _cursorAdvance = cursor.advance.bind(cursor); + var doThrowCursorIsNotStarted = function () { throw new Error("Cursor not started"); }; + var doThrowCursorIsStopped = function () { throw new Error("Cursor not stopped"); }; + cursor.trans = trans; + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; + cursor.fail = wrap(reject); + cursor.next = function () { + var _this = this; + var gotOne = 1; + return this.start(function () { return gotOne-- ? _this.continue() : _this.stop(); }).then(function () { return _this; }); + }; + cursor.start = function (callback) { + var iterationPromise = new Promise(function (resolveIteration, rejectIteration) { + resolveIteration = wrap(resolveIteration); + req.onerror = eventRejectHandler(rejectIteration); + cursor.fail = rejectIteration; + cursor.stop = function (value) { + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; + resolveIteration(value); + }; + }); + var guardedCallback = function () { + if (req.result) { + try { + callback(); + } + catch (err) { + cursor.fail(err); + } + } + else { + cursor.done = true; + cursor.start = function () { throw new Error("Cursor behind last entry"); }; + cursor.stop(); + } + }; + req.onsuccess = wrap(function (ev) { + req.onsuccess = guardedCallback; + guardedCallback(); + }); + cursor.continue = _cursorContinue; + cursor.continuePrimaryKey = _cursorContinuePrimaryKey; + cursor.advance = _cursorAdvance; + guardedCallback(); + return iterationPromise; + }; + resolve(cursor); + }, reject); + }); + } + function query(hasGetAll) { + return function (request) { + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var trans = request.trans, values = request.values, limit = request.limit, query = request.query; + var nonInfinitLimit = limit === Infinity ? undefined : limit; + var index = query.index, range = query.range; + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? store : store.index(index.name); + var idbKeyRange = makeIDBKeyRange(range); + if (limit === 0) + return resolve({ result: [] }); + if (hasGetAll) { + var req = values ? + source.getAll(idbKeyRange, nonInfinitLimit) : + source.getAllKeys(idbKeyRange, nonInfinitLimit); + req.onsuccess = function (event) { return resolve({ result: event.target.result }); }; + req.onerror = eventRejectHandler(reject); + } + else { + var count_1 = 0; + var req_1 = values || !('openKeyCursor' in source) ? + source.openCursor(idbKeyRange) : + source.openKeyCursor(idbKeyRange); + var result_1 = []; + req_1.onsuccess = function (event) { + var cursor = req_1.result; + if (!cursor) + return resolve({ result: result_1 }); + result_1.push(values ? cursor.value : cursor.primaryKey); + if (++count_1 === limit) + return resolve({ result: result_1 }); + cursor.continue(); + }; + req_1.onerror = eventRejectHandler(reject); + } + }); + }; + } + return { + name: tableName, + schema: tableSchema, + mutate: mutate, + getMany: function (_a) { + var trans = _a.trans, keys = _a.keys; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var length = keys.length; + var result = new Array(length); + var keyCount = 0; + var callbackCount = 0; + var req; + var successHandler = function (event) { + var req = event.target; + if ((result[req._pos] = req.result) != null) + ; + if (++callbackCount === keyCount) + resolve(result); + }; + var errorHandler = eventRejectHandler(reject); + for (var i = 0; i < length; ++i) { + var key = keys[i]; + if (key != null) { + req = store.get(keys[i]); + req._pos = i; + req.onsuccess = successHandler; + req.onerror = errorHandler; + ++keyCount; + } + } + if (keyCount === 0) + resolve(result); + }); + }, + get: function (_a) { + var trans = _a.trans, key = _a.key; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var req = store.get(key); + req.onsuccess = function (event) { return resolve(event.target.result); }; + req.onerror = eventRejectHandler(reject); + }); + }, + query: query(hasGetAll), + openCursor: openCursor, + count: function (_a) { + var query = _a.query, trans = _a.trans; + var index = query.index, range = query.range; + return new Promise(function (resolve, reject) { + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? store : store.index(index.name); + var idbKeyRange = makeIDBKeyRange(range); + var req = idbKeyRange ? source.count(idbKeyRange) : source.count(); + req.onsuccess = wrap(function (ev) { return resolve(ev.target.result); }); + req.onerror = eventRejectHandler(reject); + }); + } + }; + } + var _a = extractSchema(db, tmpTrans), schema = _a.schema, hasGetAll = _a.hasGetAll; + var tables = schema.tables.map(function (tableSchema) { return createDbCoreTable(tableSchema); }); + var tableMap = {}; + tables.forEach(function (table) { return tableMap[table.name] = table; }); + return { + stack: "dbcore", + transaction: db.transaction.bind(db), + table: function (name) { + var result = tableMap[name]; + if (!result) + throw new Error("Table '".concat(name, "' not found")); + return tableMap[name]; + }, + MIN_KEY: -Infinity, + MAX_KEY: getMaxKey(IdbKeyRange), + schema: schema + }; + } + + function createMiddlewareStack(stackImpl, middlewares) { + return middlewares.reduce(function (down, _a) { + var create = _a.create; + return (__assign(__assign({}, down), create(down))); + }, stackImpl); + } + function createMiddlewareStacks(middlewares, idbdb, _a, tmpTrans) { + var IDBKeyRange = _a.IDBKeyRange; _a.indexedDB; + var dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); + return { + dbcore: dbcore + }; + } + function generateMiddlewareStacks(db, tmpTrans) { + var idbdb = tmpTrans.db; + var stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans); + db.core = stacks.dbcore; + db.tables.forEach(function (table) { + var tableName = table.name; + if (db.core.schema.tables.some(function (tbl) { return tbl.name === tableName; })) { + table.core = db.core.table(tableName); + if (db[tableName] instanceof db.Table) { + db[tableName].core = table.core; + } + } + }); + } + + function setApiOnPlace(db, objs, tableNames, dbschema) { + tableNames.forEach(function (tableName) { + var schema = dbschema[tableName]; + objs.forEach(function (obj) { + var propDesc = getPropertyDescriptor(obj, tableName); + if (!propDesc || ("value" in propDesc && propDesc.value === undefined)) { + if (obj === db.Transaction.prototype || obj instanceof db.Transaction) { + setProp(obj, tableName, { + get: function () { return this.table(tableName); }, + set: function (value) { + defineProperty(this, tableName, { value: value, writable: true, configurable: true, enumerable: true }); + } + }); + } + else { + obj[tableName] = new db.Table(tableName, schema); + } + } + }); + }); + } + function removeTablesApi(db, objs) { + objs.forEach(function (obj) { + for (var key in obj) { + if (obj[key] instanceof db.Table) + delete obj[key]; + } + }); + } + function lowerVersionFirst(a, b) { + return a._cfg.version - b._cfg.version; + } + function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) { + var globalSchema = db._dbSchema; + if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) { + globalSchema.$meta = createTableSchema("$meta", parseIndexSyntax("")[0], []); + db._storeNames.push('$meta'); + } + var trans = db._createTransaction('readwrite', db._storeNames, globalSchema); + trans.create(idbUpgradeTrans); + trans._completion.catch(reject); + var rejectTransaction = trans._reject.bind(trans); + var transless = PSD.transless || PSD; + newScope(function () { + PSD.trans = trans; + PSD.transless = transless; + if (oldVersion === 0) { + keys(globalSchema).forEach(function (tableName) { + createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + generateMiddlewareStacks(db, idbUpgradeTrans); + DexiePromise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction); + } + else { + generateMiddlewareStacks(db, idbUpgradeTrans); + return getExistingVersion(db, trans, oldVersion) + .then(function (oldVersion) { return updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans); }) + .catch(rejectTransaction); + } + }); + } + function patchCurrentVersion(db, idbUpgradeTrans) { + createMissingTables(db._dbSchema, idbUpgradeTrans); + if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) { + idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version'); + } + var globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans); + var diff = getSchemaDiff(globalSchema, db._dbSchema); + var _loop_1 = function (tableChange) { + if (tableChange.change.length || tableChange.recreate) { + console.warn("Unable to patch indexes of table ".concat(tableChange.name, " because it has changes on the type of index or primary key.")); + return { value: void 0 }; + } + var store = idbUpgradeTrans.objectStore(tableChange.name); + tableChange.add.forEach(function (idx) { + if (debug) + console.debug("Dexie upgrade patch: Creating missing index ".concat(tableChange.name, ".").concat(idx.src)); + addIndex(store, idx); + }); + }; + for (var _i = 0, _a = diff.change; _i < _a.length; _i++) { + var tableChange = _a[_i]; + var state_1 = _loop_1(tableChange); + if (typeof state_1 === "object") + return state_1.value; + } + } + function getExistingVersion(db, trans, oldVersion) { + if (trans.storeNames.includes('$meta')) { + return trans.table('$meta').get('version').then(function (metaVersion) { + return metaVersion != null ? metaVersion : oldVersion; + }); + } + else { + return DexiePromise.resolve(oldVersion); + } + } + function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) { + var queue = []; + var versions = db._versions; + var globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + var versToRun = versions.filter(function (v) { return v._cfg.version >= oldVersion; }); + if (versToRun.length === 0) { + return DexiePromise.resolve(); + } + versToRun.forEach(function (version) { + queue.push(function () { + var oldSchema = globalSchema; + var newSchema = version._cfg.dbschema; + adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans); + adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans); + globalSchema = db._dbSchema = newSchema; + var diff = getSchemaDiff(oldSchema, newSchema); + diff.add.forEach(function (tuple) { + createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + diff.change.forEach(function (change) { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } + else { + var store_1 = idbUpgradeTrans.objectStore(change.name); + change.add.forEach(function (idx) { return addIndex(store_1, idx); }); + change.change.forEach(function (idx) { + store_1.deleteIndex(idx.name); + addIndex(store_1, idx); + }); + change.del.forEach(function (idxName) { return store_1.deleteIndex(idxName); }); + } + }); + var contentUpgrade = version._cfg.contentUpgrade; + if (contentUpgrade && version._cfg.version > oldVersion) { + generateMiddlewareStacks(db, idbUpgradeTrans); + trans._memoizedTables = {}; + var upgradeSchema_1 = shallowClone(newSchema); + diff.del.forEach(function (table) { + upgradeSchema_1[table] = oldSchema[table]; + }); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema_1), upgradeSchema_1); + trans.schema = upgradeSchema_1; + var contentUpgradeIsAsync_1 = isAsyncFunction(contentUpgrade); + if (contentUpgradeIsAsync_1) { + incrementExpectedAwaits(); + } + var returnValue_1; + var promiseFollowed = DexiePromise.follow(function () { + returnValue_1 = contentUpgrade(trans); + if (returnValue_1) { + if (contentUpgradeIsAsync_1) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue_1.then(decrementor, decrementor); + } + } + }); + return (returnValue_1 && typeof returnValue_1.then === 'function' ? + DexiePromise.resolve(returnValue_1) : promiseFollowed.then(function () { return returnValue_1; })); + } + }); + queue.push(function (idbtrans) { + var newSchema = version._cfg.dbschema; + deleteRemovedTables(newSchema, idbtrans); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema); + trans.schema = db._dbSchema; + }); + queue.push(function (idbtrans) { + if (db.idbdb.objectStoreNames.contains('$meta')) { + if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) { + db.idbdb.deleteObjectStore('$meta'); + delete db._dbSchema.$meta; + db._storeNames = db._storeNames.filter(function (name) { return name !== '$meta'; }); + } + else { + idbtrans.objectStore('$meta').put(version._cfg.version, 'version'); + } + } + }); + }); + function runQueue() { + return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : + DexiePromise.resolve(); + } + return runQueue().then(function () { + createMissingTables(globalSchema, idbUpgradeTrans); + }); + } + function getSchemaDiff(oldSchema, newSchema) { + var diff = { + del: [], + add: [], + change: [] + }; + var table; + for (table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + var oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } + else { + var change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if (( + '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) || + (oldDef.primKey.auto !== newDef.primKey.auto)) { + change.recreate = true; + diff.change.push(change); + } + else { + var oldIndexes = oldDef.idxByName; + var newIndexes = newDef.idxByName; + var idxName = void 0; + for (idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; + } + function createTable(idbtrans, tableName, primKey, indexes) { + var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? + { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : + { autoIncrement: primKey.auto }); + indexes.forEach(function (idx) { return addIndex(store, idx); }); + return store; + } + function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach(function (tableName) { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + if (debug) + console.debug('Dexie: Creating missing table', tableName); + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); + } + function deleteRemovedTables(newSchema, idbtrans) { + [].slice.call(idbtrans.db.objectStoreNames).forEach(function (storeName) { + return newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName); + }); + } + function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); + } + function buildGlobalSchema(db, idbdb, tmpTrans) { + var globalSchema = {}; + var dbStoreNames = slice(idbdb.objectStoreNames, 0); + dbStoreNames.forEach(function (storeName) { + var store = tmpTrans.objectStore(storeName); + var keyPath = store.keyPath; + var primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", true, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); + var indexes = []; + for (var j = 0; j < store.indexNames.length; ++j) { + var idbindex = store.index(store.indexNames[j]); + keyPath = idbindex.keyPath; + var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); + indexes.push(index); + } + globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); + }); + return globalSchema; + } + function readGlobalSchema(db, idbdb, tmpTrans) { + db.verno = idbdb.version / 10; + var globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans); + db._storeNames = slice(idbdb.objectStoreNames, 0); + setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema); + } + function verifyInstalledSchema(db, tmpTrans) { + var installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans); + var diff = getSchemaDiff(installedSchema, db._dbSchema); + return !(diff.add.length || diff.change.some(function (ch) { return ch.add.length || ch.change.length; })); + } + function adjustToExistingIndexNames(db, schema, idbtrans) { + var storeNames = idbtrans.db.objectStoreNames; + for (var i = 0; i < storeNames.length; ++i) { + var storeName = storeNames[i]; + var store = idbtrans.objectStore(storeName); + db._hasGetAll = 'getAll' in store; + for (var j = 0; j < store.indexNames.length; ++j) { + var indexName = store.indexNames[j]; + var keyPath = store.index(indexName).keyPath; + var dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; + if (schema[storeName]) { + var indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) { + indexSpec.name = indexName; + delete schema[storeName].idxByName[dexieName]; + schema[storeName].idxByName[indexName] = indexSpec; + } + } + } + } + if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + db._hasGetAll = false; + } + } + function parseIndexSyntax(primKeyAndIndexes) { + return primKeyAndIndexes.split(',').map(function (index, indexNum) { + index = index.trim(); + var name = index.replace(/([&*]|\+\+)/g, ""); + var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; + return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0); + }); + } + + var Version = (function () { + function Version() { + } + Version.prototype._parseStoresSpec = function (stores, outSchema) { + keys(stores).forEach(function (tableName) { + if (stores[tableName] !== null) { + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + primKey.unique = true; + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + indexes.forEach(function (idx) { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + }); + outSchema[tableName] = createTableSchema(tableName, primKey, indexes); + } + }); + }; + Version.prototype.stores = function (stores) { + var db = this.db; + this._cfg.storesSource = this._cfg.storesSource ? + extend(this._cfg.storesSource, stores) : + stores; + var versions = db._versions; + var storesSpec = {}; + var dbschema = {}; + versions.forEach(function (version) { + extend(storesSpec, version._cfg.storesSource); + dbschema = (version._cfg.dbschema = {}); + version._parseStoresSpec(storesSpec, dbschema); + }); + db._dbSchema = dbschema; + removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]); + setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + db._storeNames = keys(dbschema); + return this; + }; + Version.prototype.upgrade = function (upgradeFunction) { + this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); + return this; + }; + return Version; + }()); + + function createVersionConstructor(db) { + return makeClassConstructor(Version.prototype, function Version(versionNumber) { + this.db = db; + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + }); + } + + function getDbNamesTable(indexedDB, IDBKeyRange) { + var dbNamesDB = indexedDB["_dbNamesDB"]; + if (!dbNamesDB) { + dbNamesDB = indexedDB["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { + addons: [], + indexedDB: indexedDB, + IDBKeyRange: IDBKeyRange, + }); + dbNamesDB.version(1).stores({ dbnames: "name" }); + } + return dbNamesDB.table("dbnames"); + } + function hasDatabasesNative(indexedDB) { + return indexedDB && typeof indexedDB.databases === "function"; + } + function getDatabaseNames(_a) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + return hasDatabasesNative(indexedDB) + ? Promise.resolve(indexedDB.databases()).then(function (infos) { + return infos + .map(function (info) { return info.name; }) + .filter(function (name) { return name !== DBNAMES_DB; }); + }) + : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys(); + } + function _onDatabaseCreated(_a, name) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).put({ name: name }).catch(nop); + } + function _onDatabaseDeleted(_a, name) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop); + } + + function vip(fn) { + return newScope(function () { + PSD.letThrough = true; + return fn(); + }); + } + + function idbReady() { + var isSafari = !navigator.userAgentData && + /Safari\//.test(navigator.userAgent) && + !/Chrom(e|ium)\//.test(navigator.userAgent); + if (!isSafari || !indexedDB.databases) + return Promise.resolve(); + var intervalId; + return new Promise(function (resolve) { + var tryIdb = function () { return indexedDB.databases().finally(resolve); }; + intervalId = setInterval(tryIdb, 100); + tryIdb(); + }).finally(function () { return clearInterval(intervalId); }); + } + + var _a; + function isEmptyRange(node) { + return !("from" in node); + } + var RangeSet = function (fromOrTree, to) { + if (this) { + extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 }); + } + else { + var rv = new RangeSet(); + if (fromOrTree && ("d" in fromOrTree)) { + extend(rv, fromOrTree); + } + return rv; + } + }; + props(RangeSet.prototype, (_a = { + add: function (rangeSet) { + mergeRanges(this, rangeSet); + return this; + }, + addKey: function (key) { + addRange(this, key, key); + return this; + }, + addKeys: function (keys) { + var _this = this; + keys.forEach(function (key) { return addRange(_this, key, key); }); + return this; + } + }, + _a[iteratorSymbol] = function () { + return getRangeSetIterator(this); + }, + _a)); + function addRange(target, from, to) { + var diff = cmp(from, to); + if (isNaN(diff)) + return; + if (diff > 0) + throw RangeError(); + if (isEmptyRange(target)) + return extend(target, { from: from, to: to, d: 1 }); + var left = target.l; + var right = target.r; + if (cmp(to, target.from) < 0) { + left + ? addRange(left, from, to) + : (target.l = { from: from, to: to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.to) > 0) { + right + ? addRange(right, from, to) + : (target.r = { from: from, to: to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.from) < 0) { + target.from = from; + target.l = null; + target.d = right ? right.d + 1 : 1; + } + if (cmp(to, target.to) > 0) { + target.to = to; + target.r = null; + target.d = target.l ? target.l.d + 1 : 1; + } + var rightWasCutOff = !target.r; + if (left && !target.l) { + mergeRanges(target, left); + } + if (right && rightWasCutOff) { + mergeRanges(target, right); + } + } + function mergeRanges(target, newSet) { + function _addRangeSet(target, _a) { + var from = _a.from, to = _a.to, l = _a.l, r = _a.r; + addRange(target, from, to); + if (l) + _addRangeSet(target, l); + if (r) + _addRangeSet(target, r); + } + if (!isEmptyRange(newSet)) + _addRangeSet(target, newSet); + } + function rangesOverlap(rangeSet1, rangeSet2) { + var i1 = getRangeSetIterator(rangeSet2); + var nextResult1 = i1.next(); + if (nextResult1.done) + return false; + var a = nextResult1.value; + var i2 = getRangeSetIterator(rangeSet1); + var nextResult2 = i2.next(a.from); + var b = nextResult2.value; + while (!nextResult1.done && !nextResult2.done) { + if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0) + return true; + cmp(a.from, b.from) < 0 + ? (a = (nextResult1 = i1.next(b.from)).value) + : (b = (nextResult2 = i2.next(a.from)).value); + } + return false; + } + function getRangeSetIterator(node) { + var state = isEmptyRange(node) ? null : { s: 0, n: node }; + return { + next: function (key) { + var keyProvided = arguments.length > 0; + while (state) { + switch (state.s) { + case 0: + state.s = 1; + if (keyProvided) { + while (state.n.l && cmp(key, state.n.from) < 0) + state = { up: state, n: state.n.l, s: 1 }; + } + else { + while (state.n.l) + state = { up: state, n: state.n.l, s: 1 }; + } + case 1: + state.s = 2; + if (!keyProvided || cmp(key, state.n.to) <= 0) + return { value: state.n, done: false }; + case 2: + if (state.n.r) { + state.s = 3; + state = { up: state, n: state.n.r, s: 0 }; + continue; + } + case 3: + state = state.up; + } + } + return { done: true }; + }, + }; + } + function rebalance(target) { + var _a, _b; + var diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0); + var r = diff > 1 ? "r" : diff < -1 ? "l" : ""; + if (r) { + var l = r === "r" ? "l" : "r"; + var rootClone = __assign({}, target); + var oldRootRight = target[r]; + target.from = oldRootRight.from; + target.to = oldRootRight.to; + target[r] = oldRootRight[r]; + rootClone[r] = oldRootRight[l]; + target[l] = rootClone; + rootClone.d = computeDepth(rootClone); + } + target.d = computeDepth(target); + } + function computeDepth(_a) { + var r = _a.r, l = _a.l; + return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1; + } + + function extendObservabilitySet(target, newSet) { + keys(newSet).forEach(function (part) { + if (target[part]) + mergeRanges(target[part], newSet[part]); + else + target[part] = cloneSimpleObjectTree(newSet[part]); + }); + return target; + } + + function obsSetsOverlap(os1, os2) { + return os1.all || os2.all || Object.keys(os1).some(function (key) { return os2[key] && rangesOverlap(os2[key], os1[key]); }); + } + + var cache = {}; + + var unsignaledParts = {}; + var isTaskEnqueued = false; + function signalSubscribersLazily(part, optimistic) { + extendObservabilitySet(unsignaledParts, part); + if (!isTaskEnqueued) { + isTaskEnqueued = true; + setTimeout(function () { + isTaskEnqueued = false; + var parts = unsignaledParts; + unsignaledParts = {}; + signalSubscribersNow(parts, false); + }, 0); + } + } + function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries) { + if (deleteAffectedCacheEntries === void 0) { deleteAffectedCacheEntries = false; } + var queriesToSignal = new Set(); + if (updatedParts.all) { + for (var _i = 0, _a = Object.values(cache); _i < _a.length; _i++) { + var tblCache = _a[_i]; + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + else { + for (var key in updatedParts) { + var parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key); + if (parts) { + var dbName = parts[1], tableName = parts[2]; + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (tblCache) + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + } + queriesToSignal.forEach(function (requery) { return requery(); }); + } + function collectTableSubscribers(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) { + var updatedEntryLists = []; + for (var _i = 0, _a = Object.entries(tblCache.queries.query); _i < _a.length; _i++) { + var _b = _a[_i], indexName = _b[0], entries = _b[1]; + var filteredEntries = []; + for (var _c = 0, entries_1 = entries; _c < entries_1.length; _c++) { + var entry = entries_1[_c]; + if (obsSetsOverlap(updatedParts, entry.obsSet)) { + entry.subscribers.forEach(function (requery) { return outQueriesToSignal.add(requery); }); + } + else if (deleteAffectedCacheEntries) { + filteredEntries.push(entry); + } + } + if (deleteAffectedCacheEntries) + updatedEntryLists.push([indexName, filteredEntries]); + } + if (deleteAffectedCacheEntries) { + for (var _d = 0, updatedEntryLists_1 = updatedEntryLists; _d < updatedEntryLists_1.length; _d++) { + var _e = updatedEntryLists_1[_d], indexName = _e[0], filteredEntries = _e[1]; + tblCache.queries.query[indexName] = filteredEntries; + } + } + } + + function dexieOpen(db) { + var state = db._state; + var indexedDB = db._deps.indexedDB; + if (state.isBeingOpened || db.idbdb) + return state.dbReadyPromise.then(function () { return state.dbOpenError ? + rejection(state.dbOpenError) : + db; }); + state.isBeingOpened = true; + state.dbOpenError = null; + state.openComplete = false; + var openCanceller = state.openCanceller; + var nativeVerToOpen = Math.round(db.verno * 10); + var schemaPatchMode = false; + function throwIfCancelled() { + if (state.openCanceller !== openCanceller) + throw new exceptions.DatabaseClosed('db.open() was cancelled'); + } + var resolveDbReady = state.dbReadyResolve, + upgradeTransaction = null, wasCreated = false; + var tryOpenDB = function () { return new DexiePromise(function (resolve, reject) { + throwIfCancelled(); + if (!indexedDB) + throw new exceptions.MissingAPI(); + var dbName = db.name; + var req = state.autoSchema || !nativeVerToOpen ? + indexedDB.open(dbName) : + indexedDB.open(dbName, nativeVerToOpen); + if (!req) + throw new exceptions.MissingAPI(); + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(db._fireOnBlocked); + req.onupgradeneeded = wrap(function (e) { + upgradeTransaction = req.transaction; + if (state.autoSchema && !db._options.allowEmptyDB) { + req.onerror = preventDefault; + upgradeTransaction.abort(); + req.result.close(); + var delreq = indexedDB.deleteDatabase(dbName); + delreq.onsuccess = delreq.onerror = wrap(function () { + reject(new exceptions.NoSuchDatabase("Database ".concat(dbName, " doesnt exist"))); + }); + } + else { + upgradeTransaction.onerror = eventRejectHandler(reject); + var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; + wasCreated = oldVer < 1; + db.idbdb = req.result; + if (schemaPatchMode) { + patchCurrentVersion(db, upgradeTransaction); + } + runUpgraders(db, oldVer / 10, upgradeTransaction, reject); + } + }, reject); + req.onsuccess = wrap(function () { + upgradeTransaction = null; + var idbdb = db.idbdb = req.result; + var objectStoreNames = slice(idbdb.objectStoreNames); + if (objectStoreNames.length > 0) + try { + var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly'); + if (state.autoSchema) + readGlobalSchema(db, idbdb, tmpTrans); + else { + adjustToExistingIndexNames(db, db._dbSchema, tmpTrans); + if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) { + console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this."); + idbdb.close(); + nativeVerToOpen = idbdb.version + 1; + schemaPatchMode = true; + return resolve(tryOpenDB()); + } + } + generateMiddlewareStacks(db, tmpTrans); + } + catch (e) { + } + connections.push(db); + idbdb.onversionchange = wrap(function (ev) { + state.vcFired = true; + db.on("versionchange").fire(ev); + }); + idbdb.onclose = wrap(function (ev) { + db.on("close").fire(ev); + }); + if (wasCreated) + _onDatabaseCreated(db._deps, dbName); + resolve(); + }, reject); + }).catch(function (err) { + switch (err === null || err === void 0 ? void 0 : err.name) { + case "UnknownError": + if (state.PR1398_maxLoop > 0) { + state.PR1398_maxLoop--; + console.warn('Dexie: Workaround for Chrome UnknownError on open()'); + return tryOpenDB(); + } + break; + case "VersionError": + if (nativeVerToOpen > 0) { + nativeVerToOpen = 0; + return tryOpenDB(); + } + break; + } + return DexiePromise.reject(err); + }); }; + return DexiePromise.race([ + openCanceller, + (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(tryOpenDB) + ]).then(function () { + throwIfCancelled(); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(function () { return db.on.ready.fire(db.vip); })).then(function fireRemainders() { + if (state.onReadyBeingFired.length > 0) { + var remainders_1 = state.onReadyBeingFired.reduce(promisableChain, nop); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(function () { return remainders_1(db.vip); })).then(fireRemainders); + } + }); + }).finally(function () { + if (state.openCanceller === openCanceller) { + state.onReadyBeingFired = null; + state.isBeingOpened = false; + } + }).catch(function (err) { + state.dbOpenError = err; + try { + upgradeTransaction && upgradeTransaction.abort(); + } + catch (_a) { } + if (openCanceller === state.openCanceller) { + db._close(); + } + return rejection(err); + }).finally(function () { + state.openComplete = true; + resolveDbReady(); + }).then(function () { + if (wasCreated) { + var everything_1 = {}; + db.tables.forEach(function (table) { + table.schema.indexes.forEach(function (idx) { + if (idx.name) + everything_1["idb://".concat(db.name, "/").concat(table.name, "/").concat(idx.name)] = new RangeSet(-Infinity, [[[]]]); + }); + everything_1["idb://".concat(db.name, "/").concat(table.name, "/")] = everything_1["idb://".concat(db.name, "/").concat(table.name, "/:dels")] = new RangeSet(-Infinity, [[[]]]); + }); + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything_1); + signalSubscribersNow(everything_1, true); + } + return db; + }); + } + + function awaitIterator(iterator) { + var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return function (val) { + var next = getNext(val), value = next.value; + return next.done ? value : + (!value || typeof value.then !== 'function' ? + isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : + value.then(onSuccess, onError)); + }; + } + return step(callNext)(); + } + + function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + var i = arguments.length; + if (i < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + var args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + scopeFunc = args.pop(); + var tables = flatten(args); + return [mode, tables, scopeFunc]; + } + function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) { + return DexiePromise.resolve().then(function () { + var transless = PSD.transless || PSD; + var trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction); + trans.explicit = true; + var zoneProps = { + trans: trans, + transless: transless + }; + if (parentTransaction) { + trans.idbtrans = parentTransaction.idbtrans; + } + else { + try { + trans.create(); + trans.idbtrans._explicit = true; + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(function () { return enterTransactionScope(db, mode, storeNames, null, scopeFunc); }); + } + return rejection(ex); + } + } + var scopeFuncIsAsync = isAsyncFunction(scopeFunc); + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + var returnValue; + var promiseFollowed = DexiePromise.follow(function () { + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (scopeFuncIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue).then(function (x) { return trans.active ? + x + : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); }) + : promiseFollowed.then(function () { return returnValue; })).then(function (x) { + if (parentTransaction) + trans._resolve(); + return trans._completion.then(function () { return x; }); + }).catch(function (e) { + trans._reject(e); + return rejection(e); + }); + }); + } + + function pad(a, value, count) { + var result = isArray(a) ? a.slice() : [a]; + for (var i = 0; i < count; ++i) + result.push(value); + return result; + } + function createVirtualIndexMiddleware(down) { + return __assign(__assign({}, down), { table: function (tableName) { + var table = down.table(tableName); + var schema = table.schema; + var indexLookup = {}; + var allVirtualIndexes = []; + function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { + var keyPathAlias = getKeyPathAlias(keyPath); + var indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []); + var keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length; + var isVirtual = keyTail > 0; + var virtualIndex = __assign(__assign({}, lowLevelIndex), { name: isVirtual + ? "".concat(keyPathAlias, "(virtual-from:").concat(lowLevelIndex.name, ")") + : lowLevelIndex.name, lowLevelIndex: lowLevelIndex, isVirtual: isVirtual, keyTail: keyTail, keyLength: keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique }); + indexList.push(virtualIndex); + if (!virtualIndex.isPrimaryKey) { + allVirtualIndexes.push(virtualIndex); + } + if (keyLength > 1) { + var virtualKeyPath = keyLength === 2 ? + keyPath[0] : + keyPath.slice(0, keyLength - 1); + addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); + } + indexList.sort(function (a, b) { return a.keyTail - b.keyTail; }); + return virtualIndex; + } + var primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); + indexLookup[":id"] = [primaryKey]; + for (var _i = 0, _a = schema.indexes; _i < _a.length; _i++) { + var index = _a[_i]; + addVirtualIndexes(index.keyPath, 0, index); + } + function findBestIndex(keyPath) { + var result = indexLookup[getKeyPathAlias(keyPath)]; + return result && result[0]; + } + function translateRange(range, keyTail) { + return { + type: range.type === 1 ? + 2 : + range.type, + lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), + lowerOpen: true, + upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), + upperOpen: true + }; + } + function translateRequest(req) { + var index = req.query.index; + return index.isVirtual ? __assign(__assign({}, req), { query: { + index: index.lowLevelIndex, + range: translateRange(req.query.range, index.keyTail) + } }) : req; + } + var result = __assign(__assign({}, table), { schema: __assign(__assign({}, schema), { primaryKey: primaryKey, indexes: allVirtualIndexes, getIndexByKeyPath: findBestIndex }), count: function (req) { + return table.count(translateRequest(req)); + }, query: function (req) { + return table.query(translateRequest(req)); + }, openCursor: function (req) { + var _a = req.query.index, keyTail = _a.keyTail, isVirtual = _a.isVirtual, keyLength = _a.keyLength; + if (!isVirtual) + return table.openCursor(req); + function createVirtualCursor(cursor) { + function _continue(key) { + key != null ? + cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : + req.unique ? + cursor.continue(cursor.key.slice(0, keyLength) + .concat(req.reverse + ? down.MIN_KEY + : down.MAX_KEY, keyTail)) : + cursor.continue(); + } + var virtualCursor = Object.create(cursor, { + continue: { value: _continue }, + continuePrimaryKey: { + value: function (key, primaryKey) { + cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey); + } + }, + primaryKey: { + get: function () { + return cursor.primaryKey; + } + }, + key: { + get: function () { + var key = cursor.key; + return keyLength === 1 ? + key[0] : + key.slice(0, keyLength); + } + }, + value: { + get: function () { + return cursor.value; + } + } + }); + return virtualCursor; + } + return table.openCursor(translateRequest(req)) + .then(function (cursor) { return cursor && createVirtualCursor(cursor); }); + } }); + return result; + } }); + } + var virtualIndexMiddleware = { + stack: "dbcore", + name: "VirtualIndexMiddleware", + level: 1, + create: createVirtualIndexMiddleware + }; + + function getObjectDiff(a, b, rv, prfx) { + rv = rv || {}; + prfx = prfx || ''; + keys(a).forEach(function (prop) { + if (!hasOwn(b, prop)) { + rv[prfx + prop] = undefined; + } + else { + var ap = a[prop], bp = b[prop]; + if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) { + var apTypeName = toStringTag(ap); + var bpTypeName = toStringTag(bp); + if (apTypeName !== bpTypeName) { + rv[prfx + prop] = b[prop]; + } + else if (apTypeName === 'Object') { + getObjectDiff(ap, bp, rv, prfx + prop + '.'); + } + else if (ap !== bp) { + rv[prfx + prop] = b[prop]; + } + } + else if (ap !== bp) + rv[prfx + prop] = b[prop]; + } + }); + keys(b).forEach(function (prop) { + if (!hasOwn(a, prop)) { + rv[prfx + prop] = b[prop]; + } + }); + return rv; + } + + function getEffectiveKeys(primaryKey, req) { + if (req.type === 'delete') + return req.keys; + return req.keys || req.values.map(primaryKey.extractKey); + } + + var hooksMiddleware = { + stack: "dbcore", + name: "HooksMiddleware", + level: 2, + create: function (downCore) { return (__assign(__assign({}, downCore), { table: function (tableName) { + var downTable = downCore.table(tableName); + var primaryKey = downTable.schema.primaryKey; + var tableMiddleware = __assign(__assign({}, downTable), { mutate: function (req) { + var dxTrans = PSD.trans; + var _a = dxTrans.table(tableName).hook, deleting = _a.deleting, creating = _a.creating, updating = _a.updating; + switch (req.type) { + case 'add': + if (creating.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'put': + if (creating.fire === nop && updating.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'delete': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'deleteRange': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return deleteRange(req); }, true); + } + return downTable.mutate(req); + function addPutOrDelete(req) { + var dxTrans = PSD.trans; + var keys = req.keys || getEffectiveKeys(primaryKey, req); + if (!keys) + throw new Error("Keys missing"); + req = req.type === 'add' || req.type === 'put' ? __assign(__assign({}, req), { keys: keys }) : __assign({}, req); + if (req.type !== 'delete') + req.values = __spreadArray([], req.values, true); + if (req.keys) + req.keys = __spreadArray([], req.keys, true); + return getExistingValues(downTable, req, keys).then(function (existingValues) { + var contexts = keys.map(function (key, i) { + var existingValue = existingValues[i]; + var ctx = { onerror: null, onsuccess: null }; + if (req.type === 'delete') { + deleting.fire.call(ctx, key, existingValue, dxTrans); + } + else if (req.type === 'add' || existingValue === undefined) { + var generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans); + if (key == null && generatedPrimaryKey != null) { + key = generatedPrimaryKey; + req.keys[i] = key; + if (!primaryKey.outbound) { + setByKeyPath(req.values[i], primaryKey.keyPath, key); + } + } + } + else { + var objectDiff = getObjectDiff(existingValue, req.values[i]); + var additionalChanges_1 = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans); + if (additionalChanges_1) { + var requestedValue_1 = req.values[i]; + Object.keys(additionalChanges_1).forEach(function (keyPath) { + if (hasOwn(requestedValue_1, keyPath)) { + requestedValue_1[keyPath] = additionalChanges_1[keyPath]; + } + else { + setByKeyPath(requestedValue_1, keyPath, additionalChanges_1[keyPath]); + } + }); + } + } + return ctx; + }); + return downTable.mutate(req).then(function (_a) { + var failures = _a.failures, results = _a.results, numFailures = _a.numFailures, lastResult = _a.lastResult; + for (var i = 0; i < keys.length; ++i) { + var primKey = results ? results[i] : keys[i]; + var ctx = contexts[i]; + if (primKey == null) { + ctx.onerror && ctx.onerror(failures[i]); + } + else { + ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ? + req.values[i] : + primKey + ); + } + } + return { failures: failures, results: results, numFailures: numFailures, lastResult: lastResult }; + }).catch(function (error) { + contexts.forEach(function (ctx) { return ctx.onerror && ctx.onerror(error); }); + return Promise.reject(error); + }); + }); + } + function deleteRange(req) { + return deleteNextChunk(req.trans, req.range, 10000); + } + function deleteNextChunk(trans, range, limit) { + return downTable.query({ trans: trans, values: false, query: { index: primaryKey, range: range }, limit: limit }) + .then(function (_a) { + var result = _a.result; + return addPutOrDelete({ type: 'delete', keys: result, trans: trans }).then(function (res) { + if (res.numFailures > 0) + return Promise.reject(res.failures[0]); + if (result.length < limit) { + return { failures: [], numFailures: 0, lastResult: undefined }; + } + else { + return deleteNextChunk(trans, __assign(__assign({}, range), { lower: result[result.length - 1], lowerOpen: true }), limit); + } + }); + }); + } + } }); + return tableMiddleware; + } })); } + }; + function getExistingValues(table, req, effectiveKeys) { + return req.type === "add" + ? Promise.resolve([]) + : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: "immutable" }); + } + + function getFromTransactionCache(keys, cache, clone) { + try { + if (!cache) + return null; + if (cache.keys.length < keys.length) + return null; + var result = []; + for (var i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) { + if (cmp(cache.keys[i], keys[j]) !== 0) + continue; + result.push(clone ? deepClone(cache.values[i]) : cache.values[i]); + ++j; + } + return result.length === keys.length ? result : null; + } + catch (_a) { + return null; + } + } + var cacheExistingValuesMiddleware = { + stack: "dbcore", + level: -1, + create: function (core) { + return { + table: function (tableName) { + var table = core.table(tableName); + return __assign(__assign({}, table), { getMany: function (req) { + if (!req.cache) { + return table.getMany(req); + } + var cachedResult = getFromTransactionCache(req.keys, req.trans["_cache"], req.cache === "clone"); + if (cachedResult) { + return DexiePromise.resolve(cachedResult); + } + return table.getMany(req).then(function (res) { + req.trans["_cache"] = { + keys: req.keys, + values: req.cache === "clone" ? deepClone(res) : res, + }; + return res; + }); + }, mutate: function (req) { + if (req.type !== "add") + req.trans["_cache"] = null; + return table.mutate(req); + } }); + }, + }; + }, + }; + + function isCachableContext(ctx, table) { + return (ctx.trans.mode === 'readonly' && + !!ctx.subscr && + !ctx.trans.explicit && + ctx.trans.db._options.cache !== 'disabled' && + !table.schema.primaryKey.outbound); + } + + function isCachableRequest(type, req) { + switch (type) { + case 'query': + return req.values && !req.unique; + case 'get': + return false; + case 'getMany': + return false; + case 'count': + return false; + case 'openCursor': + return false; + } + } + + var observabilityMiddleware = { + stack: "dbcore", + level: 0, + name: "Observability", + create: function (core) { + var dbName = core.schema.name; + var FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY); + return __assign(__assign({}, core), { transaction: function (stores, mode, options) { + if (PSD.subscr && mode !== 'readonly') { + throw new exceptions.ReadOnly("Readwrite transaction in liveQuery context. Querier source: ".concat(PSD.querier)); + } + return core.transaction(stores, mode, options); + }, table: function (tableName) { + var table = core.table(tableName); + var schema = table.schema; + var primaryKey = schema.primaryKey, indexes = schema.indexes; + var extractKey = primaryKey.extractKey, outbound = primaryKey.outbound; + var indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(function (index) { return index.compound && index.keyPath.includes(primaryKey.keyPath); }); + var tableClone = __assign(__assign({}, table), { mutate: function (req) { + var trans = req.trans; + var mutatedParts = req.mutatedParts || (req.mutatedParts = {}); + var getRangeSet = function (indexName) { + var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); + return (mutatedParts[part] || + (mutatedParts[part] = new RangeSet())); + }; + var pkRangeSet = getRangeSet(""); + var delsRangeSet = getRangeSet(":dels"); + var type = req.type; + var _a = req.type === "deleteRange" + ? [req.range] + : req.type === "delete" + ? [req.keys] + : req.values.length < 50 + ? [getEffectiveKeys(primaryKey, req).filter(function (id) { return id; }), req.values] + : [], keys = _a[0], newObjs = _a[1]; + var oldCache = req.trans["_cache"]; + if (isArray(keys)) { + pkRangeSet.addKeys(keys); + var oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null; + if (!oldObjs) { + delsRangeSet.addKeys(keys); + } + if (oldObjs || newObjs) { + trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs); + } + } + else if (keys) { + var range = { from: keys.lower, to: keys.upper }; + delsRangeSet.add(range); + pkRangeSet.add(range); + } + else { + pkRangeSet.add(FULL_RANGE); + delsRangeSet.add(FULL_RANGE); + schema.indexes.forEach(function (idx) { return getRangeSet(idx.name).add(FULL_RANGE); }); + } + return table.mutate(req).then(function (res) { + if (keys && (req.type === 'add' || req.type === 'put')) { + pkRangeSet.addKeys(res.results); + if (indexesWithAutoIncPK) { + indexesWithAutoIncPK.forEach(function (idx) { + var idxVals = req.values.map(function (v) { return idx.extractKey(v); }); + var pkPos = idx.keyPath.findIndex(function (prop) { return prop === primaryKey.keyPath; }); + res.results.forEach(function (pk) { return idxVals[pkPos] = pk; }); + getRangeSet(idx.name).addKeys(idxVals); + }); + } + } + trans.mutatedParts = extendObservabilitySet(trans.mutatedParts || {}, mutatedParts); + return res; + }); + } }); + var getRange = function (_a) { + var _b, _c; + var _d = _a.query, index = _d.index, range = _d.range; + return [ + index, + new RangeSet((_b = range.lower) !== null && _b !== void 0 ? _b : core.MIN_KEY, (_c = range.upper) !== null && _c !== void 0 ? _c : core.MAX_KEY), + ]; + }; + var readSubscribers = { + get: function (req) { return [primaryKey, new RangeSet(req.key)]; }, + getMany: function (req) { return [primaryKey, new RangeSet().addKeys(req.keys)]; }, + count: getRange, + query: getRange, + openCursor: getRange, + }; + keys(readSubscribers).forEach(function (method) { + tableClone[method] = function (req) { + var subscr = PSD.subscr; + var isLiveQuery = !!subscr; + var cachable = isCachableContext(PSD, table) && isCachableRequest(method, req); + var obsSet = cachable + ? req.obsSet = {} + : subscr; + if (isLiveQuery) { + var getRangeSet = function (indexName) { + var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); + return (obsSet[part] || + (obsSet[part] = new RangeSet())); + }; + var pkRangeSet_1 = getRangeSet(""); + var delsRangeSet_1 = getRangeSet(":dels"); + var _a = readSubscribers[method](req), queriedIndex = _a[0], queriedRanges = _a[1]; + if (method === 'query' && queriedIndex.isPrimaryKey && !req.values) { + delsRangeSet_1.add(queriedRanges); + } + else { + getRangeSet(queriedIndex.name || "").add(queriedRanges); + } + if (!queriedIndex.isPrimaryKey) { + if (method === "count") { + delsRangeSet_1.add(FULL_RANGE); + } + else { + var keysPromise_1 = method === "query" && + outbound && + req.values && + table.query(__assign(__assign({}, req), { values: false })); + return table[method].apply(this, arguments).then(function (res) { + if (method === "query") { + if (outbound && req.values) { + return keysPromise_1.then(function (_a) { + var resultingKeys = _a.result; + pkRangeSet_1.addKeys(resultingKeys); + return res; + }); + } + var pKeys = req.values + ? res.result.map(extractKey) + : res.result; + if (req.values) { + pkRangeSet_1.addKeys(pKeys); + } + else { + delsRangeSet_1.addKeys(pKeys); + } + } + else if (method === "openCursor") { + var cursor_1 = res; + var wantValues_1 = req.values; + return (cursor_1 && + Object.create(cursor_1, { + key: { + get: function () { + delsRangeSet_1.addKey(cursor_1.primaryKey); + return cursor_1.key; + }, + }, + primaryKey: { + get: function () { + var pkey = cursor_1.primaryKey; + delsRangeSet_1.addKey(pkey); + return pkey; + }, + }, + value: { + get: function () { + wantValues_1 && pkRangeSet_1.addKey(cursor_1.primaryKey); + return cursor_1.value; + }, + }, + })); + } + return res; + }); + } + } + } + return table[method].apply(this, arguments); + }; + }); + return tableClone; + } }); + }, + }; + function trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) { + function addAffectedIndex(ix) { + var rangeSet = getRangeSet(ix.name || ""); + function extractKey(obj) { + return obj != null ? ix.extractKey(obj) : null; + } + var addKeyOrKeys = function (key) { return ix.multiEntry && isArray(key) + ? key.forEach(function (key) { return rangeSet.addKey(key); }) + : rangeSet.addKey(key); }; + (oldObjs || newObjs).forEach(function (_, i) { + var oldKey = oldObjs && extractKey(oldObjs[i]); + var newKey = newObjs && extractKey(newObjs[i]); + if (cmp(oldKey, newKey) !== 0) { + if (oldKey != null) + addKeyOrKeys(oldKey); + if (newKey != null) + addKeyOrKeys(newKey); + } + }); + } + schema.indexes.forEach(addAffectedIndex); + } + + function adjustOptimisticFromFailures(tblCache, req, res) { + if (res.numFailures === 0) + return req; + if (req.type === 'deleteRange') { + return null; + } + var numBulkOps = req.keys + ? req.keys.length + : 'values' in req && req.values + ? req.values.length + : 1; + if (res.numFailures === numBulkOps) { + return null; + } + var clone = __assign({}, req); + if (isArray(clone.keys)) { + clone.keys = clone.keys.filter(function (_, i) { return !(i in res.failures); }); + } + if ('values' in clone && isArray(clone.values)) { + clone.values = clone.values.filter(function (_, i) { return !(i in res.failures); }); + } + return clone; + } + + function isAboveLower(key, range) { + return range.lower === undefined + ? true + : range.lowerOpen + ? cmp(key, range.lower) > 0 + : cmp(key, range.lower) >= 0; + } + function isBelowUpper(key, range) { + return range.upper === undefined + ? true + : range.upperOpen + ? cmp(key, range.upper) < 0 + : cmp(key, range.upper) <= 0; + } + function isWithinRange(key, range) { + return isAboveLower(key, range) && isBelowUpper(key, range); + } + + function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) { + if (!ops || ops.length === 0) + return result; + var index = req.query.index; + var multiEntry = index.multiEntry; + var queryRange = req.query.range; + var primaryKey = table.schema.primaryKey; + var extractPrimKey = primaryKey.extractKey; + var extractIndex = index.extractKey; + var extractLowLevelIndex = (index.lowLevelIndex || index).extractKey; + var finalResult = ops.reduce(function (result, op) { + var modifedResult = result; + var includedValues = op.type === 'add' || op.type === 'put' + ? op.values.filter(function (v) { + var key = extractIndex(v); + return multiEntry && isArray(key) + ? key.some(function (k) { return isWithinRange(k, queryRange); }) + : isWithinRange(key, queryRange); + }).map(function (v) { + v = deepClone(v); + if (immutable) + Object.freeze(v); + return v; + }) + : []; + switch (op.type) { + case 'add': + modifedResult = result.concat(req.values + ? includedValues + : includedValues.map(function (v) { return extractPrimKey(v); })); + break; + case 'put': + var keySet_1 = new RangeSet().addKeys(op.values.map(function (v) { return extractPrimKey(v); })); + modifedResult = result + .filter(function (item) { + var key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keySet_1); + }) + .concat(req.values + ? includedValues + : includedValues.map(function (v) { return extractPrimKey(v); })); + break; + case 'delete': + var keysToDelete_1 = new RangeSet().addKeys(op.keys); + modifedResult = result.filter(function (item) { + var key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keysToDelete_1); + }); + break; + case 'deleteRange': + var range_1 = op.range; + modifedResult = result.filter(function (item) { return !isWithinRange(extractPrimKey(item), range_1); }); + break; + } + return modifedResult; + }, result); + if (finalResult === result) + return result; + finalResult.sort(function (a, b) { + return cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) || + cmp(extractPrimKey(a), extractPrimKey(b)); + }); + if (req.limit && req.limit < Infinity) { + if (finalResult.length > req.limit) { + finalResult.length = req.limit; + } + else if (result.length === req.limit && finalResult.length < req.limit) { + cacheEntry.dirty = true; + } + } + return immutable ? Object.freeze(finalResult) : finalResult; + } + + function areRangesEqual(r1, r2) { + return (cmp(r1.lower, r2.lower) === 0 && + cmp(r1.upper, r2.upper) === 0 && + !!r1.lowerOpen === !!r2.lowerOpen && + !!r1.upperOpen === !!r2.upperOpen); + } + + function compareLowers(lower1, lower2, lowerOpen1, lowerOpen2) { + if (lower1 === undefined) + return lower2 !== undefined ? -1 : 0; + if (lower2 === undefined) + return 1; + var c = cmp(lower1, lower2); + if (c === 0) { + if (lowerOpen1 && lowerOpen2) + return 0; + if (lowerOpen1) + return 1; + if (lowerOpen2) + return -1; + } + return c; + } + function compareUppers(upper1, upper2, upperOpen1, upperOpen2) { + if (upper1 === undefined) + return upper2 !== undefined ? 1 : 0; + if (upper2 === undefined) + return -1; + var c = cmp(upper1, upper2); + if (c === 0) { + if (upperOpen1 && upperOpen2) + return 0; + if (upperOpen1) + return -1; + if (upperOpen2) + return 1; + } + return c; + } + function isSuperRange(r1, r2) { + return (compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 && + compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0); + } + + function findCompatibleQuery(dbName, tableName, type, req) { + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (!tblCache) + return []; + var queries = tblCache.queries[type]; + if (!queries) + return [null, false, tblCache, null]; + var indexName = req.query ? req.query.index.name : null; + var entries = queries[indexName || '']; + if (!entries) + return [null, false, tblCache, null]; + switch (type) { + case 'query': + var equalEntry = entries.find(function (entry) { + return entry.req.limit === req.limit && + entry.req.values === req.values && + areRangesEqual(entry.req.query.range, req.query.range); + }); + if (equalEntry) + return [ + equalEntry, + true, + tblCache, + entries, + ]; + var superEntry = entries.find(function (entry) { + var limit = 'limit' in entry.req ? entry.req.limit : Infinity; + return (limit >= req.limit && + (req.values ? entry.req.values : true) && + isSuperRange(entry.req.query.range, req.query.range)); + }); + return [superEntry, false, tblCache, entries]; + case 'count': + var countQuery = entries.find(function (entry) { + return areRangesEqual(entry.req.query.range, req.query.range); + }); + return [countQuery, !!countQuery, tblCache, entries]; + } + } + + function subscribeToCacheEntry(cacheEntry, container, requery, signal) { + cacheEntry.subscribers.add(requery); + signal.addEventListener("abort", function () { + cacheEntry.subscribers.delete(requery); + if (cacheEntry.subscribers.size === 0) { + enqueForDeletion(cacheEntry, container); + } + }); + } + function enqueForDeletion(cacheEntry, container) { + setTimeout(function () { + if (cacheEntry.subscribers.size === 0) { + delArrayItem(container, cacheEntry); + } + }, 3000); + } + + var cacheMiddleware = { + stack: 'dbcore', + level: 0, + name: 'Cache', + create: function (core) { + var dbName = core.schema.name; + var coreMW = __assign(__assign({}, core), { transaction: function (stores, mode, options) { + var idbtrans = core.transaction(stores, mode, options); + if (mode === 'readwrite') { + var ac_1 = new AbortController(); + var signal = ac_1.signal; + var endTransaction = function (wasCommitted) { return function () { + ac_1.abort(); + if (mode === 'readwrite') { + var affectedSubscribers_1 = new Set(); + for (var _i = 0, stores_1 = stores; _i < stores_1.length; _i++) { + var storeName = stores_1[_i]; + var tblCache = cache["idb://".concat(dbName, "/").concat(storeName)]; + if (tblCache) { + var table = core.table(storeName); + var ops = tblCache.optimisticOps.filter(function (op) { return op.trans === idbtrans; }); + if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) { + for (var _a = 0, _b = Object.values(tblCache.queries.query); _a < _b.length; _a++) { + var entries = _b[_a]; + for (var _c = 0, _d = entries.slice(); _c < _d.length; _c++) { + var entry = _d[_c]; + if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) { + delArrayItem(entries, entry); + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + } + } + } + else if (ops.length > 0) { + tblCache.optimisticOps = tblCache.optimisticOps.filter(function (op) { return op.trans !== idbtrans; }); + for (var _e = 0, _f = Object.values(tblCache.queries.query); _e < _f.length; _e++) { + var entries = _f[_e]; + for (var _g = 0, _h = entries.slice(); _g < _h.length; _g++) { + var entry = _h[_g]; + if (entry.res != null && + idbtrans.mutatedParts + ) { + if (wasCommitted && !entry.dirty) { + var freezeResults = Object.isFrozen(entry.res); + var modRes = applyOptimisticOps(entry.res, entry.req, ops, table, entry, freezeResults); + if (entry.dirty) { + delArrayItem(entries, entry); + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + else if (modRes !== entry.res) { + entry.res = modRes; + entry.promise = DexiePromise.resolve({ result: modRes }); + } + } + else { + if (entry.dirty) { + delArrayItem(entries, entry); + } + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + } + } + } + } + } + } + affectedSubscribers_1.forEach(function (requery) { return requery(); }); + } + }; }; + idbtrans.addEventListener('abort', endTransaction(false), { + signal: signal, + }); + idbtrans.addEventListener('error', endTransaction(false), { + signal: signal, + }); + idbtrans.addEventListener('complete', endTransaction(true), { + signal: signal, + }); + } + return idbtrans; + }, table: function (tableName) { + var downTable = core.table(tableName); + var primKey = downTable.schema.primaryKey; + var tableMW = __assign(__assign({}, downTable), { mutate: function (req) { + var trans = PSD.trans; + if (primKey.outbound || + trans.db._options.cache === 'disabled' || + trans.explicit + ) { + return downTable.mutate(req); + } + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (!tblCache) + return downTable.mutate(req); + var promise = downTable.mutate(req); + if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(function (key) { return key == null; }))) { + promise.then(function (res) { + var reqWithResolvedKeys = __assign(__assign({}, req), { values: req.values.map(function (value, i) { + var _a; + var valueWithKey = ((_a = primKey.keyPath) === null || _a === void 0 ? void 0 : _a.includes('.')) + ? deepClone(value) + : __assign({}, value); + setByKeyPath(valueWithKey, primKey.keyPath, res.results[i]); + return valueWithKey; + }) }); + var adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res); + tblCache.optimisticOps.push(adjustedReq); + queueMicrotask(function () { return req.mutatedParts && signalSubscribersLazily(req.mutatedParts); }); + }); + } + else { + tblCache.optimisticOps.push(req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + promise.then(function (res) { + if (res.numFailures > 0) { + delArrayItem(tblCache.optimisticOps, req); + var adjustedReq = adjustOptimisticFromFailures(tblCache, req, res); + if (adjustedReq) { + tblCache.optimisticOps.push(adjustedReq); + } + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + } + }); + promise.catch(function () { + delArrayItem(tblCache.optimisticOps, req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + }); + } + return promise; + }, query: function (req) { + var _a; + if (!isCachableContext(PSD, downTable) || !isCachableRequest("query", req)) + return downTable.query(req); + var freezeResults = ((_a = PSD.trans) === null || _a === void 0 ? void 0 : _a.db._options.cache) === 'immutable'; + var _b = PSD, requery = _b.requery, signal = _b.signal; + var _c = findCompatibleQuery(dbName, tableName, 'query', req), cacheEntry = _c[0], exactMatch = _c[1], tblCache = _c[2], container = _c[3]; + if (cacheEntry && exactMatch) { + cacheEntry.obsSet = req.obsSet; + } + else { + var promise = downTable.query(req).then(function (res) { + var result = res.result; + if (cacheEntry) + cacheEntry.res = result; + if (freezeResults) { + for (var i = 0, l = result.length; i < l; ++i) { + Object.freeze(result[i]); + } + Object.freeze(result); + } + else { + res.result = deepClone(result); + } + return res; + }).catch(function (error) { + if (container && cacheEntry) + delArrayItem(container, cacheEntry); + return Promise.reject(error); + }); + cacheEntry = { + obsSet: req.obsSet, + promise: promise, + subscribers: new Set(), + type: 'query', + req: req, + dirty: false, + }; + if (container) { + container.push(cacheEntry); + } + else { + container = [cacheEntry]; + if (!tblCache) { + tblCache = cache["idb://".concat(dbName, "/").concat(tableName)] = { + queries: { + query: {}, + count: {}, + }, + objs: new Map(), + optimisticOps: [], + unsignaledParts: {} + }; + } + tblCache.queries.query[req.query.index.name || ''] = container; + } + } + subscribeToCacheEntry(cacheEntry, container, requery, signal); + return cacheEntry.promise.then(function (res) { + return { + result: applyOptimisticOps(res.result, req, tblCache === null || tblCache === void 0 ? void 0 : tblCache.optimisticOps, downTable, cacheEntry, freezeResults), + }; + }); + } }); + return tableMW; + } }); + return coreMW; + }, + }; + + function vipify(target, vipDb) { + return new Proxy(target, { + get: function (target, prop, receiver) { + if (prop === 'db') + return vipDb; + return Reflect.get(target, prop, receiver); + } + }); + } + + var Dexie$1 = (function () { + function Dexie(name, options) { + var _this = this; + this._middlewares = {}; + this.verno = 0; + var deps = Dexie.dependencies; + this._options = options = __assign({ + addons: Dexie.addons, autoOpen: true, + indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange, cache: 'cloned' }, options); + this._deps = { + indexedDB: options.indexedDB, + IDBKeyRange: options.IDBKeyRange + }; + var addons = options.addons; + this._dbSchema = {}; + this._versions = []; + this._storeNames = []; + this._allTables = {}; + this.idbdb = null; + this._novip = this; + var state = { + dbOpenError: null, + isBeingOpened: false, + onReadyBeingFired: null, + openComplete: false, + dbReadyResolve: nop, + dbReadyPromise: null, + cancelOpen: nop, + openCanceller: null, + autoSchema: true, + PR1398_maxLoop: 3, + autoOpen: options.autoOpen, + }; + state.dbReadyPromise = new DexiePromise(function (resolve) { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise(function (_, reject) { + state.cancelOpen = reject; + }); + this._state = state; + this.name = name; + this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) { + return function (subscriber, bSticky) { + Dexie.vip(function () { + var state = _this._state; + if (state.openComplete) { + if (!state.dbOpenError) + DexiePromise.resolve().then(subscriber); + if (bSticky) + subscribe(subscriber); + } + else if (state.onReadyBeingFired) { + state.onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } + else { + subscribe(subscriber); + var db_1 = _this; + if (!bSticky) + subscribe(function unsubscribe() { + db_1.on.ready.unsubscribe(subscriber); + db_1.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.Collection = createCollectionConstructor(this); + this.Table = createTableConstructor(this); + this.Transaction = createTransactionConstructor(this); + this.Version = createVersionConstructor(this); + this.WhereClause = createWhereClauseConstructor(this); + this.on("versionchange", function (ev) { + if (ev.newVersion > 0) + console.warn("Another connection wants to upgrade database '".concat(_this.name, "'. Closing db now to resume the upgrade.")); + else + console.warn("Another connection wants to delete database '".concat(_this.name, "'. Closing db now to resume the delete request.")); + _this.close({ disableAutoOpen: false }); + }); + this.on("blocked", function (ev) { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn("Dexie.delete('".concat(_this.name, "') was blocked")); + else + console.warn("Upgrade '".concat(_this.name, "' blocked by other connection holding version ").concat(ev.oldVersion / 10)); + }); + this._maxKey = getMaxKey(options.IDBKeyRange); + this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { return new _this.Transaction(mode, storeNames, dbschema, _this._options.chromeTransactionDurability, parentTransaction); }; + this._fireOnBlocked = function (ev) { + _this.on("blocked").fire(ev); + connections + .filter(function (c) { return c.name === _this.name && c !== _this && !c._state.vcFired; }) + .map(function (c) { return c.on("versionchange").fire(ev); }); + }; + this.use(cacheExistingValuesMiddleware); + this.use(cacheMiddleware); + this.use(observabilityMiddleware); + this.use(virtualIndexMiddleware); + this.use(hooksMiddleware); + var vipDB = new Proxy(this, { + get: function (_, prop, receiver) { + if (prop === '_vip') + return true; + if (prop === 'table') + return function (tableName) { return vipify(_this.table(tableName), vipDB); }; + var rv = Reflect.get(_, prop, receiver); + if (rv instanceof Table) + return vipify(rv, vipDB); + if (prop === 'tables') + return rv.map(function (t) { return vipify(t, vipDB); }); + if (prop === '_createTransaction') + return function () { + var tx = rv.apply(this, arguments); + return vipify(tx, vipDB); + }; + return rv; + } + }); + this.vip = vipDB; + addons.forEach(function (addon) { return addon(_this); }); + } + Dexie.prototype.version = function (versionNumber) { + if (isNaN(versionNumber) || versionNumber < 0.1) + throw new exceptions.Type("Given version is not a positive number"); + versionNumber = Math.round(versionNumber * 10) / 10; + if (this.idbdb || this._state.isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + var versions = this._versions; + var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0]; + if (versionInstance) + return versionInstance; + versionInstance = new this.Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + versionInstance.stores({}); + this._state.autoSchema = false; + return versionInstance; + }; + Dexie.prototype._whenReady = function (fn) { + var _this = this; + return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise(function (resolve, reject) { + if (_this._state.openComplete) { + return reject(new exceptions.DatabaseClosed(_this._state.dbOpenError)); + } + if (!_this._state.isBeingOpened) { + if (!_this._state.autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + _this.open().catch(nop); + } + _this._state.dbReadyPromise.then(resolve, reject); + }).then(fn); + }; + Dexie.prototype.use = function (_a) { + var stack = _a.stack, create = _a.create, level = _a.level, name = _a.name; + if (name) + this.unuse({ stack: stack, name: name }); + var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); + middlewares.push({ stack: stack, create: create, level: level == null ? 10 : level, name: name }); + middlewares.sort(function (a, b) { return a.level - b.level; }); + return this; + }; + Dexie.prototype.unuse = function (_a) { + var stack = _a.stack, name = _a.name, create = _a.create; + if (stack && this._middlewares[stack]) { + this._middlewares[stack] = this._middlewares[stack].filter(function (mw) { + return create ? mw.create !== create : + name ? mw.name !== name : + false; + }); + } + return this; + }; + Dexie.prototype.open = function () { + var _this = this; + return usePSD(globalPSD, + function () { return dexieOpen(_this); }); + }; + Dexie.prototype._close = function () { + var state = this._state; + var idx = connections.indexOf(this); + if (idx >= 0) + connections.splice(idx, 1); + if (this.idbdb) { + try { + this.idbdb.close(); + } + catch (e) { } + this.idbdb = null; + } + if (!state.isBeingOpened) { + state.dbReadyPromise = new DexiePromise(function (resolve) { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise(function (_, reject) { + state.cancelOpen = reject; + }); + } + }; + Dexie.prototype.close = function (_a) { + var _b = _a === void 0 ? { disableAutoOpen: true } : _a, disableAutoOpen = _b.disableAutoOpen; + var state = this._state; + if (disableAutoOpen) { + if (state.isBeingOpened) { + state.cancelOpen(new exceptions.DatabaseClosed()); + } + this._close(); + state.autoOpen = false; + state.dbOpenError = new exceptions.DatabaseClosed(); + } + else { + this._close(); + state.autoOpen = this._options.autoOpen || + state.isBeingOpened; + state.openComplete = false; + state.dbOpenError = null; + } + }; + Dexie.prototype.delete = function (closeOptions) { + var _this = this; + if (closeOptions === void 0) { closeOptions = { disableAutoOpen: true }; } + var hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; + var state = this._state; + return new DexiePromise(function (resolve, reject) { + var doDelete = function () { + _this.close(closeOptions); + var req = _this._deps.indexedDB.deleteDatabase(_this.name); + req.onsuccess = wrap(function () { + _onDatabaseDeleted(_this._deps, _this.name); + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = _this._fireOnBlocked; + }; + if (hasInvalidArguments) + throw new exceptions.InvalidArgument("Invalid closeOptions argument to db.delete()"); + if (state.isBeingOpened) { + state.dbReadyPromise.then(doDelete); + } + else { + doDelete(); + } + }); + }; + Dexie.prototype.backendDB = function () { + return this.idbdb; + }; + Dexie.prototype.isOpen = function () { + return this.idbdb !== null; + }; + Dexie.prototype.hasBeenClosed = function () { + var dbOpenError = this._state.dbOpenError; + return dbOpenError && (dbOpenError.name === 'DatabaseClosed'); + }; + Dexie.prototype.hasFailed = function () { + return this._state.dbOpenError !== null; + }; + Dexie.prototype.dynamicallyOpened = function () { + return this._state.autoSchema; + }; + Object.defineProperty(Dexie.prototype, "tables", { + get: function () { + var _this = this; + return keys(this._allTables).map(function (name) { return _this._allTables[name]; }); + }, + enumerable: false, + configurable: true + }); + Dexie.prototype.transaction = function () { + var args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + }; + Dexie.prototype._transaction = function (mode, tables, scopeFunc) { + var _this = this; + var parentTransaction = PSD.trans; + if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) + parentTransaction = null; + var onlyIfCompatible = mode.indexOf('?') !== -1; + mode = mode.replace('!', '').replace('?', ''); + var idbMode, storeNames; + try { + storeNames = tables.map(function (table) { + var storeName = table instanceof _this.Table ? table.name : table; + if (typeof storeName !== 'string') + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + if (mode == "r" || mode === READONLY) + idbMode = READONLY; + else if (mode == "rw" || mode == READWRITE) + idbMode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + if (parentTransaction.mode === READONLY && idbMode === READWRITE) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach(function (storeName) { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Table " + storeName + + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + parentTransaction = null; + } + } + } + catch (e) { + return parentTransaction ? + parentTransaction._promise(null, function (_, reject) { reject(e); }) : + rejection(e); + } + var enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); + return (parentTransaction ? + parentTransaction._promise(idbMode, enterTransaction, "lock") : + PSD.trans ? + usePSD(PSD.transless, function () { return _this._whenReady(enterTransaction); }) : + this._whenReady(enterTransaction)); + }; + Dexie.prototype.table = function (tableName) { + if (!hasOwn(this._allTables, tableName)) { + throw new exceptions.InvalidTable("Table ".concat(tableName, " does not exist")); + } + return this._allTables[tableName]; + }; + return Dexie; + }()); + + var symbolObservable = typeof Symbol !== "undefined" && "observable" in Symbol + ? Symbol.observable + : "@@observable"; + var Observable = (function () { + function Observable(subscribe) { + this._subscribe = subscribe; + } + Observable.prototype.subscribe = function (x, error, complete) { + return this._subscribe(!x || typeof x === "function" ? { next: x, error: error, complete: complete } : x); + }; + Observable.prototype[symbolObservable] = function () { + return this; + }; + return Observable; + }()); + + var domDeps; + try { + domDeps = { + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; + } + catch (e) { + domDeps = { indexedDB: null, IDBKeyRange: null }; + } + + function liveQuery(querier) { + var hasValue = false; + var currentValue; + var observable = new Observable(function (observer) { + var scopeFuncIsAsync = isAsyncFunction(querier); + function execute(ctx) { + var wasRootExec = beginMicroTickScope(); + try { + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + var rv = newScope(querier, ctx); + if (scopeFuncIsAsync) { + rv = rv.finally(decrementExpectedAwaits); + } + return rv; + } + finally { + wasRootExec && endMicroTickScope(); + } + } + var closed = false; + var abortController; + var accumMuts = {}; + var currentObs = {}; + var subscription = { + get closed() { + return closed; + }, + unsubscribe: function () { + if (closed) + return; + closed = true; + if (abortController) + abortController.abort(); + if (startedListening) + globalEvents.storagemutated.unsubscribe(mutationListener); + }, + }; + observer.start && observer.start(subscription); + var startedListening = false; + var doQuery = function () { return execInGlobalContext(_doQuery); }; + function shouldNotify() { + return obsSetsOverlap(currentObs, accumMuts); + } + var mutationListener = function (parts) { + extendObservabilitySet(accumMuts, parts); + if (shouldNotify()) { + doQuery(); + } + }; + var _doQuery = function () { + if (closed || + !domDeps.indexedDB) + { + return; + } + accumMuts = {}; + var subscr = {}; + if (abortController) + abortController.abort(); + abortController = new AbortController(); + var ctx = { + subscr: subscr, + signal: abortController.signal, + requery: doQuery, + querier: querier, + trans: null + }; + var ret = execute(ctx); + Promise.resolve(ret).then(function (result) { + hasValue = true; + currentValue = result; + if (closed || ctx.signal.aborted) { + return; + } + accumMuts = {}; + currentObs = subscr; + if (!objectIsEmpty(currentObs) && !startedListening) { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener); + startedListening = true; + } + execInGlobalContext(function () { return !closed && observer.next && observer.next(result); }); + }, function (err) { + hasValue = false; + if (!['DatabaseClosedError', 'AbortError'].includes(err === null || err === void 0 ? void 0 : err.name)) { + if (!closed) + execInGlobalContext(function () { + if (closed) + return; + observer.error && observer.error(err); + }); + } + }); + }; + setTimeout(doQuery, 0); + return subscription; + }); + observable.hasValue = function () { return hasValue; }; + observable.getValue = function () { return currentValue; }; + return observable; + } + + var Dexie = Dexie$1; + props(Dexie, __assign(__assign({}, fullNameExceptions), { + delete: function (databaseName) { + var db = new Dexie(databaseName, { addons: [] }); + return db.delete(); + }, + exists: function (name) { + return new Dexie(name, { addons: [] }).open().then(function (db) { + db.close(); + return true; + }).catch('NoSuchDatabaseError', function () { return false; }); + }, + getDatabaseNames: function (cb) { + try { + return getDatabaseNames(Dexie.dependencies).then(cb); + } + catch (_a) { + return rejection(new exceptions.MissingAPI()); + } + }, + defineClass: function () { + function Class(content) { + extend(this, content); + } + return Class; + }, ignoreTransaction: function (scopeFunc) { + return PSD.trans ? + usePSD(PSD.transless, scopeFunc) : + scopeFunc(); + }, vip: vip, async: function (generatorFn) { + return function () { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }; + }, spawn: function (generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }, + currentTransaction: { + get: function () { return PSD.trans || null; } + }, waitFor: function (promiseOrFunction, optionalTimeout) { + var promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ? + Dexie.ignoreTransaction(promiseOrFunction) : + promiseOrFunction) + .timeout(optionalTimeout || 60000); + return PSD.trans ? + PSD.trans.waitFor(promise) : + promise; + }, + Promise: DexiePromise, + debug: { + get: function () { return debug; }, + set: function (value) { + setDebug(value); + } + }, + derive: derive, extend: extend, props: props, override: override, + Events: Events, on: globalEvents, liveQuery: liveQuery, extendObservabilitySet: extendObservabilitySet, + getByKeyPath: getByKeyPath, setByKeyPath: setByKeyPath, delByKeyPath: delByKeyPath, shallowClone: shallowClone, deepClone: deepClone, getObjectDiff: getObjectDiff, cmp: cmp, asap: asap$1, + minKey: minKey, + addons: [], + connections: connections, + errnames: errnames, + dependencies: domDeps, cache: cache, + semVer: DEXIE_VERSION, version: DEXIE_VERSION.split('.') + .map(function (n) { return parseInt(n); }) + .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }) })); + Dexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange); + + if (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function (updatedParts) { + if (!propagatingLocally) { + var event_1; + event_1 = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, { + detail: updatedParts + }); + propagatingLocally = true; + dispatchEvent(event_1); + propagatingLocally = false; + } + }); + addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, function (_a) { + var detail = _a.detail; + if (!propagatingLocally) { + propagateLocally(detail); + } + }); + } + function propagateLocally(updateParts) { + var wasMe = propagatingLocally; + try { + propagatingLocally = true; + globalEvents.storagemutated.fire(updateParts); + signalSubscribersNow(updateParts, true); + } + finally { + propagatingLocally = wasMe; + } + } + var propagatingLocally = false; + + var bc; + var createBC = function () { }; + if (typeof BroadcastChannel !== 'undefined') { + createBC = function () { + bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME); + bc.onmessage = function (ev) { return ev.data && propagateLocally(ev.data); }; + }; + createBC(); + if (typeof bc.unref === 'function') { + bc.unref(); + } + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function (changedParts) { + if (!propagatingLocally) { + bc.postMessage(changedParts); + } + }); + } + + if (typeof addEventListener !== 'undefined') { + addEventListener('pagehide', function (event) { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pagehide'); + bc === null || bc === void 0 ? void 0 : bc.close(); + for (var _i = 0, connections_1 = connections; _i < connections_1.length; _i++) { + var db = connections_1[_i]; + db.close({ disableAutoOpen: false }); + } + } + }); + addEventListener('pageshow', function (event) { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pageshow'); + createBC(); + propagateLocally({ all: new RangeSet(-Infinity, [[]]) }); + } + }); + } + + function add(value) { + return new PropModification({ add: value }); + } + + function remove(value) { + return new PropModification({ remove: value }); + } + + function replacePrefix(a, b) { + return new PropModification({ replacePrefix: [a, b] }); + } + + DexiePromise.rejectionMapper = mapError; + setDebug(debug); + + var namedExports = /*#__PURE__*/Object.freeze({ + __proto__: null, + Dexie: Dexie$1, + liveQuery: liveQuery, + Entity: Entity, + cmp: cmp, + PropModSymbol: PropModSymbol, + PropModification: PropModification, + replacePrefix: replacePrefix, + add: add, + remove: remove, + 'default': Dexie$1, + RangeSet: RangeSet, + mergeRanges: mergeRanges, + rangesOverlap: rangesOverlap + }); + + __assign(Dexie$1, namedExports, { default: Dexie$1 }); + + return Dexie$1; + +})); +//# sourceMappingURL=dexie.js.map diff --git a/src/dexie/dist/dexie.js.map b/src/dexie/dist/dexie.js.map new file mode 100644 index 000000000..29172da0a --- /dev/null +++ b/src/dexie/dist/dexie.js.map @@ -0,0 +1 @@ +{"version":3,"file":"dexie.js","sources":["../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.es6.js","../src/globals/global.ts","../src/functions/utils.ts","../src/errors/errors.js","../src/functions/chaining-functions.js","../src/helpers/debug.ts","../src/helpers/promise.js","../src/functions/temp-transaction.ts","../src/globals/constants.ts","../src/functions/combine.ts","../src/dbcore/keyrange.ts","../src/functions/workaround-undefined-primkey.ts","../src/classes/entity/Entity.ts","../src/functions/cmp.ts","../src/classes/table/table.ts","../src/helpers/Events.js","../src/functions/make-class-constructor.ts","../src/classes/table/table-constructor.ts","../src/classes/collection/collection-helpers.ts","../src/helpers/prop-modification.ts","../src/classes/collection/collection.ts","../src/classes/collection/collection-constructor.ts","../src/functions/compare-functions.ts","../src/classes/where-clause/where-clause-helpers.ts","../src/classes/where-clause/where-clause.ts","../src/classes/where-clause/where-clause-constructor.ts","../src/functions/event-wrappers.ts","../src/globals/global-events.ts","../src/classes/transaction/transaction.ts","../src/classes/transaction/transaction-constructor.ts","../src/helpers/index-spec.ts","../src/helpers/table-schema.ts","../src/functions/quirks.ts","../src/dbcore/get-key-extractor.ts","../src/dbcore/dbcore-indexeddb.ts","../src/classes/dexie/generate-middleware-stacks.ts","../src/classes/version/schema-helpers.ts","../src/classes/version/version.ts","../src/classes/version/version-constructor.ts","../src/helpers/database-enumerator.ts","../src/classes/dexie/vip.ts","../node_modules/.pnpm/safari-14-idb-fix@3.0.0/node_modules/safari-14-idb-fix/dist/index.js","../src/helpers/rangeset.ts","../src/live-query/extend-observability-set.ts","../src/live-query/obs-sets-overlap.ts","../src/live-query/cache/cache.ts","../src/live-query/cache/signalSubscribers.ts","../src/classes/dexie/dexie-open.ts","../src/helpers/yield-support.ts","../src/classes/dexie/transaction-helpers.ts","../src/dbcore/virtual-index-middleware.ts","../src/functions/get-object-diff.ts","../src/dbcore/get-effective-keys.ts","../src/hooks/hooks-middleware.ts","../src/dbcore/cache-existing-values-middleware.ts","../src/live-query/cache/is-cachable-context.ts","../src/live-query/cache/is-cachable-request.ts","../src/live-query/observability-middleware.ts","../src/live-query/cache/adjust-optimistic-request-from-failures.ts","../src/live-query/cache/is-within-range.ts","../src/live-query/cache/apply-optimistic-ops.ts","../src/live-query/cache/are-ranges-equal.ts","../src/live-query/cache/is-super-range.ts","../src/live-query/cache/find-compatible-query.ts","../src/live-query/cache/subscribe-cachentry.ts","../src/live-query/cache/cache-middleware.ts","../src/helpers/vipify.ts","../src/classes/dexie/dexie.ts","../src/classes/observable/observable.ts","../src/classes/dexie/dexie-dom-dependencies.ts","../src/live-query/live-query.ts","../src/classes/dexie/dexie-static-props.ts","../src/live-query/propagate-locally.ts","../src/live-query/enable-broadcast.ts","../src/support-bfcache.ts","../src/functions/propmods/add.ts","../src/functions/propmods/remove.ts","../src/functions/propmods/replace-prefix.ts","../src/index.ts","../src/index-umd.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","declare var global;\nexport const _global: any =\n typeof globalThis !== 'undefined' ? globalThis :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window :\n global;\n","import { _global } from \"../globals/global\";\nexport const keys = Object.keys;\nexport const isArray = Array.isArray;\nif (typeof Promise !== 'undefined' && !_global.Promise){\n // In jsdom, this it can be the case that Promise is not put on the global object.\n // If so, we need to patch the global object for the rest of the code to work as expected.\n // Other dexie code expects Promise to be on the global object (like normal browser environments)\n _global.Promise = Promise;\n}\nexport { _global }\n\nexport function extend(obj: T, extension: X): T & X {\n if (typeof extension !== 'object') return obj as T & X;\n keys(extension).forEach(function (key) {\n obj[key] = extension[key];\n });\n return obj as T & X;\n}\n\nexport const getProto = Object.getPrototypeOf;\nexport const _hasOwn = {}.hasOwnProperty;\nexport function hasOwn(obj, prop) {\n return _hasOwn.call(obj, prop);\n}\n\nexport function props (proto, extension) {\n if (typeof extension === 'function') extension = extension(getProto(proto));\n (typeof Reflect === \"undefined\" ? keys : Reflect.ownKeys)(extension).forEach(key => {\n setProp(proto, key, extension[key]);\n });\n}\n\nexport const defineProperty = Object.defineProperty;\n\nexport function setProp(obj, prop, functionOrGetSet, options?) {\n defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ?\n {get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true} :\n {value: functionOrGetSet, configurable: true, writable: true}, options));\n}\n\nexport function derive(Child) {\n return {\n from: function (Parent) {\n Child.prototype = Object.create(Parent.prototype);\n setProp(Child.prototype, \"constructor\", Child);\n return {\n extend: props.bind(null, Child.prototype)\n };\n }\n };\n}\n\nexport const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nexport function getPropertyDescriptor(obj, prop) {\n const pd = getOwnPropertyDescriptor(obj, prop);\n let proto;\n return pd || (proto = getProto(obj)) && getPropertyDescriptor (proto, prop);\n}\n\nconst _slice = [].slice;\nexport function slice(args, start?, end?) {\n return _slice.call(args, start, end);\n}\n\nexport function override(origFunc, overridedFactory) {\n return overridedFactory(origFunc);\n}\n\nexport function assert (b) {\n if (!b) throw new Error(\"Assertion Failed\");\n}\n\nexport function asap(fn) {\n // @ts-ignore\n if (_global.setImmediate) setImmediate(fn); else setTimeout(fn, 0);\n}\n\nexport function getUniqueArray(a) {\n return a.filter((value, index, self) => self.indexOf(value) === index);\n}\n\n/** Generate an object (hash map) based on given array.\n * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to\n * instert on the resulting object for each item in the array. If this function returns a falsy value, the\n * current item wont affect the resulting object.\n */\nexport function arrayToObject (array: T[], extractor: (x:T, idx: number)=>[string, R]): {[name: string]: R} {\n return array.reduce((result, item, i) => {\n var nameAndValue = extractor(item, i);\n if (nameAndValue) result[nameAndValue[0]] = nameAndValue[1];\n return result;\n }, {});\n}\n\nexport function trycatcher(fn, reject) {\n return function () {\n try {\n fn.apply(this, arguments);\n } catch (e) {\n reject(e);\n }\n };\n}\n\nexport function tryCatch(fn: (...args: any[])=>void, onerror, args?) : void {\n try {\n fn.apply(null, args);\n } catch (ex) {\n onerror && onerror(ex);\n }\n}\n\nexport function getByKeyPath(obj, keyPath) {\n // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path\n if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) return obj[keyPath]; // This line is moved from last to first for optimization purpose.\n if (!keyPath) return obj;\n if (typeof keyPath !== 'string') {\n var rv = [];\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n var val = getByKeyPath(obj, keyPath[i]);\n rv.push(val);\n }\n return rv;\n }\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var innerObj = obj[keyPath.substr(0, period)];\n return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n }\n return undefined;\n}\n\nexport function setByKeyPath(obj, keyPath, value) {\n if (!obj || keyPath === undefined) return;\n if ('isFrozen' in Object && Object.isFrozen(obj)) return;\n if (typeof keyPath !== 'string' && 'length' in keyPath) {\n assert(typeof value !== 'string' && 'length' in value);\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n setByKeyPath(obj, keyPath[i], value[i]);\n }\n } else {\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var currentKeyPath = keyPath.substr(0, period);\n var remainingKeyPath = keyPath.substr(period + 1);\n if (remainingKeyPath === \"\")\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) obj.splice(currentKeyPath, 1);\n else delete obj[currentKeyPath];\n } else obj[currentKeyPath] = value;\n else {\n var innerObj = obj[currentKeyPath];\n if (!innerObj || !hasOwn(obj, currentKeyPath)) innerObj = (obj[currentKeyPath] = {});\n setByKeyPath(innerObj, remainingKeyPath, value);\n }\n } else {\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(keyPath))) obj.splice(keyPath, 1);\n else delete obj[keyPath];\n } else obj[keyPath] = value;\n }\n }\n}\n\nexport function delByKeyPath(obj, keyPath) {\n if (typeof keyPath === 'string')\n setByKeyPath(obj, keyPath, undefined);\n else if ('length' in keyPath)\n [].map.call(keyPath, function(kp) {\n setByKeyPath(obj, kp, undefined);\n });\n}\n\nexport function shallowClone(obj) {\n var rv = {};\n for (var m in obj) {\n if (hasOwn(obj, m)) rv[m] = obj[m];\n }\n return rv;\n}\n\nconst concat = [].concat;\nexport function flatten (a: (T | T[])[]) : T[] {\n return concat.apply([], a);\n}\n\n//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\nconst intrinsicTypeNames =\n \"BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey\"\n .split(',').concat(\n flatten([8,16,32,64].map(num=>[\"Int\",\"Uint\",\"Float\"].map(t=>t+num+\"Array\")))\n ).filter(t=>_global[t]);\nconst intrinsicTypes = new Set(intrinsicTypeNames.map(t=>_global[t]));\n\n/** Deep clone a simple object tree.\n * \n * Copies object tree deeply, but does not deep-copy arrays,\n * typed arrays, Dates or other intrinsic types.\n * \n * Does not check for cyclic references.\n * \n * This function is 6 times faster than structuredClone() on chromium 111.\n * \n * This function can safely be used for cloning ObservabilitySets and RangeSets.\n * \n * @param o Object to clone\n * @returns Cloned object\n */\nexport function cloneSimpleObjectTree(o: T): T {\n const rv = {} as T;\n for (const k in o) if (hasOwn(o, k)) {\n const v = o[k];\n rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v);\n }\n return rv;\n}\n\nexport function objectIsEmpty(o: object) {\n for (const k in o) if (hasOwn(o, k)) return false;\n return true;\n}\n\nlet circularRefs: null | WeakMap = null;\n\n/** Deep clone an object or array.\n * \n * \n * @param any \n * @returns \n */\nexport function deepClone(any: T): T {\n circularRefs = new WeakMap();\n const rv = innerDeepClone(any);\n circularRefs = null;\n return rv;\n}\n\nfunction innerDeepClone(x: T): T {\n if (!x || typeof x !== 'object') return x;\n let rv = circularRefs.get(x); // Resolve circular references\n if (rv) return rv;\n if (isArray(x)) {\n rv = [];\n circularRefs.set(x, rv);\n for (var i = 0, l = x.length; i < l; ++i) {\n rv.push(innerDeepClone(x[i]));\n }\n } else if (intrinsicTypes.has(x.constructor)) {\n // For performance, we're less strict than structuredClone - we're only\n // cloning arrays and custom objects.\n // Typed arrays, Dates etc are not cloned.\n rv = x;\n } else {\n // We're nicer to custom classes than what structuredClone() is -\n // we preserve the proto of each object.\n const proto = getProto(x);\n rv = proto === Object.prototype ? {} : Object.create(proto);\n circularRefs.set(x, rv);\n for (var prop in x) {\n if (hasOwn(x, prop)) {\n rv[prop] = innerDeepClone(x[prop]);\n }\n }\n }\n return rv;\n}\n\nconst {toString} = {};\nexport function toStringTag(o: Object) {\n return toString.call(o).slice(8, -1);\n}\n\n// If first argument is iterable or array-like, return it as an array\nexport const iteratorSymbol = typeof Symbol !== 'undefined' ?\n Symbol.iterator :\n '@@iterator';\nexport const getIteratorOf = typeof iteratorSymbol === \"symbol\" ? function(x) {\n var i;\n return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nexport const asyncIteratorSymbol = typeof Symbol !== 'undefined'\n ? Symbol.asyncIterator || Symbol.for(\"Symbol.asyncIterator\")\n : '@asyncIterator';\n\nexport function delArrayItem(a: any[], x: any) {\n const i = a.indexOf(x);\n if (i >= 0) a.splice(i, 1);\n return i >= 0;\n}\n\nexport const NO_CHAR_ARRAY = {};\n// Takes one or several arguments and returns an array based on the following criteras:\n// * If several arguments provided, return arguments converted to an array in a way that\n// still allows javascript engine to optimize the code.\n// * If single argument is an array, return a clone of it.\n// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special\n// case to the two bullets below.\n// * If single argument is an iterable, convert it to an array and return the resulting array.\n// * If single argument is array-like (has length of type number), convert it to an array.\nexport function getArrayOf (arrayLike) {\n var i, a, x, it;\n if (arguments.length === 1) {\n if (isArray(arrayLike)) return arrayLike.slice();\n if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') return [arrayLike];\n if ((it = getIteratorOf(arrayLike))) {\n a = [];\n while ((x = it.next()), !x.done) a.push(x.value);\n return a;\n }\n if (arrayLike == null) return [arrayLike];\n i = arrayLike.length;\n if (typeof i === 'number') {\n a = new Array(i);\n while (i--) a[i] = arrayLike[i];\n return a;\n }\n return [arrayLike];\n }\n i = arguments.length;\n a = new Array(i);\n while (i--) a[i] = arguments[i];\n return a;\n}\nexport const isAsyncFunction = typeof Symbol !== 'undefined'\n ? (fn: Function) => fn[Symbol.toStringTag] === 'AsyncFunction'\n : ()=>false;\n","import { derive, setProp } from '../functions/utils';\n\nvar dexieErrorNames = [\n 'Modify',\n 'Bulk',\n 'OpenFailed',\n 'VersionChange',\n 'Schema',\n 'Upgrade',\n 'InvalidTable',\n 'MissingAPI',\n 'NoSuchDatabase',\n 'InvalidArgument',\n 'SubTransaction',\n 'Unsupported',\n 'Internal',\n 'DatabaseClosed',\n 'PrematureCommit',\n 'ForeignAwait'\n];\n\nvar idbDomErrorNames = [\n 'Unknown',\n 'Constraint',\n 'Data',\n 'TransactionInactive',\n 'ReadOnly',\n 'Version',\n 'NotFound',\n 'InvalidState',\n 'InvalidAccess',\n 'Abort',\n 'Timeout',\n 'QuotaExceeded',\n 'Syntax',\n 'DataClone'\n];\n\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\n\nvar defaultTexts = {\n VersionChanged: \"Database version changed by other database connection\",\n DatabaseClosed: \"Database has been closed\",\n Abort: \"Transaction aborted\",\n TransactionInactive: \"Transaction has already completed or failed\",\n MissingAPI: \"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb\"\n};\n\n//\n// DexieError - base class of all out exceptions.\n//\nexport function DexieError (name, msg) {\n // Reason we don't use ES6 classes is because:\n // 1. It bloats transpiled code and increases size of minified code.\n // 2. It doesn't give us much in this case.\n // 3. It would require sub classes to call super(), which\n // is not needed when deriving from Error.\n this.name = name;\n this.message = msg;\n}\n\nderive(DexieError).from(Error).extend({\n toString: function(){ return this.name + \": \" + this.message; }\n});\n\nfunction getMultiErrorMessage (msg, failures) {\n return msg + \". Errors: \" + Object.keys(failures)\n .map(key=>failures[key].toString())\n .filter((v,i,s)=>s.indexOf(v) === i) // Only unique error strings\n .join('\\n');\n}\n\n//\n// ModifyError - thrown in Collection.modify()\n// Specific constructor because it contains members failures and failedKeys.\n//\nexport function ModifyError (msg, failures, successCount, failedKeys) {\n this.failures = failures;\n this.failedKeys = failedKeys;\n this.successCount = successCount;\n this.message = getMultiErrorMessage(msg, failures);\n}\nderive(ModifyError).from(DexieError);\n\nexport function BulkError (msg, failures) {\n this.name = \"BulkError\";\n this.failures = Object.keys(failures).map(pos => failures[pos]);\n this.failuresByPos = failures;\n this.message = getMultiErrorMessage(msg, this.failures);\n}\nderive(BulkError).from(DexieError);\n\n//\n//\n// Dynamically generate error names and exception classes based\n// on the names in errorList.\n//\n//\n\n// Map of {ErrorName -> ErrorName + \"Error\"}\nexport var errnames = errorList.reduce((obj,name)=>(obj[name]=name+\"Error\",obj),{});\n\n// Need an alias for DexieError because we're gonna create subclasses with the same name.\nconst BaseException = DexieError;\n// Map of {ErrorName -> exception constructor}\nexport var exceptions = errorList.reduce((obj,name)=>{\n // Let the name be \"DexieError\" because this name may\n // be shown in call stack and when debugging. DexieError is\n // the most true name because it derives from DexieError,\n // and we cannot change Function.name programatically without\n // dynamically create a Function object, which would be considered\n // 'eval-evil'.\n var fullName = name + \"Error\";\n function DexieError (msgOrInner, inner){\n this.name = fullName;\n if (!msgOrInner) {\n this.message = defaultTexts[name] || fullName;\n this.inner = null;\n } else if (typeof msgOrInner === 'string') {\n this.message = `${msgOrInner}${!inner ? '' : '\\n ' + inner}`;\n this.inner = inner || null;\n } else if (typeof msgOrInner === 'object') {\n this.message = `${msgOrInner.name} ${msgOrInner.message}`;\n this.inner = msgOrInner;\n }\n }\n derive(DexieError).from(BaseException);\n obj[name]=DexieError;\n return obj;\n},{});\n\n// Use ECMASCRIPT standard exceptions where applicable:\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\n\nexport var exceptionMap = idbDomErrorNames.reduce((obj, name)=>{\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nexport function mapError (domError, message) {\n if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])\n return domError;\n var rv = new exceptionMap[domError.name](message || domError.message, domError);\n if (\"stack\" in domError) {\n // Derive stack from inner exception if it has a stack\n setProp(rv, \"stack\", {get: function(){\n return this.inner.stack;\n }});\n }\n return rv;\n}\n\nexport var fullNameExceptions = errorList.reduce((obj, name)=>{\n if ([\"Syntax\",\"Type\",\"Range\"].indexOf(name) === -1)\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n","import {extend} from './utils';\n\nexport function nop() { }\nexport function mirror(val) { return val; }\nexport function pureFunctionChain(f1, f2) {\n // Enables chained events that takes ONE argument and returns it to the next function in chain.\n // This pattern is used in the hook(\"reading\") event.\n if (f1 == null || f1 === mirror) return f2;\n return function (val) {\n return f2(f1(val));\n };\n}\n\nexport function callBoth(on1, on2) {\n return function () {\n on1.apply(this, arguments);\n on2.apply(this, arguments);\n };\n}\n\nexport function hookCreatingChain(f1, f2) {\n // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance.\n // This pattern is used in the hook(\"creating\") event.\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res !== undefined) arguments[0] = res;\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res2 !== undefined ? res2 : res;\n };\n}\n\nexport function hookDeletingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = this.onerror = null;\n f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n };\n}\n\nexport function hookUpdatingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function (modifications) {\n var res = f1.apply(this, arguments);\n extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain.\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res === undefined ?\n (res2 === undefined ? undefined : res2) :\n (extend(res, res2));\n };\n}\n\nexport function reverseStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n if (f2.apply(this, arguments) === false) return false;\n return f1.apply(this, arguments);\n };\n}\n\nexport function nonStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n f2.apply(this, arguments);\n };\n}\n\nexport function promisableChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res && typeof res.then === 'function') {\n var thiz = this,\n i = arguments.length,\n args = new Array(i);\n while (i--) args[i] = arguments[i];\n return res.then(function () {\n return f2.apply(thiz, args);\n });\n }\n return f2.apply(this, arguments);\n };\n}\n","// By default, debug will be true only if platform is a web platform and its page is served from localhost.\n// When debug = true, error's stacks will contain asyncronic long stacks.\nexport var debug = typeof location !== 'undefined' &&\n // By default, use debug mode if served from localhost.\n /^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\n\nexport function setDebug(value, filter) {\n debug = value;\n}\n\nexport function deprecated (what: string, fn: (...args)=>T) {\n return function () {\n console.warn(`${what} is deprecated. See https://dexie.org/docs/Deprecations}`);\n return fn.apply(this, arguments);\n } as (...args)=>T\n}\n","/*\n * Copyright (c) 2014-2017 David Fahlander\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n */\nimport { _global } from '../globals/global';\nimport {tryCatch, props, setProp,\n getPropertyDescriptor, getArrayOf, extend, getProto} from '../functions/utils';\nimport {nop, callBoth, mirror} from '../functions/chaining-functions';\nimport {debug} from './debug';\nimport {exceptions} from '../errors';\n\n//\n// Promise and Zone (PSD) for Dexie library\n//\n// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by\n// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation.\n//\n// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another\n// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use\n// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task\n// engine that is indexedDB compliant across all browsers.\n// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible.\n//\n// Specific non-standard features of this Promise class:\n// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as\n// native async / await.\n// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame\n// and below + all promises that those promises creates or awaits.\n// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). \n//\n// David Fahlander, https://github.com/dfahlander\n//\n\n// Just a pointer that only this module knows about.\n// Used in Promise constructor to emulate a private constructor.\nvar INTERNAL = {};\n\nconst\n ZONE_ECHO_LIMIT = 100,\n [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ?\n [] :\n (()=>{\n let globalP = Promise.resolve();\n if (typeof crypto === 'undefined' || !crypto.subtle)\n return [globalP, getProto(globalP), globalP];\n // Generate a native promise (as window.Promise may have been patched)\n const nativeP = crypto.subtle.digest(\"SHA-512\", new Uint8Array([0]));\n return [\n nativeP,\n getProto(nativeP),\n globalP\n ];\n })(),\n nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\n\nexport const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nconst patchGlobalPromise = !!resolvedGlobalPromise;\n\n/* The default function used only for the very first promise in a promise chain.\n As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks\n emulated in this module. For indexedDB compatibility, this means that every method needs to \n execute at least one promise before doing an indexedDB operation. Dexie will always call \n db.ready().then() for every operation to make sure the indexedDB event is started in an\n indexedDB-compatible emulated micro task loop.\n*/\nfunction schedulePhysicalTick() {\n queueMicrotask(physicalTick);\n}\n\n// Configurable through Promise.scheduler.\n// Don't export because it would be unsafe to let unknown\n// code call it unless they do try..catch within their callback.\n// This function can be retrieved through getter of Promise.scheduler though,\n// but users must not do Promise.scheduler = myFuncThatThrowsException\nvar asap = function (callback, args) {\n microtickQueue.push([callback, args]);\n if (needsNewPhysicalTick) {\n schedulePhysicalTick();\n needsNewPhysicalTick = false;\n }\n};\n\nvar isOutsideMicroTick = true, // True when NOT in a virtual microTick.\n needsNewPhysicalTick = true, // True when a push to microtickQueue must also schedulePhysicalTick()\n unhandledErrors = [], // Rejected promises that has occured. Used for triggering 'unhandledrejection'.\n rejectingErrors = [], // Tracks if errors are being re-rejected during onRejected callback.\n rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions\n \nexport var globalPSD = {\n id: 'global',\n global: true,\n ref: 0,\n unhandleds: [],\n onunhandled: nop,\n pgp: false,\n env: {},\n finalize: nop\n};\n\nexport var PSD = globalPSD;\n\nexport var microtickQueue = []; // Callbacks to call in this or next physical tick.\nexport var numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick.\nexport var tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick.\n\nexport default function DexiePromise(fn) {\n if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); \n this._listeners = [];\n \n // A library may set `promise._lib = true;` after promise is created to make resolve() or reject()\n // execute the microtask engine implicitely within the call to resolve() or reject().\n // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack\n // only contains library code when calling resolve() or reject().\n // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from\n // global scope (event handler, timer etc)!\n this._lib = false;\n // Current async scope\n var psd = (this._PSD = PSD);\n \n if (typeof fn !== 'function') {\n if (fn !== INTERNAL) throw new TypeError('Not a function');\n // Private constructor (INTERNAL, state, value).\n // Used internally by Promise.resolve() and Promise.reject().\n this._state = arguments[1];\n this._value = arguments[2];\n if (this._state === false)\n handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError().\n return;\n }\n \n this._state = null; // null (=pending), false (=rejected) or true (=resolved)\n this._value = null; // error or result\n ++psd.ref; // Refcounting current scope\n executePromiseTask(this, fn);\n}\n\n// Prepare a property descriptor to put onto Promise.prototype.then\nconst thenProp = {\n get: function() {\n var psd = PSD, microTaskId = totalEchoes;\n\n function then (onFulfilled, onRejected) {\n var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n const cleanup = possibleAwait && !decrementExpectedAwaits();\n var rv = new DexiePromise((resolve, reject) => {\n propagateToListener(this, new Listener(\n nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup),\n nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup),\n resolve,\n reject,\n psd));\n });\n if (this._consoleTask) rv._consoleTask = this._consoleTask;\n return rv;\n }\n\n then.prototype = INTERNAL; // For idempotense, see setter below.\n\n return then;\n },\n // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then\n // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor.\n set: function (value) {\n setProp (this, 'then', value && value.prototype === INTERNAL ?\n thenProp : // Restore to original property descriptor.\n {\n get: function(){\n return value; // Getter returning provided value (behaves like value is just changed)\n },\n set: thenProp.set // Keep a setter that is prepared to restore original.\n }\n );\n }\n};\n\nprops(DexiePromise.prototype, {\n then: thenProp, // Defined above.\n _then: function (onFulfilled, onRejected) {\n // A little tinier version of then() that don't have to create a resulting promise.\n propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); \n },\n\n catch: function (onRejected) {\n if (arguments.length === 1) return this.then(null, onRejected);\n // First argument is the Error type to catch\n var type = arguments[0],\n handler = arguments[1];\n return typeof type === 'function' ? this.then(null, err =>\n // Catching errors by its constructor type (similar to java / c++ / c#)\n // Sample: promise.catch(TypeError, function (e) { ... });\n err instanceof type ? handler(err) : PromiseReject(err))\n : this.then(null, err =>\n // Catching errors by the error.name property. Makes sense for indexedDB where error type\n // is always DOMError but where e.name tells the actual error type.\n // Sample: promise.catch('ConstraintError', function (e) { ... });\n err && err.name === type ? handler(err) : PromiseReject(err));\n },\n\n finally: function (onFinally) {\n return this.then(value => {\n return DexiePromise.resolve(onFinally()).then(()=>value);\n }, err => {\n return DexiePromise.resolve(onFinally()).then(()=>PromiseReject(err));\n });\n },\n \n timeout: function (ms, msg) {\n return ms < Infinity ?\n new DexiePromise((resolve, reject) => {\n var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms);\n this.then(resolve, reject).finally(clearTimeout.bind(null, handle));\n }) : this;\n }\n});\n\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag)\n setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise');\n\n// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env.\n// Environment globals snapshotted on leaving global zone\nglobalPSD.env = snapShot();\n\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n this.psd = zone;\n}\n\n// Promise Static Properties\nprops (DexiePromise, {\n all: function () {\n var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like.\n .map(onPossibleParallellAsync); // Handle parallell async/awaits \n return new DexiePromise(function (resolve, reject) {\n if (values.length === 0) resolve([]);\n var remaining = values.length;\n values.forEach((a,i) => DexiePromise.resolve(a).then(x => {\n values[i] = x;\n if (!--remaining) resolve(values);\n }, reject));\n });\n },\n \n resolve: value => {\n if (value instanceof DexiePromise) return value;\n if (value && typeof value.then === 'function') return new DexiePromise((resolve, reject)=>{\n value.then(resolve, reject);\n });\n var rv = new DexiePromise(INTERNAL, true, value);\n return rv;\n },\n \n reject: PromiseReject,\n \n race: function () {\n var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n values.map(value => DexiePromise.resolve(value).then(resolve, reject));\n });\n },\n\n PSD: {\n get: ()=>PSD,\n set: value => PSD = value\n },\n\n totalEchoes: {get: ()=>totalEchoes},\n\n //task: {get: ()=>task},\n \n newPSD: newScope,\n \n usePSD: usePSD,\n \n scheduler: {\n get: () => asap,\n set: value => {asap = value}\n },\n \n rejectionMapper: {\n get: () => rejectionMapper,\n set: value => {rejectionMapper = value;} // Map reject failures\n },\n \n follow: (fn, zoneProps) => {\n return new DexiePromise((resolve, reject) => {\n return newScope((resolve, reject) => {\n var psd = PSD;\n psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize()\n psd.onunhandled = reject; // Triggered directly on unhandled promises of this library.\n psd.finalize = callBoth(function () {\n // Unhandled standard or 3rd part promises are put in PSD.unhandleds and\n // examined upon scope completion while unhandled rejections in this Promise\n // will trigger directly through psd.onunhandled\n run_at_end_of_this_or_next_physical_tick(()=>{\n this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]);\n });\n }, psd.finalize);\n fn();\n }, zoneProps, resolve, reject);\n });\n }\n});\n\nif (NativePromise) {\n if (NativePromise.allSettled) setProp (DexiePromise, \"allSettled\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise(resolve => {\n if (possiblePromises.length === 0) resolve([]);\n let remaining = possiblePromises.length;\n const results = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => results[i] = {status: \"fulfilled\", value},\n reason => results[i] = {status: \"rejected\", reason})\n .then(()=>--remaining || resolve(results)));\n });\n });\n if (NativePromise.any && typeof AggregateError !== 'undefined') setProp(DexiePromise, \"any\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n if (possiblePromises.length === 0) reject(new AggregateError([]));\n let remaining = possiblePromises.length;\n const failures = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => resolve(value),\n failure => {\n failures[i] = failure;\n if (!--remaining) reject(new AggregateError(failures));\n }));\n });\n });\n}\n\n/**\n* Take a potentially misbehaving resolver function and make sure\n* onFulfilled and onRejected are only called once.\n*\n* Makes no guarantees about asynchrony.\n*/\nfunction executePromiseTask (promise, fn) {\n // Promise Resolution Procedure:\n // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n try {\n fn(value => {\n if (promise._state !== null) return; // Already settled\n if (value === promise) throw new TypeError('A promise cannot be resolved with itself.');\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n if (value && typeof value.then === 'function') {\n executePromiseTask(promise, (resolve, reject) => {\n value instanceof DexiePromise ?\n value._then(resolve, reject) :\n value.then(resolve, reject);\n });\n } else {\n promise._state = true;\n promise._value = value;\n propagateAllListeners(promise);\n }\n if (shouldExecuteTick) endMicroTickScope();\n }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below\n } catch (ex) {\n handleRejection(promise, ex);\n }\n}\n\nfunction handleRejection (promise, reason) {\n rejectingErrors.push(reason);\n if (promise._state !== null) return;\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n reason = rejectionMapper(reason);\n promise._state = false;\n promise._value = reason;\n // Add the failure to a list of possibly uncaught errors\n addPossiblyUnhandledError(promise);\n propagateAllListeners(promise);\n if (shouldExecuteTick) endMicroTickScope();\n}\n\nfunction propagateAllListeners (promise) {\n //debug && linkToPreviousPromise(promise);\n var listeners = promise._listeners;\n promise._listeners = [];\n for (var i = 0, len = listeners.length; i < len; ++i) {\n propagateToListener(promise, listeners[i]);\n }\n var psd = promise._PSD;\n --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize();\n if (numScheduledCalls === 0) {\n // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call,\n // and that no deferreds where listening to this rejection or success.\n // Since there is a risk that our stack can contain application code that may\n // do stuff after this code is finished that may generate new calls, we cannot\n // call finalizers here.\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick(); // Will detect unhandled errors\n }, []);\n }\n}\n\nfunction propagateToListener(promise, listener) {\n if (promise._state === null) {\n promise._listeners.push(listener);\n return;\n }\n\n var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n if (cb === null) {\n // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch()\n return (promise._state ? listener.resolve : listener.reject) (promise._value);\n }\n ++listener.psd.ref;\n ++numScheduledCalls;\n asap (callListener, [cb, promise, listener]);\n}\n\nfunction callListener (cb, promise, listener) {\n try {\n // Call callback and resolve our listener with it's return value.\n var ret, value = promise._value;\n \n if (!promise._state && rejectingErrors.length) rejectingErrors = [];\n // cb is onResolved\n ret = debug && promise._consoleTask ? promise._consoleTask.run(()=>cb (value)) : cb (value);\n if (!promise._state && rejectingErrors.indexOf(value) === -1) {\n markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise.\n }\n listener.resolve(ret);\n } catch (e) {\n // Exception thrown in callback. Reject our listener.\n listener.reject(e);\n } finally {\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n --listener.psd.ref || listener.psd.finalize();\n }\n}\n\n/* The callback to schedule with queueMicrotask().\n It runs a virtual microtick and executes any callback registered in microtickQueue.\n */\nfunction physicalTick() {\n usePSD(globalPSD, ()=>{\n // Make sure to reset the async context to globalPSD before\n // executing any of the microtick subscribers.\n beginMicroTickScope() && endMicroTickScope();\n });\n}\n\nexport function beginMicroTickScope() {\n var wasRootExec = isOutsideMicroTick;\n isOutsideMicroTick = false;\n needsNewPhysicalTick = false;\n return wasRootExec;\n}\n\n/* Executes micro-ticks without doing try..catch.\n This can be possible because we only use this internally and\n the registered functions are exception-safe (they do try..catch\n internally before calling any external method). If registering\n functions in the microtickQueue that are not exception-safe, this\n would destroy the framework and make it instable. So we don't export\n our asap method.\n*/\nexport function endMicroTickScope() {\n var callbacks, i, l;\n do {\n while (microtickQueue.length > 0) {\n callbacks = microtickQueue;\n microtickQueue = [];\n l = callbacks.length;\n for (i = 0; i < l; ++i) {\n var item = callbacks[i];\n item[0].apply(null, item[1]);\n }\n }\n } while (microtickQueue.length > 0);\n isOutsideMicroTick = true;\n needsNewPhysicalTick = true;\n}\n\nfunction finalizePhysicalTick() {\n var unhandledErrs = unhandledErrors;\n unhandledErrors = [];\n unhandledErrs.forEach(p => {\n p._PSD.onunhandled.call(null, p._value, p);\n });\n var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list.\n var i = finalizers.length;\n while (i) finalizers[--i](); \n}\n\nfunction run_at_end_of_this_or_next_physical_tick (fn) {\n function finalizer() {\n fn();\n tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n }\n tickFinalizers.push(finalizer);\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n }, []);\n}\n\nfunction addPossiblyUnhandledError(promise) {\n // Only add to unhandledErrors if not already there. The first one to add to this list\n // will be upon the first rejection so that the root cause (first promise in the\n // rejection chain) is the one listed.\n if (!unhandledErrors.some(p => p._value === promise._value))\n unhandledErrors.push(promise);\n}\n\nfunction markErrorAsHandled(promise) {\n // Called when a reject handled is actually being called.\n // Search in unhandledErrors for any promise whos _value is this promise_value (list\n // contains only rejected promises, and only one item per error)\n var i = unhandledErrors.length;\n while (i) if (unhandledErrors[--i]._value === promise._value) {\n // Found a promise that failed with this same error object pointer,\n // Remove that since there is a listener that actually takes care of it.\n unhandledErrors.splice(i, 1);\n return;\n }\n}\n\nfunction PromiseReject (reason) {\n return new DexiePromise(INTERNAL, false, reason);\n}\n\nexport function wrap (fn, errorCatcher) {\n var psd = PSD;\n return function() {\n var wasRootExec = beginMicroTickScope(),\n outerScope = PSD;\n\n try {\n switchToZone(psd, true);\n return fn.apply(this, arguments);\n } catch (e) {\n errorCatcher && errorCatcher(e);\n } finally {\n switchToZone(outerScope, false);\n if (wasRootExec) endMicroTickScope();\n }\n };\n}\n\n\n//\n// variables used for native await support\n//\nconst task = { awaits: 0, echoes: 0, id: 0}; // The ongoing macro-task when using zone-echoing.\nvar taskCounter = 0; // ID counter for macro tasks.\nvar zoneStack = []; // Stack of left zones to restore asynchronically.\nvar zoneEchoes = 0; // When > 0, zoneLeaveEcho is queued. When 0 and task.echoes is also 0, nothing is queued.\nvar totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then.\n\n\nvar zone_id_counter = 0;\nexport function newScope (fn, props, a1, a2) {\n var parent = PSD,\n psd = Object.create(parent);\n psd.parent = parent;\n psd.ref = 0;\n psd.global = false;\n psd.id = ++zone_id_counter;\n // Prepare for promise patching (done in usePSD):\n var globalEnv = globalPSD.env;\n psd.env = patchGlobalPromise ? {\n Promise: DexiePromise, // Changing window.Promise could be omitted for Chrome and Edge, where IDB+Promise plays well!\n PromiseProp: {value: DexiePromise, configurable: true, writable: true},\n all: DexiePromise.all,\n race: DexiePromise.race,\n allSettled: DexiePromise.allSettled,\n any: DexiePromise.any,\n resolve: DexiePromise.resolve,\n reject: DexiePromise.reject,\n } : {};\n if (props) extend(psd, props);\n \n // unhandleds and onunhandled should not be specifically set here.\n // Leave them on parent prototype.\n // unhandleds.push(err) will push to parent's prototype\n // onunhandled() will call parents onunhandled (with this scope's this-pointer though!)\n ++parent.ref;\n psd.finalize = function () {\n --this.parent.ref || this.parent.finalize();\n }\n var rv = usePSD (psd, fn, a1, a2);\n if (psd.ref === 0) psd.finalize();\n return rv;\n}\n\n// Function to call if scopeFunc returns NativePromise\n// Also for each NativePromise in the arguments to Promise.all()\nexport function incrementExpectedAwaits() {\n if (!task.id) task.id = ++taskCounter;\n ++task.awaits;\n task.echoes += ZONE_ECHO_LIMIT;\n return task.id;\n}\n\n// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called.\n// Also call this when a native await calls then method on a promise. In that case, don't supply\n// sourceTaskId because we already know it refers to current task.\nexport function decrementExpectedAwaits() {\n if (!task.awaits) return false;\n if (--task.awaits === 0) task.id = 0;\n task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0.\n return true;\n}\n\nif ((''+nativePromiseThen).indexOf('[native code]') === -1) {\n // If the native promise' prototype is patched, we cannot rely on zone echoing.\n // Disable that here:\n incrementExpectedAwaits = decrementExpectedAwaits = nop;\n}\n\n// Call from Promise.all() and Promise.race()\nexport function onPossibleParallellAsync (possiblePromise) {\n if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n incrementExpectedAwaits(); \n return possiblePromise.then(x => {\n decrementExpectedAwaits();\n return x;\n }, e => {\n decrementExpectedAwaits();\n return rejection(e);\n });\n }\n return possiblePromise;\n}\n\nfunction zoneEnterEcho(targetZone) {\n ++totalEchoes;\n //console.log(\"Total echoes \", totalEchoes);\n //if (task.echoes === 1) console.warn(\"Cancelling echoing of async context.\");\n if (!task.echoes || --task.echoes === 0) {\n task.echoes = task.awaits = task.id = 0; // Cancel echoing.\n }\n\n zoneStack.push(PSD);\n switchToZone(targetZone, true);\n}\n\nfunction zoneLeaveEcho() {\n var zone = zoneStack[zoneStack.length-1];\n zoneStack.pop();\n switchToZone(zone, false);\n}\n\nfunction switchToZone (targetZone, bEnteringZone) {\n var currentZone = PSD;\n if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {\n // Enter or leave zone asynchronically as well, so that tasks initiated during current tick\n // will be surrounded by the zone when they are invoked.\n queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n }\n if (targetZone === PSD) return;\n\n PSD = targetZone; // The actual zone switch occurs at this line.\n\n // Snapshot on every leave from global zone.\n if (currentZone === globalPSD) globalPSD.env = snapShot();\n\n if (patchGlobalPromise) {\n // Let's patch the global and native Promises (may be same or may be different)\n var GlobalPromise = globalPSD.env.Promise;\n // Swich environments (may be PSD-zone or the global zone. Both apply.)\n var targetEnv = targetZone.env;\n\n if (currentZone.global || targetZone.global) {\n // Leaving or entering global zone. It's time to patch / restore global Promise.\n\n // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular.\n Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);\n\n // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might\n // not be accessing global.Promise but a local reference to it)\n GlobalPromise.all = targetEnv.all;\n GlobalPromise.race = targetEnv.race;\n GlobalPromise.resolve = targetEnv.resolve;\n GlobalPromise.reject = targetEnv.reject;\n if (targetEnv.allSettled) GlobalPromise.allSettled = targetEnv.allSettled;\n if (targetEnv.any) GlobalPromise.any = targetEnv.any;\n }\n }\n}\n\nfunction snapShot () {\n var GlobalPromise = _global.Promise;\n return patchGlobalPromise ? {\n Promise: GlobalPromise,\n PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n all: GlobalPromise.all,\n race: GlobalPromise.race,\n allSettled: GlobalPromise.allSettled,\n any: GlobalPromise.any,\n resolve: GlobalPromise.resolve,\n reject: GlobalPromise.reject,\n } : {};\n}\n\nexport function usePSD (psd, fn, a1, a2, a3) {\n var outerScope = PSD;\n try {\n switchToZone(psd, true);\n return fn(a1, a2, a3);\n } finally {\n switchToZone(outerScope, false);\n }\n}\n\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) {\n return typeof fn !== 'function' ? fn : function () {\n var outerZone = PSD;\n if (possibleAwait) incrementExpectedAwaits();\n switchToZone(zone, true);\n try {\n return fn.apply(this, arguments);\n } finally {\n switchToZone(outerZone, false);\n if (cleanup) queueMicrotask(decrementExpectedAwaits);\n }\n };\n}\n\n/** Execute callback in global context */\nexport function execInGlobalContext(cb) {\n if (Promise === NativePromise && task.echoes === 0) {\n if (zoneEchoes === 0) {\n cb();\n } else {\n enqueueNativeMicroTask(cb);\n }\n } else {\n setTimeout(cb, 0);\n }\n}\n\nexport var rejection = DexiePromise.reject;\n\nexport {DexiePromise};\n","import { PSD, rejection, newScope } from \"../helpers/promise\";\nimport { DexieOptions } from \"../public/types/dexie-constructor\";\nimport { errnames, exceptions } from \"../errors\";\nimport { nop } from \"./chaining-functions\";\nimport { Transaction } from \"../classes/transaction\";\nimport { Dexie } from '../classes/dexie';\n\n/* Generate a temporary transaction when db operations are done outside a transaction scope.\n*/\nexport function tempTransaction (\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n fn: (resolve, reject, trans: Transaction) => any)\n // Last argument is \"writeLocked\". But this doesnt apply to oneshot direct db operations, so we ignore it.\n{\n if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) {\n if (db._state.openComplete) {\n // db.idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError));\n }\n if (!db._state.isBeingOpened) {\n if (!db._state.autoOpen)\n return rejection(new exceptions.DatabaseClosed());\n db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn));\n } else {\n var trans = db._createTransaction(mode, storeNames, db._dbSchema);\n try {\n trans.create();\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(()=>tempTransaction(db, mode, storeNames, fn));\n }\n return rejection(ex);\n }\n return trans._promise(mode, (resolve, reject) => {\n return newScope(() => { // OPTIMIZATION POSSIBLE? newScope() not needed because it's already done in _promise.\n PSD.trans = trans;\n return fn(resolve, reject, trans);\n });\n }).then(result => {\n // Instead of resolving value directly, wait with resolving it until transaction has completed.\n // Otherwise the data would not be in the DB if requesting it in the then() operation.\n // Specifically, to ensure that the following expression will work:\n //\n // db.friends.put({name: \"Arne\"}).then(function () {\n // db.friends.where(\"name\").equals(\"Arne\").count(function(count) {\n // assert (count === 1);\n // });\n // });\n //\n if (mode === 'readwrite') try {trans.idbtrans.commit();} catch {}\n return mode === 'readonly' ? result : trans._completion.then(() => result);\n });/*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major.\n trans._reject(err);\n return rejection(err);\n });*/\n }\n}\n","import { Dexie } from \"../classes/dexie\";\n\nexport const DEXIE_VERSION = '{version}'; // Replaced by build-script.\nexport const maxString = String.fromCharCode(65535);\nexport const minKey = -Infinity; // minKey can be constant. maxKey must be a prop of Dexie (_maxKey)\nexport const INVALID_KEY_ARGUMENT =\n \"Invalid key provided. Keys must be of type string, number, Date or Array.\";\nexport const STRING_EXPECTED = \"String expected.\";\nexport const connections: Dexie[] = [];\nexport const dexieStackFrameFilter = frame => !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\nexport const DBNAMES_DB = '__dbnames';\nexport const READONLY = 'readonly';\nexport const READWRITE = 'readwrite';\n","export function combine(filter1, filter2) {\n return filter1 ?\n filter2 ?\n function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :\n filter1 :\n filter2;\n}\n","import { DBCoreKeyRange, DBCoreRangeType } from '../public/types/dbcore';\n\nexport const AnyRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Any,\n lower: -Infinity,\n lowerOpen: false,\n upper: [[]],\n upperOpen: false\n}\n\nexport const NeverRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Never,\n lower: -Infinity,\n lowerOpen: true,\n upper: -Infinity,\n upperOpen: true\n}\n","import { deepClone, delByKeyPath, getByKeyPath } from './utils';\n\n// This workaround is needed since obj could be a custom-class instance with an\n// uninitialized keyPath. See the following comment for more context:\n// https://github.com/dfahlander/Dexie.js/issues/1280#issuecomment-823557881\nexport function workaroundForUndefinedPrimKey(keyPath: string | ArrayLike) {\n // Workaround only needed for plain non-dotted keyPaths\n return typeof keyPath === \"string\" && !/\\./.test(keyPath) \n ? (obj: object) => {\n if (obj[keyPath] === undefined && (keyPath in obj)) {\n // property exists but is undefined. This will not be liked by Indexeddb.\n // Need to remove the property before adding it but we need to clone it before\n // doing that to not be intrusive.\n obj = deepClone(obj);\n delete obj[keyPath];\n }\n return obj;\n }\n : (obj: object) => obj;\n}","import { exceptions } from \"../../errors\";\n\nexport function Entity(){\n throw exceptions.Type();\n}\n","// Implementation of https://www.w3.org/TR/IndexedDB-3/#compare-two-keys\n\nimport { toStringTag } from './utils';\n\n// ... with the adjustment to return NaN instead of throwing.\nexport function cmp(a: any, b: any): number {\n try {\n const ta = type(a);\n const tb = type(b);\n if (ta !== tb) {\n if (ta === 'Array') return 1;\n if (tb === 'Array') return -1;\n if (ta === 'binary') return 1;\n if (tb === 'binary') return -1;\n if (ta === 'string') return 1;\n if (tb === 'string') return -1;\n if (ta === 'Date') return 1;\n if (tb !== 'Date') return NaN;\n return -1;\n }\n switch (ta) {\n case 'number':\n case 'Date':\n case 'string':\n return a > b ? 1 : a < b ? -1 : 0;\n case 'binary': {\n return compareUint8Arrays(getUint8Array(a), getUint8Array(b));\n }\n case 'Array':\n return compareArrays(a, b);\n }\n } catch {}\n return NaN; // Return value if any given args are valid keys.\n}\n\nexport function compareArrays(a: any[], b: any[]): number {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n const res = cmp(a[i], b[i]);\n if (res !== 0) return res;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\nexport function compareUint8Arrays(\n a: Uint8Array,\n b: Uint8Array\n) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n if (a[i] !== b[i]) return a[i] < b[i] ? -1 : 1;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\n// Implementation of https://www.w3.org/TR/IndexedDB-3/#key-type\nfunction type(x: any) {\n const t = typeof x;\n if (t !== 'object') return t;\n if (ArrayBuffer.isView(x)) return 'binary';\n const tsTag = toStringTag(x); // Cannot use instanceof in Safari\n return tsTag === 'ArrayBuffer' ? 'binary' : (tsTag as 'Array' | 'Date');\n}\n\ntype BinaryType =\n | ArrayBuffer\n | DataView\n | Uint8ClampedArray\n | ArrayBufferView\n | Uint8Array\n | Int8Array\n | Uint16Array\n | Int16Array\n | Uint32Array\n | Int32Array\n | Float32Array\n | Float64Array\n | BigInt64Array \n | BigUint64Array;\n\nfunction getUint8Array(a: BinaryType): Uint8Array {\n if (a instanceof Uint8Array) return a;\n if (ArrayBuffer.isView(a))\n // TypedArray or DataView\n return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return new Uint8Array(a); // ArrayBuffer\n}\n","import { BulkError, exceptions } from '../../errors';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { DexiePromise as Promise, PSD, newScope, rejection, beginMicroTickScope, endMicroTickScope } from '../../helpers/promise';\nimport { Transaction } from '../transaction';\nimport { Dexie } from '../dexie';\nimport { tempTransaction } from '../../functions/temp-transaction';\nimport { Collection } from '../collection';\nimport { isArray, keys, getByKeyPath, setByKeyPath, extend, getProto } from '../../functions/utils';\nimport { maxString } from '../../globals/constants';\nimport { combine } from '../../functions/combine';\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { IndexableType } from '../../public/types/indexable-type';\nimport { debug } from '../../helpers/debug';\nimport { DBCoreTable } from '../../public/types/dbcore';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { workaroundForUndefinedPrimKey } from '../../functions/workaround-undefined-primkey';\nimport { Entity } from '../entity/Entity';\nimport { UpdateSpec } from '../../public';\nimport { cmp } from '../../functions/cmp';\n\n/** class Table\n * \n * https://dexie.org/docs/Table/Table\n */\nexport class Table implements ITable {\n db: Dexie;\n _tx?: Transaction;\n name: string;\n schema: TableSchema;\n hook: TableHooks;\n core: DBCoreTable;\n\n _trans(\n mode: IDBTransactionMode,\n fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike | void,\n writeLocked?: boolean | string) : PromiseExtended\n {\n const trans: Transaction = this._tx || PSD.trans;\n const tableName = this.name;\n // @ts-ignore: Use Chrome's Async Stack Tagging API to allow tracing and simplify debugging for dexie users.\n const task = debug && typeof console !== 'undefined' && console.createTask && console.createTask(`Dexie: ${mode === 'readonly' ? 'read' : 'write' } ${this.name}`);\n \n function checkTableInTransaction(resolve, reject, trans: Transaction) {\n if (!trans.schema[tableName])\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n return fn(trans.idbtrans, trans) as Promise;\n }\n // Surround all in a microtick scope.\n // Reason: Browsers (modern Safari + older others)\n // still as of 2018-10-10 has problems keeping a transaction\n // alive between micro ticks. Safari because if transaction\n // is created but not used in same microtick, it will go\n // away. That specific issue could be solved in DBCore\n // by opening the transaction just before using it instead.\n // But older Firefoxes and IE11 (with Promise polyfills)\n // will still have probs.\n // The beginMicrotickScope()/endMicrotickScope() works\n // in cooperation with Dexie.Promise to orchestrate\n // the micro-ticks in endMicrotickScope() rather than\n // in native engine.\n const wasRootExec = beginMicroTickScope();\n try {\n let p = trans && trans.db._novip === this.db._novip ?\n trans === PSD.trans ?\n trans._promise(mode, checkTableInTransaction, writeLocked) :\n newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) :\n tempTransaction(this.db, mode, [this.name], checkTableInTransaction);\n if (task) { // Dexie.debug = true so we trace errors\n p._consoleTask = task;\n p = p.catch(err => {\n console.trace(err);\n return rejection(err);\n });\n }\n return p; \n } finally {\n if (wasRootExec) endMicroTickScope();\n }\n }\n\n /** Table.get()\n * \n * https://dexie.org/docs/Table/Table.get()\n * \n **/\n get(keyOrCrit, cb?) {\n if (keyOrCrit && keyOrCrit.constructor === Object)\n return this.where(keyOrCrit as { [key: string]: IndexableType }).first(cb);\n if (keyOrCrit == null) return rejection(new exceptions.Type(`Invalid argument to Table.get()`));\n\n return this._trans('readonly', (trans) => {\n return this.core.get({trans, key: keyOrCrit})\n .then(res => this.hook.reading.fire(res));\n }).then(cb);\n }\n\n /** Table.where()\n * \n * https://dexie.org/docs/Table/Table.where()\n * \n **/\n where(indexOrCrit: string | string[] | { [key: string]: IndexableType }) {\n if (typeof indexOrCrit === 'string')\n return new this.db.WhereClause(this, indexOrCrit);\n if (isArray(indexOrCrit))\n return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`);\n // indexOrCrit is an object map of {[keyPath]:value} \n const keyPaths = keys(indexOrCrit);\n if (keyPaths.length === 1)\n // Only one critera. This was the easy case:\n return this\n .where(keyPaths[0])\n .equals(indexOrCrit[keyPaths[0]]);\n\n // Multiple criterias.\n // Let's try finding a compound index that matches all keyPaths in\n // arbritary order:\n const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => {\n if (\n ix.compound &&\n keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0)) {\n for (let i=0; i a.keyPath.length - b.keyPath.length)[0];\n \n if (compoundIndex && this.db._maxKey !== maxString) {\n // Cool! We found such compound index\n // and this browser supports compound indexes (maxKey !== maxString)!\n const keyPathsInValidOrder = (compoundIndex.keyPath as string[]).slice(0, keyPaths.length);\n return this\n .where(keyPathsInValidOrder)\n .equals(keyPathsInValidOrder.map(kp => indexOrCrit[kp]));\n }\n\n if (!compoundIndex && debug) console.warn(\n `The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit from a ` +\n `compound index [${keyPaths.join('+')}]`);\n\n // Ok, now let's fallback to finding at least one matching index\n // and filter the rest.\n const { idxByName } = this.schema;\n const idb = this.db._deps.indexedDB;\n\n function equals (a, b) {\n return idb.cmp(a,b) === 0; // Works with all indexable types including binary keys.\n }\n\n const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => {\n const index = idxByName[keyPath];\n const value = indexOrCrit[keyPath];\n return [\n prevIndex || index, // idx::=Pick index of first matching keypath\n prevIndex || !index ? // filter::=null if not needed, otherwise combine function filter\n combine(\n prevFilterFn,\n index && index.multi ?\n x => {\n const prop = getByKeyPath(x, keyPath);\n return isArray(prop) && prop.some(item => equals(value, item));\n } : x => equals(value, getByKeyPath(x, keyPath)))\n : prevFilterFn\n ];\n }, [null, null]);\n\n return idx ?\n this.where(idx.name).equals(indexOrCrit[idx.keyPath])\n .filter(filterFunction) :\n compoundIndex ?\n this.filter(filterFunction) : // Has compound but browser bad. Allow filter.\n this.where(keyPaths).equals(''); // No index at all. Fail lazily with \"[a+b+c] is not indexed\"\n }\n\n /** Table.filter()\n * \n * https://dexie.org/docs/Table/Table.filter()\n * \n **/\n filter(filterFunction: (obj: any) => boolean) {\n return this.toCollection().and(filterFunction);\n }\n\n /** Table.count()\n * \n * https://dexie.org/docs/Table/Table.count()\n * \n **/\n count(thenShortcut?: any) {\n return this.toCollection().count(thenShortcut);\n }\n\n /** Table.offset()\n * \n * https://dexie.org/docs/Table/Table.offset()\n * \n **/\n offset(offset: number) {\n return this.toCollection().offset(offset);\n }\n\n /** Table.limit()\n * \n * https://dexie.org/docs/Table/Table.limit()\n * \n **/\n limit(numRows: number) {\n return this.toCollection().limit(numRows);\n }\n\n /** Table.each()\n * \n * https://dexie.org/docs/Table/Table.each()\n * \n **/\n each(callback: (obj: any, cursor: { key: IndexableType, primaryKey: IndexableType }) => any) {\n return this.toCollection().each(callback);\n }\n\n /** Table.toArray()\n * \n * https://dexie.org/docs/Table/Table.toArray()\n * \n **/\n toArray(thenShortcut?: any) {\n return this.toCollection().toArray(thenShortcut);\n }\n\n /** Table.toCollection()\n * \n * https://dexie.org/docs/Table/Table.toCollection()\n * \n **/\n toCollection() {\n return new this.db.Collection(new this.db.WhereClause(this));\n }\n\n /** Table.orderBy()\n * \n * https://dexie.org/docs/Table/Table.orderBy()\n * \n **/\n orderBy(index: string | string[]) {\n return new this.db.Collection(\n new this.db.WhereClause(this, isArray(index) ?\n `[${index.join('+')}]` :\n index));\n }\n\n /** Table.reverse()\n * \n * https://dexie.org/docs/Table/Table.reverse()\n * \n **/\n reverse(): Collection {\n return this.toCollection().reverse();\n }\n\n /** Table.mapToClass()\n * \n * https://dexie.org/docs/Table/Table.mapToClass()\n * \n **/\n mapToClass(constructor: Function) {\n const {db, name: tableName} = this;\n this.schema.mappedClass = constructor;\n if (constructor.prototype instanceof Entity) {\n constructor = class extends (constructor as any) {\n get db () { return db; }\n table() { return tableName; }\n }\n }\n // Collect all inherited property names (including method names) by\n // walking the prototype chain. This is to avoid overwriting them from\n // database data - so application code can rely on inherited props never\n // becoming shadowed by database object props.\n const inheritedProps = new Set();\n for (let proto = constructor.prototype; proto; proto = getProto(proto)) {\n Object.getOwnPropertyNames(proto).forEach(propName => inheritedProps.add(propName));\n }\n \n // Now, subscribe to the when(\"reading\") event to make all objects that come out from this table inherit from given class\n // no matter which method to use for reading (Table.get() or Table.where(...)... )\n const readHook = (obj: Object) => {\n if (!obj) return obj; // No valid object. (Value is null or undefined). Return as is.\n // Create a new object that derives from constructor:\n const res = Object.create(constructor.prototype);\n // Clone members (but never those that collide with a property in the prototype\n // hierchary (MUST BE ABLE TO RELY ON Entity methods and props!)):\n for (let m in obj) if (!inheritedProps.has(m)) try { res[m] = obj[m]; } catch (_) { }\n return res;\n };\n\n if (this.schema.readHook) {\n this.hook.reading.unsubscribe(this.schema.readHook);\n }\n this.schema.readHook = readHook;\n this.hook(\"reading\", readHook);\n return constructor;\n }\n\n /** @deprecated */\n defineClass() {\n function Class (content){\n extend(this, content);\n };\n return this.mapToClass(Class);\n }\n\n /** Table.add()\n * \n * https://dexie.org/docs/Table/Table.add()\n * \n **/\n add(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd]});\n }).then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.update()\n * \n * https://dexie.org/docs/Table/Table.update()\n * \n **/\n update(keyOrObject, modifications: { [keyPath: string]: any; } | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n if (key === undefined) return rejection(new exceptions.InvalidArgument(\n \"Given object does not contain its primary key\"));\n /*// object to modify. Also modify given object with the modifications:\n // This part should be here for backward compatibility.\n // If ever feeling too bad about mutating given object, please wait to a new major before removing it,\n // and document the change thoroughly. TODO: Document this change!\n if (!Object.isFrozen(keyOrObject)) try {\n if (typeof modifications !== \"function\") {\n keys(modifications).forEach(keyPath => {\n setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n });\n } else {\n // Now since we support function argument, we should have a similar behavior here as well\n // (as long as we do this mutability stuff on the given object)\n modifications(keyOrObject, {value: keyOrObject, primKey: key});\n }\n } catch {\n // Maybe given object was frozen.\n // This part is not essential. Just move on as nothing happened...\n }*/\n return this.where(\":id\").equals(key).modify(modifications);\n } else {\n // key to modify\n return this.where(\":id\").equals(keyOrObject).modify(modifications);\n }\n }\n\n /** Table.put()\n * \n * https://dexie.org/docs/Table/Table.put()\n * \n **/\n put(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans(\n 'readwrite',\n trans => this.core.mutate({trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.delete()\n * \n * https://dexie.org/docs/Table/Table.delete()\n * \n **/\n delete(key: IndexableType): PromiseExtended {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'delete', keys: [key]}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.clear()\n * \n * https://dexie.org/docs/Table/Table.clear()\n * \n **/\n clear() {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'deleteRange', range: AnyRange}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.bulkGet()\n * \n * https://dexie.org/docs/Table/Table.bulkGet()\n * \n * @param keys \n */\n bulkGet(keys: IndexableType[]) {\n return this._trans('readonly', trans => {\n return this.core.getMany({\n keys,\n trans\n }).then(result => result.map(res => this.hook.reading.fire(res)));\n });\n }\n\n /** Table.bulkAdd()\n * \n * https://dexie.org/docs/Table/Table.bulkAdd()\n * \n **/\n bulkAdd(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToAdd = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate(\n {trans, type: 'add', keys: keys as IndexableType[], values: objectsToAdd, wantResults}\n )\n .then(({numFailures, results,lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkPut()\n * \n * https://dexie.org/docs/Table/Table.bulkPut()\n * \n **/\n bulkPut(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToPut = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n\n return this.core.mutate(\n {trans, type: 'put', keys: keys as IndexableType[], values: objectsToPut, wantResults}\n )\n .then(({numFailures, results, lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkUpdate()\n *\n * https://dexie.org/docs/Table.Table.bulkUpdate()\n */\n bulkUpdate(\n keysAndChanges: readonly { key: any; changes: UpdateSpec }[]\n ): PromiseExtended {\n const coreTable = this.core;\n const keys = keysAndChanges.map((entry) => entry.key);\n const changeSpecs = keysAndChanges.map((entry) => entry.changes);\n const offsetMap: number[] = [];\n return this._trans('readwrite', (trans) => {\n return coreTable.getMany({ trans, keys, cache: 'clone' }).then((objs) => {\n const resultKeys: any[] = [];\n const resultObjs: any[] = [];\n keysAndChanges.forEach(({ key, changes }, idx) => {\n const obj = objs[idx];\n if (obj) {\n for (const keyPath of Object.keys(changes)) {\n const value = changes[keyPath];\n if (keyPath === this.schema.primKey.keyPath) {\n if (cmp(value, key) !== 0) {\n throw new exceptions.Constraint(\n `Cannot update primary key in bulkUpdate()`\n );\n }\n } else {\n setByKeyPath(obj, keyPath, value);\n }\n }\n offsetMap.push(idx);\n resultKeys.push(key);\n resultObjs.push(obj);\n }\n });\n const numEntries = resultKeys.length;\n return coreTable\n .mutate({\n trans,\n type: 'put',\n keys: resultKeys,\n values: resultObjs,\n updates: {\n keys,\n changeSpecs\n }\n })\n .then(({ numFailures, failures }) => {\n if (numFailures === 0) return numEntries;\n // Failure. bulkPut() may have a subset of keys\n // so we must translate returned 'failutes' into the offsets of given argument:\n for (const offset of Object.keys(failures)) {\n const mappedOffset = offsetMap[Number(offset)];\n if (mappedOffset != null) {\n const failure = failures[offset];\n delete failures[offset];\n failures[mappedOffset] = failure;\n }\n }\n throw new BulkError(\n `${this.name}.bulkUpdate(): ${numFailures} of ${numEntries} operations failed`,\n failures\n );\n });\n });\n });\n }\n\n /** Table.bulkDelete()\n * \n * https://dexie.org/docs/Table/Table.bulkDelete()\n * \n **/\n bulkDelete(keys: ReadonlyArray): PromiseExtended {\n const numKeys = keys.length;\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'delete', keys: keys as IndexableType[]});\n }).then(({numFailures, lastResult, failures}) => {\n if (numFailures === 0) return lastResult;\n throw new BulkError(\n `${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures);\n });\n }\n}\n","import {keys, isArray, asap} from '../functions/utils';\nimport {nop, mirror, reverseStoppableEventChain} from '../functions/chaining-functions';\nimport {exceptions} from '../errors';\n\nexport default function Events(ctx) {\n var evs = {};\n var rv = function (eventName, subscriber) {\n if (subscriber) {\n // Subscribe. If additional arguments than just the subscriber was provided, forward them as well.\n var i = arguments.length, args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n evs[eventName].subscribe.apply(null, args);\n return ctx;\n } else if (typeof (eventName) === 'string') {\n // Return interface allowing to fire or unsubscribe from event\n return evs[eventName];\n }\n };\n rv.addEventType = add;\n \n for (var i = 1, l = arguments.length; i < l; ++i) {\n add(arguments[i]);\n }\n \n return rv;\n\n function add(eventName, chainFunction, defaultFunction) {\n if (typeof eventName === 'object') return addConfiguredEvents(eventName);\n if (!chainFunction) chainFunction = reverseStoppableEventChain;\n if (!defaultFunction) defaultFunction = nop;\n\n var context = {\n subscribers: [],\n fire: defaultFunction,\n subscribe: function (cb) {\n if (context.subscribers.indexOf(cb) === -1) {\n context.subscribers.push(cb);\n context.fire = chainFunction(context.fire, cb);\n }\n },\n unsubscribe: function (cb) {\n context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });\n context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n }\n };\n evs[eventName] = rv[eventName] = context;\n return context;\n }\n\n function addConfiguredEvents(cfg) {\n // events(this, {reading: [functionChain, nop]});\n keys(cfg).forEach(function (eventName) {\n var args = cfg[eventName];\n if (isArray(args)) {\n add(eventName, cfg[eventName][0], cfg[eventName][1]);\n } else if (args === 'asap') {\n // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack\n // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten.\n var context = add(eventName, mirror, function fire() {\n // Optimazation-safe cloning of arguments into args.\n var i = arguments.length, args = new Array(i);\n while (i--) args[i] = arguments[i];\n // All each subscriber:\n context.subscribers.forEach(function (fn) {\n asap(function fireEvent() {\n fn.apply(null, args);\n });\n });\n });\n } else throw new exceptions.InvalidArgument(\"Invalid event config\");\n });\n }\n}\n","import { arrayToObject, derive } from './utils';\n\n\nexport function makeClassConstructor (prototype: Object, constructor: Function) {\n /*const propertyDescriptorMap = arrayToObject(\n Object.getOwnPropertyNames(prototype),\n propKey => [propKey, Object.getOwnPropertyDescriptor(prototype, propKey)]);\n\n // Both derive and clone the prototype.\n // derive: So that x instanceof T returns true when T is the class template.\n // clone: Optimizes method access a bit (but actually not nescessary)\n const derivedPrototypeClone = Object.create(prototype, propertyDescriptorMap);\n derivedPrototypeClone.constructor = constructor;\n constructor.prototype = derivedPrototypeClone;\n return constructor as any as TConstructor;*/\n\n // Keep the above code in case we want to clone AND derive the parent prototype.\n // Reason would be optimization of property access.\n // The code below will only create a prototypal inheritance from given constructor function\n // to given prototype.\n derive(constructor).from({prototype});\n return constructor as any as TConstructor; \n}\n","import { Dexie } from '../dexie';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { Transaction } from '../transaction/transaction';\nimport { hookCreatingChain, pureFunctionChain, nop, mirror, hookUpdatingChain, hookDeletingChain } from '../../functions/chaining-functions';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { Table } from './table';\nimport Events from '../../helpers/Events';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\n\nexport interface TableConstructor {\n new (name: string, tableSchema: TableSchema, optionalTrans?: Transaction) : Table;\n prototype: Table;\n}\n\n/** Generates a Table constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTableConstructor (db: Dexie) {\n return makeClassConstructor(\n Table.prototype,\n\n function Table (this: Table, name: string, tableSchema: TableSchema, trans?: Transaction) {\n this.db = db;\n this._tx = trans;\n this.name = name;\n this.schema = tableSchema;\n this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {\n \"creating\": [hookCreatingChain, nop],\n \"reading\": [pureFunctionChain, mirror],\n \"updating\": [hookUpdatingChain, nop],\n \"deleting\": [hookDeletingChain, nop]\n }) as TableHooks;\n }\n\n );\n}\n","import { combine } from \"../../functions/combine\";\nimport { exceptions } from \"../../errors\";\nimport { hasOwn } from \"../../functions/utils\";\nimport { wrap } from \"../../helpers/promise\";\nimport { Collection } from './';\nimport { DBCoreCursor, DBCoreTable, DBCoreTransaction, DBCoreTableSchema, DBCoreRangeType } from '../../public/types/dbcore';\nimport { nop } from '../../functions/chaining-functions';\n\ntype CollectionContext = Collection[\"_ctx\"];\n\nexport function isPlainKeyRange (ctx: CollectionContext, ignoreLimitFilter?: boolean) {\n return !(ctx.filter || ctx.algorithm || ctx.or) &&\n (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n} \n\nexport function addFilter(ctx: CollectionContext, fn: Function) {\n ctx.filter = combine(ctx.filter, fn);\n}\n\nexport function addReplayFilter (ctx: CollectionContext, factory, isLimitFilter?) {\n var curr = ctx.replayFilter;\n ctx.replayFilter = curr ? ()=>combine(curr(), factory()) : factory;\n ctx.justLimit = isLimitFilter && !curr;\n}\n\nexport function addMatchFilter(ctx: CollectionContext, fn) {\n ctx.isMatch = combine(ctx.isMatch, fn);\n}\n\nexport function getIndexOrStore(ctx: CollectionContext, coreSchema: DBCoreTableSchema) {\n // TODO: Rewrite this. No need to know ctx.isPrimKey. ctx.index should hold the keypath.\n // Still, throw if not found!\n if (ctx.isPrimKey) return coreSchema.primaryKey;\n const index = coreSchema.getIndexByKeyPath(ctx.index);\n if (!index) throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + coreSchema.name + \" is not indexed\");\n return index;\n}\n\nexport function openCursor(ctx: CollectionContext, coreTable: DBCoreTable, trans: DBCoreTransaction) {\n const index = getIndexOrStore(ctx, coreTable.schema);\n return coreTable.openCursor({\n trans,\n values: !ctx.keysOnly,\n reverse: ctx.dir === 'prev',\n unique: !!ctx.unique,\n query: {\n index, \n range: ctx.range\n }\n });\n}\n\nexport function iter (\n ctx: CollectionContext, \n fn: (item, cursor: DBCoreCursor, advance: Function)=>void,\n coreTrans: DBCoreTransaction,\n coreTable: DBCoreTable): Promise\n{\n const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n if (!ctx.or) {\n return iterate(\n openCursor(ctx, coreTable, coreTrans),\n combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);\n } else {\n const set = {};\n\n const union = (item: any, cursor: DBCoreCursor, advance) => {\n if (!filter || filter(cursor, advance, result=>cursor.stop(result), err => cursor.fail(err))) {\n var primaryKey = cursor.primaryKey;\n var key = '' + primaryKey;\n if (key === '[object ArrayBuffer]') key = '' + new Uint8Array(primaryKey);\n if (!hasOwn(set, key)) {\n set[key] = true;\n fn(item, cursor, advance);\n }\n }\n }\n\n return Promise.all([\n ctx.or._iterate(union, coreTrans),\n iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)\n ]);\n }\n}\n\nfunction iterate(cursorPromise: Promise, filter, fn, valueMapper): Promise {\n \n // Apply valueMapper (hook('reading') or mappped class)\n var mappedFn = valueMapper ? (x,c,a) => fn(valueMapper(x),c,a) : fn;\n // Wrap fn with PSD and microtick stuff from Promise.\n var wrappedFn = wrap(mappedFn);\n \n return cursorPromise.then(cursor => {\n if (cursor) {\n return cursor.start(()=>{\n var c = ()=>cursor.continue();\n if (!filter || filter(cursor, advancer => c = advancer, val=>{cursor.stop(val);c=nop}, e => {cursor.fail(e);c = nop;}))\n wrappedFn(cursor.value, cursor, advancer => c = advancer);\n c();\n });\n }\n });\n}\n","import { isArray } from \"../functions/utils\";\nimport { PropModSpec } from \"../public/types/prop-modification\";\n\nexport const PropModSymbol: unique symbol = Symbol();\n\n/** Consistent change propagation across offline synced data.\n * \n * This class is executed client- and server side on sync, making\n * an operation consistent across sync for full consistency and accuracy.\n * \n * Example: An object represents a bank account with a balance.\n * One offline user adds $ 1.00 to the balance.\n * Another user (online) adds $ 2.00 to the balance.\n * When first user syncs, the balance becomes the sum of every operation (3.00).\n * \n * -- initial: balance is 0\n * 1. db.bankAccounts.update(1, { balance: new ProdModification({add: 100})}) // user 1 (offline)\n * 2. db.bankAccounts.update(1, { balance: new ProdModification({add: 200})}) // user 2 (online)\n * -- before user 1 syncs, balance is 200 (representing money with integers * 100 to avoid rounding issues)\n * \n * -- balance is 300\n * \n * When new operations are added, they need to be added to:\n * 1. PropModSpec interface\n * 2. Here in PropModification with the logic they represent\n * 3. (Optionally) a sugar function for it, such as const mathAdd = (amount: number | BigInt) => new PropModification({mathAdd: amount})\n */\nexport class PropModification implements PropModSpec {\n [PropModSymbol]?: true;\n replacePrefix?: [string, string];\n add?: number | BigInt | Array;\n remove?: number | BigInt | Array;\n\n execute(value: any): any {\n // add (mathematical or set-wise)\n if (this.add !== undefined) {\n const term = this.add;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(term)) {\n return [...(isArray(value) ? value : []), ...term].sort();\n }\n // Mathematical addition:\n if (typeof term === 'number') return (Number(value) || 0) + term; // if value is not convertible to number, return 0 + term\n if (typeof term === 'bigint') {\n try {\n return BigInt(value) + term;\n } catch {\n return BigInt(0) + term; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid term ${term}`);\n }\n\n // remove (mathematical or set-wise)\n if (this.remove !== undefined) {\n const subtrahend = this.remove;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(subtrahend)) {\n return isArray(value) ? value.filter(item => !subtrahend.includes(item)).sort() : [];\n } \n // Mathematical addition:\n if (typeof subtrahend === 'number') return Number(value) - subtrahend;\n if (typeof subtrahend === 'bigint') {\n try {\n return BigInt(value) - subtrahend;\n } catch {\n return BigInt(0) - subtrahend; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid subtrahend ${subtrahend}`);\n }\n\n // Replace a prefix:\n const prefixToReplace = this.replacePrefix?.[0];\n if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) {\n return this.replacePrefix[1] + value.substring(prefixToReplace.length);\n }\n return value;\n }\n\n constructor(spec: PropModSpec) {\n Object.assign(this, spec);\n }\n}\n","import { Collection as ICollection } from \"../../public/types/collection\";\nimport { Dexie } from \"../dexie\";\nimport { Table } from \"../table\";\nimport { IndexableType, IndexableTypeArrayReadonly } from \"../../public/types/indexable-type\";\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { iter, isPlainKeyRange, getIndexOrStore, addReplayFilter, addFilter, addMatchFilter } from \"./collection-helpers\";\nimport { rejection } from \"../../helpers/promise\";\nimport { combine } from \"../../functions/combine\";\nimport { extend, hasOwn, deepClone, keys, setByKeyPath, getByKeyPath } from \"../../functions/utils\";\nimport { ModifyError } from \"../../errors\";\nimport { ThenShortcut } from \"../../public/types/then-shortcut\";\nimport { Transaction } from '../transaction';\nimport { DBCoreCursor, DBCoreTransaction, DBCoreRangeType, DBCoreMutateResponse, DBCoreKeyRange } from '../../public/types/dbcore';\nimport { cmp } from \"../../functions/cmp\";\nimport { PropModification } from \"../../helpers/prop-modification\";\nimport { UpdateSpec } from \"../../public/types/update-spec\";\n\n/** class Collection\n * \n * https://dexie.org/docs/Collection/Collection\n */\nexport class Collection implements ICollection {\n db: Dexie;\n _ctx: {\n table: Table;\n index?: string | null;\n isPrimKey?: boolean;\n range: DBCoreKeyRange;\n keysOnly: boolean;\n dir: \"next\" | \"prev\";\n unique: \"\" | \"unique\";\n algorithm?: Function | null;\n filter?: Function | null;\n replayFilter: Function | null;\n justLimit: boolean; // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: Function | null;\n offset: number,\n limit: number,\n error: any, // If set, any promise must be rejected with this error\n or: Collection,\n valueMapper: (any) => any\n }\n \n _ondirectionchange?: Function;\n\n _read(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike, cb?): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readonly', fn).then(cb);\n }\n\n _write(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readwrite', fn, \"locked\"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued.\n }\n\n _addAlgorithm(fn) {\n var ctx = this._ctx;\n ctx.algorithm = combine(ctx.algorithm, fn);\n }\n\n _iterate(\n fn: (item, cursor: DBCoreCursor, advance: Function) => void,\n coreTrans: DBCoreTransaction) : Promise\n {\n return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n }\n\n /** Collection.clone()\n * \n * https://dexie.org/docs/Collection/Collection.clone()\n * \n **/\n clone(props?): this {\n var rv = Object.create(this.constructor.prototype),\n ctx = Object.create(this._ctx);\n if (props) extend(ctx, props);\n rv._ctx = ctx;\n return rv;\n }\n\n /** Collection.raw()\n * \n * https://dexie.org/docs/Collection/Collection.raw()\n * \n **/\n raw(): this {\n this._ctx.valueMapper = null;\n return this;\n }\n\n /** Collection.each()\n * \n * https://dexie.org/docs/Collection/Collection.each()\n * \n **/\n each(fn: (obj, cursor: DBCoreCursor) => any): PromiseExtended {\n var ctx = this._ctx;\n\n return this._read(trans => iter(ctx, fn, trans, ctx.table.core));\n }\n\n /** Collection.count()\n * \n * https://dexie.org/docs/Collection/Collection.count()\n * \n **/\n count(cb?) {\n return this._read(trans => {\n const ctx = this._ctx;\n const coreTable = ctx.table.core;\n if (isPlainKeyRange(ctx, true)) {\n // This is a plain key range. We can use the count() method if the index.\n return coreTable.count({\n trans,\n query: {\n index: getIndexOrStore(ctx, coreTable.schema),\n range: ctx.range\n }\n }).then(count => Math.min(count, ctx.limit));\n } else {\n // Algorithms, filters or expressions are applied. Need to count manually.\n var count = 0;\n return iter(ctx, () => { ++count; return false; }, trans, coreTable)\n .then(()=>count);\n }\n }).then(cb);\n }\n\n /** Collection.sortBy()\n * \n * https://dexie.org/docs/Collection/Collection.sortBy()\n * \n **/\n sortBy(keyPath: string): PromiseExtended;\n sortBy(keyPath: string, thenShortcut: ThenShortcut) : PromiseExtended;\n sortBy(keyPath: string, cb?: ThenShortcut) {\n const parts = keyPath.split('.').reverse(),\n lastPart = parts[0],\n lastIndex = parts.length - 1;\n function getval(obj, i) {\n if (i) return getval(obj[parts[i]], i - 1);\n return obj[lastPart];\n }\n var order = this._ctx.dir === \"next\" ? 1 : -1;\n\n function sorter(a, b) {\n var aVal = getval(a, lastIndex),\n bVal = getval(b, lastIndex);\n return aVal < bVal ? -order : aVal > bVal ? order : 0;\n }\n return this.toArray(function (a) {\n return a.sort(sorter);\n }).then(cb);\n }\n\n /** Collection.toArray()\n * \n * https://dexie.org/docs/Collection/Collection.toArray()\n * \n **/\n toArray(cb?): PromiseExtended {\n return this._read(trans => {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAll() or\n // IDBKeyRange.getAll():\n const {valueMapper} = ctx;\n const index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n limit: ctx.limit,\n values: true,\n query: {\n index,\n range: ctx.range\n }\n }).then(({result}) => valueMapper ? result.map(valueMapper) : result);\n } else {\n // Getting array through a cursor.\n const a = [];\n return iter(ctx, item => a.push(item), trans, ctx.table.core).then(()=>a);\n }\n }, cb);\n }\n\n /** Collection.offset()\n * \n * https://dexie.org/docs/Collection/Collection.offset()\n * \n **/\n offset(offset: number) : Collection{\n var ctx = this._ctx;\n if (offset <= 0) return this;\n ctx.offset += offset; // For count()\n if (isPlainKeyRange(ctx)) {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return (cursor, advance) => {\n if (offsetLeft === 0) return true;\n if (offsetLeft === 1) { --offsetLeft; return false; }\n advance(() => {\n cursor.advance(offsetLeft);\n offsetLeft = 0;\n });\n return false;\n };\n });\n } else {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return () => (--offsetLeft < 0);\n });\n }\n return this;\n }\n\n /** Collection.limit()\n * \n * https://dexie.org/docs/Collection/Collection.limit()\n * \n **/\n limit(numRows: number) : Collection {\n this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count()\n addReplayFilter(this._ctx, () => {\n var rowsLeft = numRows;\n return function (cursor, advance, resolve) {\n if (--rowsLeft <= 0) advance(resolve); // Stop after this item has been included\n return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here.\n };\n }, true);\n return this;\n }\n\n /** Collection.until()\n * \n * https://dexie.org/docs/Collection/Collection.until()\n * \n **/\n until(filterFunction: (x) => boolean, bIncludeStopEntry?) {\n addFilter(this._ctx, function (cursor, advance, resolve) {\n if (filterFunction(cursor.value)) {\n advance(resolve);\n return bIncludeStopEntry;\n } else {\n return true;\n }\n });\n return this;\n }\n\n /** Collection.first()\n * \n * https://dexie.org/docs/Collection/Collection.first()\n * \n **/\n first(cb?) {\n return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.last()\n * \n * https://dexie.org/docs/Collection/Collection.last()\n * \n **/\n last(cb?) {\n return this.reverse().first(cb);\n }\n\n /** Collection.filter()\n * \n * https://dexie.org/docs/Collection/Collection.filter()\n * \n **/\n filter(filterFunction: (x) => boolean): Collection {\n /// function(val){return true/false}\n addFilter(this._ctx, function (cursor) {\n return filterFunction(cursor.value);\n });\n // match filters not used in Dexie.js but can be used by 3rd part libraries to test a\n // collection for a match without querying DB. Used by Dexie.Observable.\n addMatchFilter(this._ctx, filterFunction);\n return this;\n }\n\n /** Collection.and()\n * \n * https://dexie.org/docs/Collection/Collection.and()\n * \n **/\n and(filter: (x) => boolean) {\n return this.filter(filter);\n }\n\n /** Collection.or()\n * \n * https://dexie.org/docs/Collection/Collection.or()\n * \n **/\n or(indexName: string) {\n return new this.db.WhereClause(this._ctx.table, indexName, this);\n }\n\n /** Collection.reverse()\n * \n * https://dexie.org/docs/Collection/Collection.reverse()\n * \n **/\n reverse() {\n this._ctx.dir = (this._ctx.dir === \"prev\" ? \"next\" : \"prev\");\n if (this._ondirectionchange) this._ondirectionchange(this._ctx.dir);\n return this;\n }\n\n /** Collection.desc()\n * \n * https://dexie.org/docs/Collection/Collection.desc()\n * \n **/\n desc() {\n return this.reverse();\n }\n\n /** Collection.eachKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachKey()\n * \n **/\n eachKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n }\n\n /** Collection.eachUniqueKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachUniqueKey()\n * \n **/\n eachUniqueKey(cb?) {\n this._ctx.unique = \"unique\";\n return this.eachKey(cb);\n }\n\n /** Collection.eachPrimaryKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachPrimaryKey()\n * \n **/\n eachPrimaryKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n }\n\n /** Collection.keys()\n * \n * https://dexie.org/docs/Collection/Collection.keys()\n * \n **/\n keys(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.key);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.primaryKeys()\n * \n * https://dexie.org/docs/Collection/Collection.primaryKeys()\n * \n **/\n primaryKeys(cb?) : PromiseExtended {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAllKeys() or\n // IDBKeyRange.getAllKeys():\n return this._read(trans => {\n var index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n values: false,\n limit: ctx.limit,\n query: {\n index,\n range: ctx.range\n }});\n }).then(({result})=>result).then(cb);\n }\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.primaryKey);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.uniqueKeys()\n * \n * https://dexie.org/docs/Collection/Collection.uniqueKeys()\n * \n **/\n uniqueKeys(cb?) {\n this._ctx.unique = \"unique\";\n return this.keys(cb);\n }\n\n /** Collection.firstKey()\n * \n * https://dexie.org/docs/Collection/Collection.firstKey()\n * \n **/\n firstKey(cb?) {\n return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.lastKey()\n * \n * https://dexie.org/docs/Collection/Collection.lastKey()\n * \n **/\n lastKey(cb?) {\n return this.reverse().firstKey(cb);\n }\n\n /** Collection.distinct()\n * \n * https://dexie.org/docs/Collection/Collection.distinct()\n * \n **/\n distinct() {\n var ctx = this._ctx,\n idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n if (!idx || !idx.multi) return this; // distinct() only makes differencies on multiEntry indexes.\n var set = {};\n addFilter(this._ctx, function (cursor: DBCoreCursor) {\n var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string\n var found = hasOwn(set, strKey);\n set[strKey] = true;\n return !found;\n });\n return this;\n }\n\n //\n // Methods that mutate storage\n //\n\n /** Collection.modify()\n * \n * https://dexie.org/docs/Collection/Collection.modify()\n * \n **/\n modify(changes: UpdateSpec | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n var ctx = this._ctx;\n return this._write(trans => {\n var modifyer: (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean\n if (typeof changes === 'function') {\n // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item)\n modifyer = changes as (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean;\n } else {\n // changes is a set of {keyPath: value} and no one is listening to the updating hook.\n var keyPaths = keys(changes);\n var numKeys = keyPaths.length;\n modifyer = function (item) {\n let anythingModified = false;\n for (let i = 0; i < numKeys; ++i) {\n let keyPath = keyPaths[i];\n let val = changes[keyPath];\n let origVal = getByKeyPath(item, keyPath);\n\n if (val instanceof PropModification) {\n setByKeyPath(item, keyPath, val.execute(origVal));\n anythingModified = true;\n } else if (origVal !== val) {\n setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n anythingModified = true;\n }\n }\n return anythingModified;\n };\n }\n\n const coreTable = ctx.table.core;\n const {outbound, extractKey} = coreTable.schema.primaryKey;\n const limit = this.db._options.modifyChunkSize || 200;\n const totalFailures = [];\n let successCount = 0;\n const failedKeys: IndexableType[] = [];\n const applyMutateResult = (expectedCount: number, res: DBCoreMutateResponse) => {\n const {failures, numFailures} = res;\n successCount += expectedCount - numFailures;\n for (let pos of keys(failures)) {\n totalFailures.push(failures[pos]);\n }\n }\n return this.clone().primaryKeys().then(keys => {\n const criteria = isPlainKeyRange(ctx) &&\n ctx.limit === Infinity &&\n (typeof changes !== 'function' || changes === deleteCallback) && {\n index: ctx.index,\n range: ctx.range\n };\n\n const nextChunk = (offset: number) => {\n const count = Math.min(limit, keys.length - offset);\n return coreTable.getMany({\n trans,\n keys: keys.slice(offset, offset + count),\n cache: \"immutable\" // Optimize for 2 things:\n // 1) observability-middleware can track changes better.\n // 2) hooks middleware don't have to query the existing values again when tracking changes.\n // We can use \"immutable\" because we promise to not touch the values we retrieve here!\n }).then(values => {\n const addValues = [];\n const putValues = [];\n const putKeys = outbound ? [] : null;\n const deleteKeys = [];\n for (let i=0; i 0 &&\n coreTable.mutate({trans, type: 'add', values: addValues})\n .then(res => {\n for (let pos in res.failures) {\n // Remove from deleteKeys the key of the object that failed to change its primary key\n deleteKeys.splice(parseInt(pos), 1);\n }\n applyMutateResult(addValues.length, res);\n })\n ).then(()=>(putValues.length > 0 || (criteria && typeof changes === 'object')) &&\n coreTable.mutate({\n trans,\n type: 'put',\n keys: putKeys,\n values: putValues,\n criteria,\n changeSpec: typeof changes !== 'function'\n && changes,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(putValues.length, res))\n ).then(()=>(deleteKeys.length > 0 || (criteria && changes === deleteCallback)) &&\n coreTable.mutate({\n trans,\n type: 'delete',\n keys: deleteKeys,\n criteria,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(deleteKeys.length, res))\n ).then(()=>{\n return keys.length > offset + count && nextChunk(offset + limit);\n });\n });\n }\n\n return nextChunk(0).then(()=>{\n if (totalFailures.length > 0)\n throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys as IndexableTypeArrayReadonly);\n\n return keys.length;\n });\n });\n\n });\n }\n\n /** Collection.delete()\n * \n * https://dexie.org/docs/Collection/Collection.delete()\n * \n **/\n delete() : PromiseExtended {\n var ctx = this._ctx,\n range = ctx.range;\n //deletingHook = ctx.table.hook.deleting.fire,\n //hasDeleteHook = deletingHook !== nop;\n if (isPlainKeyRange(ctx) &&\n (ctx.isPrimKey || range.type === DBCoreRangeType.Any)) // if no range, we'll use clear().\n {\n // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208)\n // For chromium, this is the way most optimized version.\n // For IE/Edge, this could hang the indexedDB engine and make operating system instable\n // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7)\n return this._write(trans => {\n // Our API contract is to return a count of deleted items, so we have to count() before delete().\n const {primaryKey} = ctx.table.core.schema;\n const coreRange = range;\n return ctx.table.core.count({trans, query: {index: primaryKey, range: coreRange}}).then(count => {\n return ctx.table.core.mutate({trans, type: 'deleteRange', range: coreRange})\n .then(({failures, lastResult, results, numFailures}) => {\n if (numFailures) throw new ModifyError(\"Could not delete some values\",\n Object.keys(failures).map(pos => failures[pos]),\n count - numFailures);\n return count - numFailures;\n });\n });\n });\n }\n\n return this.modify(deleteCallback);\n }\n}\n\nconst deleteCallback = (value, ctx) => ctx.value = null;\n","import { Dexie } from '../../classes/dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Collection } from './collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\nimport { mirror } from '../../functions/chaining-functions';\n\n/** Constructs a Collection instance. */\nexport interface CollectionConstructor {\n new(whereClause?: WhereClause | null, keyRangeGenerator?: () => DBCoreKeyRange): Collection;\n prototype: Collection;\n}\n\n/** Generates a Collection constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createCollectionConstructor(db: Dexie) {\n return makeClassConstructor(\n Collection.prototype,\n\n function Collection(\n this: Collection,\n whereClause?: WhereClause | null,\n keyRangeGenerator?: () => DBCoreKeyRange)\n {\n this.db = db;\n let keyRange = AnyRange, error = null;\n if (keyRangeGenerator) try {\n keyRange = keyRangeGenerator();\n } catch (ex) {\n error = ex;\n }\n\n const whereCtx = whereClause._ctx;\n const table = whereCtx.table;\n const readingHook = table.hook.reading.fire;\n this._ctx = {\n table: table,\n index: whereCtx.index,\n isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),\n range: keyRange,\n keysOnly: false,\n dir: \"next\",\n unique: \"\",\n algorithm: null,\n filter: null,\n replayFilter: null,\n justLimit: true, // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: null,\n offset: 0,\n limit: Infinity,\n error: error, // If set, any promise must be rejected with this error\n or: whereCtx.or,\n valueMapper: readingHook !== mirror ? readingHook : null\n };\n }\n );\n}\n","import { IndexableType } from '../public/types/indexable-type';\n\nexport function simpleCompare(a, b) {\n return a < b ? -1 : a === b ? 0 : 1;\n}\n\nexport function simpleCompareReverse(a, b) {\n return a > b ? -1 : a === b ? 0 : 1;\n}\n","import { WhereClause } from './where-clause';\nimport { Collection } from '../collection';\nimport { STRING_EXPECTED } from '../../globals/constants';\nimport { simpleCompare, simpleCompareReverse } from '../../functions/compare-functions';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange, DBCoreRangeType } from '../../public/types/dbcore';\n\nexport function fail(collectionOrWhereClause: Collection | WhereClause, err, T?) {\n var collection = collectionOrWhereClause instanceof WhereClause ?\n new collectionOrWhereClause.Collection (collectionOrWhereClause) :\n collectionOrWhereClause;\n \n collection._ctx.error = T ? new T(err) : new TypeError(err);\n return collection;\n}\n\nexport function emptyCollection(whereClause: WhereClause) {\n return new whereClause.Collection (whereClause, () => rangeEqual(\"\")).limit(0);\n}\n\nexport function upperFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toUpperCase() :\n (s: string) => s.toLowerCase();\n}\n\nexport function lowerFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toLowerCase() :\n (s: string) => s.toUpperCase();\n}\n\nexport function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n var length = Math.min(key.length, lowerNeedle.length);\n var llp = -1;\n for (var i = 0; i < length; ++i) {\n var lwrKeyChar = lowerKey[i];\n if (lwrKeyChar !== lowerNeedle[i]) {\n if (cmp(key[i], upperNeedle[i]) < 0) return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n if (cmp(key[i], lowerNeedle[i]) < 0) return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n if (llp >= 0) return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n return null;\n }\n if (cmp(key[i], lwrKeyChar) < 0) llp = i;\n }\n if (length < lowerNeedle.length && dir === \"next\") return key + upperNeedle.substr(key.length);\n if (length < key.length && dir === \"prev\") return key.substr(0, upperNeedle.length);\n return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));\n}\n\nexport function addIgnoreCaseAlgorithm(whereClause: WhereClause, match, needles, suffix) {\n /// \n var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix,\n needlesLen = needles.length;\n if (!needles.every(s => typeof s === 'string')) {\n return fail(whereClause, STRING_EXPECTED);\n }\n function initDirection(dir) {\n upper = upperFactory(dir);\n lower = lowerFactory(dir);\n compare = (dir === \"next\" ? simpleCompare : simpleCompareReverse);\n var needleBounds = needles.map(function (needle){\n return {lower: lower(needle), upper: upper(needle)};\n }).sort(function(a,b) {\n return compare(a.lower, b.lower);\n });\n upperNeedles = needleBounds.map(function (nb){ return nb.upper; });\n lowerNeedles = needleBounds.map(function (nb){ return nb.lower; });\n direction = dir;\n nextKeySuffix = (dir === \"next\" ? \"\" : suffix);\n }\n initDirection(\"next\");\n\n var c = new whereClause.Collection (\n whereClause,\n ()=>createRange(upperNeedles[0], lowerNeedles[needlesLen-1] + suffix)\n );\n\n c._ondirectionchange = function (direction) {\n // This event onlys occur before filter is called the first time.\n initDirection(direction);\n };\n\n var firstPossibleNeedle = 0;\n\n c._addAlgorithm(function (cursor, advance, resolve) {\n /// \n /// \n /// \n var key = cursor.key;\n if (typeof key !== 'string') return false;\n var lowerKey = lower(key);\n if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n return true;\n } else {\n var lowestPossibleCasing = null;\n for (var i=firstPossibleNeedle; i 0) {\n lowestPossibleCasing = casing;\n }\n }\n if (lowestPossibleCasing !== null) {\n advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });\n } else {\n advance(resolve);\n }\n return false;\n }\n });\n return c;\n}\n\nexport function createRange (lower: IndexableType, upper: IndexableType, lowerOpen?: boolean, upperOpen?: boolean): DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Range,\n lower,\n upper,\n lowerOpen,\n upperOpen\n };\n}\n\nexport function rangeEqual (value: IndexableType) : DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Equal,\n lower: value,\n upper: value\n };\n}\n","import { WhereClause as IWhereClause } from \"../../public/types/where-clause\";\nimport { Collection } from \"../collection\";\nimport { Table } from \"../table\";\nimport { IndexableType } from \"../../public/types/indexable-type\";\nimport { emptyCollection, fail, addIgnoreCaseAlgorithm, createRange, rangeEqual } from './where-clause-helpers';\nimport { INVALID_KEY_ARGUMENT, STRING_EXPECTED, maxString, minKey } from '../../globals/constants';\nimport { getArrayOf, NO_CHAR_ARRAY } from '../../functions/utils';\nimport { exceptions } from '../../errors';\nimport { Dexie } from '../dexie';\nimport { Collection as ICollection} from \"../../public/types/collection\";\n\n/** class WhereClause\n * \n * https://dexie.org/docs/WhereClause/WhereClause\n */\nexport class WhereClause implements IWhereClause {\n db: Dexie;\n _IDBKeyRange: typeof IDBKeyRange;\n _ctx: {\n table: Table;\n index: string;\n or: Collection;\n }\n _cmp: (a: IndexableType, b: IndexableType) => number;\n _ascending: (a: IndexableType, b: IndexableType) => number;\n _descending: (a: IndexableType, b: IndexableType) => number;\n _min: (a: IndexableType, b: IndexableType) => IndexableType;\n _max: (a: IndexableType, b: IndexableType) => IndexableType;\n\n get Collection() {\n return this._ctx.table.db.Collection;\n }\n\n /** WhereClause.between()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.between()\n * \n **/\n between(lower: IndexableType, upper: IndexableType, includeLower?: boolean, includeUpper?: boolean) {\n includeLower = includeLower !== false; // Default to true\n includeUpper = includeUpper === true; // Default to false\n try {\n if ((this._cmp(lower, upper) > 0) ||\n (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))\n return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection.\n return new this.Collection(this, ()=>createRange(lower, upper, !includeLower, !includeUpper));\n } catch (e) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n }\n\n /** WhereClause.equals()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equals()\n * \n **/\n equals(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => rangeEqual(value)) as ICollection;\n }\n\n /** WhereClause.above()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.above()\n * \n **/\n above(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, true));\n }\n\n /** WhereClause.aboveOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.aboveOrEqual()\n * \n **/\n aboveOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, false));\n }\n\n /** WhereClause.below()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.below()\n * \n **/\n below(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value, false, true));\n }\n\n /** WhereClause.belowOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.belowOrEqual()\n * \n **/\n belowOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value));\n }\n\n /** WhereClause.startsWith()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWith()\n * \n **/\n startsWith(str: string) {\n if (typeof str !== 'string') return fail(this, STRING_EXPECTED);\n return this.between(str, str + maxString, true, true);\n }\n\n /** WhereClause.startsWithIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithIgnoreCase()\n * \n **/\n startsWithIgnoreCase(str: string) {\n if (str === \"\") return this.startsWith(str);\n return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString);\n }\n\n /** WhereClause.equalsIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equalsIgnoreCase()\n * \n **/\n equalsIgnoreCase(str: string) {\n return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], \"\");\n }\n\n /** WhereClause.anyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOfIgnoreCase()\n * \n **/\n anyOfIgnoreCase(...values: string[]): Collection;\n anyOfIgnoreCase(values: string[]): Collection;\n anyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, \"\");\n }\n\n /** WhereClause.startsWithAnyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOfIgnoreCase()\n * \n **/\n startsWithAnyOfIgnoreCase(...values: string[]): Collection;\n startsWithAnyOfIgnoreCase(values: string[]): Collection;\n startsWithAnyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString);\n }\n\n /** WhereClause.anyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOf()\n * \n **/\n anyOf(...values: string[]): Collection;\n anyOf(values: string[]): Collection;\n anyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n let compare = this._cmp;\n try { set.sort(compare); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n if (set.length === 0) return emptyCollection(this);\n const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1]));\n\n c._ondirectionchange = direction => {\n compare = (direction === \"next\" ?\n this._ascending :\n this._descending);\n set.sort(compare);\n };\n\n let i = 0;\n c._addAlgorithm((cursor, advance, resolve) => {\n const key = cursor.key;\n while (compare(key, set[i]) > 0) {\n // The cursor has passed beyond this key. Check next.\n ++i;\n if (i === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (compare(key, set[i]) === 0) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => { cursor.continue(set[i]); });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.notEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.notEqual()\n * \n **/\n notEqual(value: IndexableType) {\n return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.noneOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.noneOf()\n * \n **/\n noneOf(...values: string[]): Collection;\n noneOf(values: string[]): Collection;\n noneOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return new this.Collection(this); // Return entire collection.\n try { set.sort(this._ascending); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n // Transform [\"a\",\"b\",\"c\"] to a set of ranges for between/above/below: [[minKey,\"a\"], [\"a\",\"b\"], [\"b\",\"c\"], [\"c\",maxKey]]\n const ranges = set.reduce(\n (res, val) => res ?\n res.concat([[res[res.length - 1][1], val]]) :\n [[minKey, val]],\n null);\n ranges.push([set[set.length - 1], this.db._maxKey]);\n return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.inAnyRange()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.inAnyRange()\n * \n **/\n inAnyRange(\n ranges: ReadonlyArray<{ 0: IndexableType, 1: IndexableType }>,\n options?: { includeLowers?: boolean, includeUppers?: boolean })\n {\n const cmp = this._cmp,\n ascending = this._ascending,\n descending = this._descending,\n min = this._min,\n max = this._max;\n\n if (ranges.length === 0) return emptyCollection(this);\n if (!ranges.every(range =>\n range[0] !== undefined &&\n range[1] !== undefined &&\n ascending(range[0], range[1]) <= 0)) {\n return fail(\n this,\n \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\",\n exceptions.InvalidArgument);\n }\n const includeLowers = !options || options.includeLowers !== false; // Default to true\n const includeUppers = options && options.includeUppers === true; // Default to false\n\n function addRange(ranges, newRange) {\n let i = 0, l = ranges.length;\n for (; i < l; ++i) {\n const range = ranges[i];\n if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n range[0] = min(range[0], newRange[0]);\n range[1] = max(range[1], newRange[1]);\n break;\n }\n }\n if (i === l)\n ranges.push(newRange);\n return ranges;\n }\n\n let sortDirection = ascending;\n function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n\n // Join overlapping ranges\n let set;\n try {\n set = ranges.reduce(addRange, []);\n set.sort(rangeSorter);\n } catch (ex) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n\n let rangePos = 0;\n const keyIsBeyondCurrentEntry = includeUppers ?\n key => ascending(key, set[rangePos][1]) > 0 :\n key => ascending(key, set[rangePos][1]) >= 0;\n\n const keyIsBeforeCurrentEntry = includeLowers ?\n key => descending(key, set[rangePos][0]) > 0 :\n key => descending(key, set[rangePos][0]) >= 0;\n\n function keyWithinCurrentRange(key) {\n return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n }\n\n let checkKey = keyIsBeyondCurrentEntry;\n\n const c = new this.Collection(\n this,\n () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers));\n\n c._ondirectionchange = direction => {\n if (direction === \"next\") {\n checkKey = keyIsBeyondCurrentEntry;\n sortDirection = ascending;\n } else {\n checkKey = keyIsBeforeCurrentEntry;\n sortDirection = descending;\n }\n set.sort(rangeSorter);\n };\n\n c._addAlgorithm((cursor, advance, resolve) => {\n var key = cursor.key;\n while (checkKey(key)) {\n // The cursor has passed beyond this key. Check next.\n ++rangePos;\n if (rangePos === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (keyWithinCurrentRange(key)) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) {\n // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border.\n // Continue to next key but don't include this one.\n return false;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => {\n if (sortDirection === ascending) cursor.continue(set[rangePos][0]);\n else cursor.continue(set[rangePos][1]);\n });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.startsWithAnyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOf()\n * \n **/\n startsWithAnyOf(...prefixes: string[]): Collection;\n startsWithAnyOf(prefixes: string[]): Collection;\n startsWithAnyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n\n if (!set.every(s => typeof s === 'string')) {\n return fail(this, \"startsWithAnyOf() only works with strings\");\n }\n if (set.length === 0) return emptyCollection(this);\n\n return this.inAnyRange(set.map((str: string) => [str, str + maxString]));\n }\n\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { WhereClause } from './where-clause';\nimport { Table } from '../table';\nimport { Collection } from '../collection';\nimport { exceptions } from '../../errors';\nimport { cmp } from '../../functions/cmp';\n\nexport interface WhereClauseConstructor {\n new(table: Table, index?: string, orCollection?: Collection): WhereClause;\n prototype: WhereClause;\n}\n\n/** Generates a WhereClause constructor.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createWhereClauseConstructor(db: Dexie) {\n return makeClassConstructor(\n WhereClause.prototype,\n\n function WhereClause(this: WhereClause, table: Table, index?: string, orCollection?: Collection) {\n this.db = db;\n this._ctx = {\n table: table,\n index: index === \":id\" ? null : index,\n or: orCollection\n };\n this._cmp = this._ascending = cmp;\n this._descending = (a, b) => cmp(b, a);\n this._max = (a, b) => cmp(a,b) > 0 ? a : b;\n this._min = (a, b) => cmp(a,b) < 0 ? a : b;\n this._IDBKeyRange = db._deps.IDBKeyRange;\n if (!this._IDBKeyRange) throw new exceptions.MissingAPI();\n }\n );\n}\n","import { wrap } from \"../helpers/promise\";\n\nexport function eventRejectHandler(reject) {\n return wrap(function (event) {\n preventDefault(event);\n reject (event.target.error);\n return false;\n });\n}\n\nexport function eventSuccessHandler (resolve) {\n return wrap(function (event){\n resolve(event.target.result);\n });\n}\n\nexport function hookedEventRejectHandler (reject) {\n return wrap(function (event) {\n // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks.\n \n var req = event.target,\n err = req.error,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n hookErrorHandler = ctx && ctx.onerror;\n hookErrorHandler && hookErrorHandler(err);\n preventDefault(event);\n reject (err);\n return false;\n });\n}\n\nexport function hookedEventSuccessHandler(resolve) {\n // wrap() is needed when calling hooks because the rare scenario of:\n // * hook does a db operation that fails immediately (IDB throws exception)\n // For calling db operations on correct transaction, wrap makes sure to set PSD correctly.\n // wrap() will also execute in a virtual tick.\n // * If not wrapped in a virtual tick, direct exception will launch a new physical tick.\n // * If this was the last event in the bulk, the promise will resolve after a physical tick\n // and the transaction will have committed already.\n // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise,\n // because it is always marked with _lib = true when created using Transaction._promise().\n return wrap(function(event) {\n var req = event.target,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key.\n hookSuccessHandler = ctx && ctx.onsuccess;\n hookSuccessHandler && hookSuccessHandler(result);\n resolve && resolve(result);\n }, resolve);\n}\n\n\nexport function preventDefault(event) {\n if (event.stopPropagation) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.stopPropagation();\n if (event.preventDefault) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.preventDefault();\n}\n\nexport function BulkErrorHandlerCatchAll(errorList, done?, supportHooks?) {\n return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(e => {\n errorList.push(e);\n done && done();\n });\n}\n\n","import Events from '../helpers/Events';\nimport { GlobalDexieEvents } from '../public/types/db-events';\n\nexport const DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated' as 'storagemutated';\n\n// Name of the global event fired using DOM dispatchEvent (if not in node).\n// Reason for propagating this as a DOM event is for getting reactivity across\n// multiple versions of Dexie within the same app (as long as they are\n// compatible with regards to the event data).\n// If the ObservabilitySet protocol change in a way that would not be backward\n// compatible, make sure also update the event name to a new number at the end\n// so that two Dexie instances of different versions continue to work together\n// - maybe not able to communicate but won't fail due to unexpected data in\n// the detail property of the CustomEvent. If so, also make sure to udpate\n// docs and explain at which Dexie version the new name and format of the event\n// is being used.\nexport const STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1';\n\nexport const globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME) as GlobalDexieEvents;\n","import { Transaction as ITransaction } from '../../public/types/transaction';\nimport { DexiePromise, wrap, rejection } from \"../../helpers/promise\";\nimport { DbSchema } from '../../public/types/db-schema';\nimport { assert, hasOwn } from '../../functions/utils';\nimport { PSD, usePSD } from '../../helpers/promise';\nimport { Dexie } from '../dexie';\nimport { exceptions } from '../../errors';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { preventDefault } from '../../functions/event-wrappers';\nimport { newScope } from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { Table } from '../table';\nimport { globalEvents } from '../../globals/global-events';\n\n/** Transaction\n * \n * https://dexie.org/docs/Transaction/Transaction\n * \n **/\nexport class Transaction implements ITransaction {\n db: Dexie;\n active: boolean;\n mode: IDBTransactionMode;\n chromeTransactionDurability: ChromeTransactionDurability;\n idbtrans: IDBTransaction;\n storeNames: string[];\n explicit?: boolean;\n on: any;\n parent?: Transaction;\n schema: DbSchema;\n _memoizedTables: {[tableName: string]: Table};\n\n _reculock: number;\n _blockedFuncs: { 0: () => any, 1: any }[];\n _resolve: () => void;\n _reject: (Error) => void;\n _waitingFor: DexiePromise; // for waitFor()\n _waitingQueue: Function[]; // for waitFor()\n _spinCount: number; // Just for debugging waitFor()\n _completion: DexiePromise;\n\n //\n // Transaction internal methods (not required by API users, but needed internally and eventually by dexie extensions)\n //\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _lock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n // Temporary set all requests into a pending queue if they are called before database is ready.\n ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage)\n if (this._reculock === 1 && !PSD.global) PSD.lockOwnerFor = this;\n return this;\n }\n\n /** Transaction._unlock()\n * \n * Internal method.\n */\n _unlock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n if (--this._reculock === 0) {\n if (!PSD.global) PSD.lockOwnerFor = null;\n while (this._blockedFuncs.length > 0 && !this._locked()) {\n var fnAndPSD = this._blockedFuncs.shift();\n try { usePSD(fnAndPSD[1], fnAndPSD[0]); } catch (e) { }\n }\n }\n return this;\n }\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _locked() {\n // Checks if any write-lock is applied on this transaction.\n // To simplify the Dexie API for extension implementations, we support recursive locks.\n // This is accomplished by using \"Promise Specific Data\" (PSD).\n // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ).\n // PSD is local to code executing on top of the call stacks of any of any code executed by Promise():\n // * callback given to the Promise() constructor (function (resolve, reject){...})\n // * callbacks given to then()/catch()/finally() methods (function (value){...})\n // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise.\n // Derivation is done so that the inner PSD __proto__ points to the outer PSD.\n // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock.\n return this._reculock && PSD.lockOwnerFor !== this;\n }\n\n /** Transaction.create()\n * \n * Internal method.\n * \n */\n create(idbtrans?: IDBTransaction & {[prop: string]: any}) {\n if (!this.mode) return this;\n const idbdb = this.db.idbdb;\n const dbOpenError = this.db._state.dbOpenError;\n assert(!this.idbtrans);\n if (!idbtrans && !idbdb) {\n switch (dbOpenError && dbOpenError.name) {\n case \"DatabaseClosedError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.DatabaseClosed(dbOpenError);\n case \"MissingAPIError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n default:\n // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()!\n throw new exceptions.OpenFailed(dbOpenError);\n }\n }\n if (!this.active) throw new exceptions.TransactionInactive();\n assert(this._completion._state === null); // Completion Promise must still be pending.\n\n idbtrans = this.idbtrans = idbtrans ||\n (this.db.core \n ? this.db.core.transaction(this.storeNames, this.mode as 'readwrite' | 'readonly', { durability: this.chromeTransactionDurability })\n : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })\n ) as IDBTransaction;\n\n idbtrans.onerror = wrap(ev => {\n preventDefault(ev);// Prohibit default bubbling to window.error\n this._reject(idbtrans.error);\n });\n idbtrans.onabort = wrap(ev => {\n preventDefault(ev);\n this.active && this._reject(new exceptions.Abort(idbtrans.error));\n this.active = false;\n this.on(\"abort\").fire(ev);\n });\n idbtrans.oncomplete = wrap(() => {\n this.active = false;\n this._resolve();\n if ('mutatedParts' in idbtrans) {\n globalEvents.storagemutated.fire(idbtrans[\"mutatedParts\"]);\n }\n });\n return this;\n }\n\n /** Transaction._promise()\n * \n * Internal method.\n */\n _promise(\n mode: IDBTransactionMode,\n fn: (resolve, reject, trans: Transaction) => PromiseLike | void,\n bWriteLock?: string | boolean): DexiePromise\n {\n if (mode === 'readwrite' && this.mode !== 'readwrite')\n return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n\n if (!this.active)\n return rejection(new exceptions.TransactionInactive());\n\n if (this._locked()) {\n return new DexiePromise((resolve, reject) => {\n this._blockedFuncs.push([() => {\n this._promise(mode, fn, bWriteLock).then(resolve, reject);\n }, PSD]);\n });\n\n } else if (bWriteLock) {\n return newScope(() => {\n var p = new DexiePromise((resolve, reject) => {\n this._lock();\n const rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p.finally(() => this._unlock());\n p._lib = true;\n return p;\n });\n\n } else {\n var p = new DexiePromise((resolve, reject) => {\n var rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p._lib = true;\n return p;\n }\n }\n\n /** Transaction._root()\n * \n * Internal method. Retrieves the root transaction in the tree of sub transactions.\n */\n _root() {\n return this.parent ? this.parent._root() : this;\n }\n\n /** Transaction.waitFor()\n * \n * Internal method. Can be accessed from the public API through\n * Dexie.waitFor(): https://dexie.org/docs/Dexie/Dexie.waitFor()\n * \n **/\n waitFor(promiseLike: PromiseLike) {\n // Always operate on the root transaction (in case this is a sub stransaction)\n var root = this._root();\n // For stability reasons, convert parameter to promise no matter what type is passed to waitFor().\n // (We must be able to call .then() on it.)\n const promise = DexiePromise.resolve(promiseLike);\n if (root._waitingFor) {\n // Already called waitFor(). Wait for both to complete.\n root._waitingFor = root._waitingFor.then(() => promise);\n } else {\n // We're not in waiting state. Start waiting state.\n root._waitingFor = promise;\n root._waitingQueue = [];\n // Start interacting with indexedDB until promise completes:\n var store = root.idbtrans.objectStore(root.storeNames[0]);\n (function spin() {\n ++root._spinCount; // For debugging only\n while (root._waitingQueue.length) (root._waitingQueue.shift())();\n if (root._waitingFor) store.get(-Infinity).onsuccess = spin;\n }());\n }\n var currentWaitPromise = root._waitingFor;\n return new DexiePromise((resolve, reject) => {\n promise.then(\n res => root._waitingQueue.push(wrap(resolve.bind(null, res))),\n err => root._waitingQueue.push(wrap(reject.bind(null, err)))\n ).finally(() => {\n if (root._waitingFor === currentWaitPromise) {\n // No one added a wait after us. Safe to stop the spinning.\n root._waitingFor = null;\n }\n });\n });\n } \n\n /** Transaction.abort()\n * \n * https://dexie.org/docs/Transaction/Transaction.abort()\n */\n abort() {\n if (this.active) {\n this.active = false;\n if (this.idbtrans) this.idbtrans.abort();\n this._reject(new exceptions.Abort());\n }\n }\n\n /** Transaction.table()\n * \n * https://dexie.org/docs/Transaction/Transaction.table()\n */\n table(tableName: string) {\n const memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n if (hasOwn(memoizedTables, tableName))\n return memoizedTables[tableName];\n const tableSchema = this.schema[tableName];\n if (!tableSchema) {\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\"); \n }\n\n const transactionBoundTable = new this.db.Table(tableName, tableSchema, this);\n transactionBoundTable.core = this.db.core.table(tableName);\n memoizedTables[tableName] = transactionBoundTable;\n return transactionBoundTable;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Transaction } from './transaction';\nimport { DbSchema } from '../../public/types/db-schema';\nimport Events from '../../helpers/Events';\nimport Promise, { rejection } from '../../helpers/promise';\n\nexport interface TransactionConstructor {\n new (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction) : T;\n prototype: T;\n}\n\n/** Generates a Transaction constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTransactionConstructor(db: Dexie) {\n return makeClassConstructor>(\n Transaction.prototype,\n function Transaction (\n this: Transaction,\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction)\n {\n this.db = db;\n this.mode = mode;\n this.storeNames = storeNames;\n this.schema = dbschema;\n this.chromeTransactionDurability = chromeTransactionDurability;\n this.idbtrans = null;\n this.on = Events(this, \"complete\", \"error\", \"abort\");\n this.parent = parent || null;\n this.active = true;\n this._reculock = 0;\n this._blockedFuncs = [];\n this._resolve = null;\n this._reject = null;\n this._waitingFor = null;\n this._waitingQueue = null;\n this._spinCount = 0; // Just for debugging waitFor()\n this._completion = new Promise ((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n \n this._completion.then(\n ()=> {\n this.active = false;\n this.on.complete.fire();\n },\n e => {\n var wasActive = this.active;\n this.active = false;\n this.on.error.fire(e);\n this.parent ?\n this.parent._reject(e) :\n wasActive && this.idbtrans && this.idbtrans.abort();\n return rejection(e); // Indicate we actually DO NOT catch this error.\n });\n \n });\n}\n","import { IndexSpec } from '../public/types/index-spec';\n\nexport function createIndexSpec(\n name: string,\n keyPath: string | string[],\n unique: boolean,\n multi: boolean,\n auto: boolean,\n compound: boolean,\n isPrimKey: boolean\n): IndexSpec {\n return {\n name,\n keyPath,\n unique,\n multi,\n auto,\n compound,\n src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + nameFromKeyPath(keyPath)\n }\n}\n\nexport function nameFromKeyPath (keyPath?: string | string[]): string {\n return typeof keyPath === 'string' ?\n keyPath :\n keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : \"\";\n}\n","import { IndexSpec } from '../public/types/index-spec';\nimport { TableSchema } from '../public/types/table-schema';\nimport { createIndexSpec } from './index-spec';\nimport { arrayToObject } from '../functions/utils';\n\nexport function createTableSchema (\n name: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n): TableSchema {\n return {\n name,\n primKey,\n indexes,\n mappedClass: null,\n idxByName: arrayToObject(indexes, index => [index.name, index])\n };\n}\n","import { maxString } from '../globals/constants';\n\nexport function safariMultiStoreFix(storeNames: string[]) {\n return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\n\nexport function getNativeGetDatabaseNamesFn(indexedDB) {\n var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n return fn && fn.bind(indexedDB);\n}\n\nexport let getMaxKey = (IdbKeyRange: typeof IDBKeyRange) => {\n try {\n IdbKeyRange.only([[]]);\n getMaxKey = () => [[]];\n return [[]];\n } catch (e) {\n getMaxKey = () => maxString;\n return maxString;\n }\n}\n","import { getByKeyPath } from '../functions/utils';\n\nexport function getKeyExtractor (keyPath: null | string | string[]) : (a: any) => any {\n if (keyPath == null) {\n return () => undefined;\n } else if (typeof keyPath === 'string') {\n return getSinglePathKeyExtractor(keyPath);\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n\nexport function getSinglePathKeyExtractor(keyPath: string) {\n const split = keyPath.split('.');\n if (split.length === 1) {\n return obj => obj[keyPath];\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n","import {\n DBCore,\n DBCoreCursor,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryResponse,\n DBCoreRangeType,\n DBCoreSchema,\n DBCoreTableSchema,\n DBCoreTable,\n DBCoreMutateResponse,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { eventRejectHandler, preventDefault } from '../functions/event-wrappers';\nimport { wrap } from '../helpers/promise';\nimport { getMaxKey } from '../functions/quirks';\nimport { getKeyExtractor } from './get-key-extractor';\n\nexport function arrayify(arrayLike: {length: number, [index: number]: T}): T[] {\n return [].slice.call(arrayLike);\n}\nexport function pick(obj: T, props: Prop[]): Pick {\n const result = {} as Pick;\n props.forEach(prop => result[prop] = obj[prop]);\n return result;\n}\n\nlet _id_counter = 0;\n\nexport function getKeyPathAlias(keyPath: null | string | string[]) {\n return keyPath == null ?\n \":id\" :\n typeof keyPath === 'string' ?\n keyPath :\n `[${keyPath.join('+')}]`;\n}\n\nexport function createDBCore (\n db: IDBDatabase,\n IdbKeyRange: typeof IDBKeyRange,\n tmpTrans: IDBTransaction) : DBCore\n{\n function extractSchema(db: IDBDatabase, trans: IDBTransaction) : {schema: DBCoreSchema, hasGetAll: boolean} {\n const tables = arrayify(db.objectStoreNames);\n return {\n schema: {\n name: db.name,\n tables: tables.map(table => trans.objectStore(table)).map(store => {\n const {keyPath, autoIncrement} = store;\n const compound = isArray(keyPath);\n const outbound = keyPath == null;\n const indexByKeyPath: {[keyPathAlias: string]: DBCoreIndex} = {};\n const result = {\n name: store.name,\n primaryKey: {\n name: null,\n isPrimaryKey: true,\n outbound,\n compound,\n keyPath,\n autoIncrement,\n unique: true,\n extractKey: getKeyExtractor(keyPath)\n } as DBCoreIndex,\n indexes: arrayify(store.indexNames).map(indexName => store.index(indexName))\n .map(index => {\n const {name, unique, multiEntry, keyPath} = index;\n const compound = isArray(keyPath);\n const result: DBCoreIndex = {\n name,\n compound,\n keyPath,\n unique,\n multiEntry,\n extractKey: getKeyExtractor(keyPath)\n };\n indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n return result;\n }),\n getIndexByKeyPath: (keyPath: null | string | string[]) => indexByKeyPath[getKeyPathAlias(keyPath)]\n };\n indexByKeyPath[\":id\"] = result.primaryKey;\n if (keyPath != null) {\n indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;\n }\n return result;\n })\n },\n hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&\n !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) // Bug with getAll() on Safari ver<604. See discussion following PR #579\n };\n }\n\n function makeIDBKeyRange (range: DBCoreKeyRange) : IDBKeyRange | null {\n if (range.type === DBCoreRangeType.Any) return null;\n if (range.type === DBCoreRangeType.Never) throw new Error(\"Cannot convert never type to IDBKeyRange\");\n const {lower, upper, lowerOpen, upperOpen} = range;\n const idbRange = lower === undefined ?\n upper === undefined ?\n null : //IDBKeyRange.lowerBound(-Infinity, false) : // Any range (TODO: Should we return null instead?)\n IdbKeyRange.upperBound(upper, !!upperOpen) : // below\n upper === undefined ?\n IdbKeyRange.lowerBound(lower, !!lowerOpen) : // above\n IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);\n return idbRange;\n }\n\n function createDbCoreTable(tableSchema: DBCoreTableSchema): DBCoreTable {\n const tableName = tableSchema.name;\n\n function mutate ({trans, type, keys, values, range}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const outbound = store.keyPath == null;\n const isAddOrPut = type === \"put\" || type === \"add\";\n if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n throw new Error (\"Invalid operation type: \" + type);\n\n const {length} = keys || values || {length: 1}; // keys.length if keys. values.length if values. 1 if range.\n if (keys && values && keys.length !== values.length) {\n throw new Error(\"Given keys array must have same length as given values array.\");\n }\n if (length === 0)\n // No items to write. Don't even bother!\n return resolve({numFailures: 0, failures: {}, results: [], lastResult: undefined});\n\n let req: IDBRequest;\n const reqs: IDBRequest[] = [];\n \n const failures: {[operationNumber: number]: Error} = [];\n let numFailures = 0;\n const errorHandler = \n event => {\n ++numFailures;\n preventDefault(event);\n };\n \n if (type === 'deleteRange') {\n // Here the argument is the range\n if (range.type === DBCoreRangeType.Never)\n return resolve({numFailures, failures, results: [], lastResult: undefined}); // Deleting the Never range shoulnt do anything.\n if (range.type === DBCoreRangeType.Any)\n reqs.push(req = store.clear()); // Deleting the Any range is equivalent to store.clear()\n else\n reqs.push(req = store.delete(makeIDBKeyRange(range)));\n } else {\n // No matter add, put or delete - find out arrays of first and second arguments to it.\n const [args1, args2] = isAddOrPut ?\n outbound ?\n [values, keys] :\n [values, null] :\n [keys, null];\n\n if (isAddOrPut) {\n for (let i=0; i {\n const lastResult = event.target.result;\n reqs.forEach((req, i) => req.error != null && (failures[i] = req.error));\n resolve({\n numFailures,\n failures,\n results: type === \"delete\" ? keys : reqs.map(req => req.result),\n lastResult\n });\n };\n \n req.onerror = event => { // wrap() not needed. All paths calling outside will wrap!\n errorHandler(event);\n done(event);\n };\n \n req.onsuccess = done;\n });\n }\n \n function openCursor ({trans, values, query, reverse, unique}: DBCoreOpenCursorRequest): Promise\n {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n // source\n const source = index.isPrimaryKey ?\n store :\n store.index(index.name);\n // direction\n const direction = reverse ?\n unique ?\n \"prevunique\" :\n \"prev\" :\n unique ?\n \"nextunique\" :\n \"next\";\n // request\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(makeIDBKeyRange(range), direction) :\n source.openKeyCursor(makeIDBKeyRange(range), direction);\n \n // iteration\n req.onerror = eventRejectHandler(reject);\n req.onsuccess = wrap(ev => {\n\n const cursor = req.result as unknown as DBCoreCursor;\n if (!cursor) {\n resolve(null);\n return;\n }\n (cursor as any).___id = ++_id_counter;\n (cursor as any).done = false;\n const _cursorContinue = cursor.continue.bind(cursor);\n let _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n if (_cursorContinuePrimaryKey) _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n const _cursorAdvance = cursor.advance.bind(cursor);\n const doThrowCursorIsNotStarted = ()=>{throw new Error(\"Cursor not started\");}\n const doThrowCursorIsStopped = ()=>{throw new Error(\"Cursor not stopped\");}\n (cursor as any).trans = trans;\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;\n cursor.fail = wrap(reject);\n cursor.next = function (this: DBCoreCursor) {\n // next() must work with \"this\" pointer in order to function correctly for ProxyCursors (derived objects)\n // without having to re-define next() on each child.\n let gotOne = 1;\n return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this);\n };\n cursor.start = (callback) => {\n //console.log(\"Starting cursor\", (cursor as any).___id);\n const iterationPromise = new Promise((resolveIteration, rejectIteration) =>{\n resolveIteration = wrap(resolveIteration);\n req.onerror = eventRejectHandler(rejectIteration);\n cursor.fail = rejectIteration;\n cursor.stop = value => {\n //console.log(\"Cursor stop\", cursor);\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n resolveIteration(value);\n };\n });\n // Now change req.onsuccess to a callback that doesn't call initCursor but just observer.next()\n const guardedCallback = () => {\n if (req.result) {\n //console.log(\"Next result\", cursor);\n try {\n callback();\n } catch (err) {\n cursor.fail(err);\n }\n } else {\n (cursor as any).done = true;\n cursor.start = ()=>{throw new Error(\"Cursor behind last entry\");}\n cursor.stop();\n }\n }\n req.onsuccess = wrap(ev => {\n //cursor.continue = _cursorContinue;\n //cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n //cursor.advance = _cursorAdvance;\n req.onsuccess = guardedCallback;\n guardedCallback();\n });\n cursor.continue = _cursorContinue;\n cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n cursor.advance = _cursorAdvance;\n guardedCallback();\n return iterationPromise;\n };\n resolve(cursor);\n }, reject); \n });\n }\n \n function query (hasGetAll: boolean) {\n return (request: DBCoreQueryRequest) => {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {trans, values, limit, query} = request;\n const nonInfinitLimit = limit === Infinity ? undefined : limit;\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n if (limit === 0) return resolve({result: []});\n if (hasGetAll) {\n const req = values ?\n (source as any).getAll(idbKeyRange, nonInfinitLimit) :\n (source as any).getAllKeys(idbKeyRange, nonInfinitLimit);\n req.onsuccess = event => resolve({result: event.target.result});\n req.onerror = eventRejectHandler(reject);\n } else {\n let count = 0;\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(idbKeyRange) :\n source.openKeyCursor(idbKeyRange)\n const result = [];\n req.onsuccess = event => {\n const cursor = req.result as IDBCursorWithValue;\n if (!cursor) return resolve({result});\n result.push(values ? cursor.value : cursor.primaryKey);\n if (++count === limit) return resolve({result});\n cursor.continue();\n };\n req.onerror = eventRejectHandler(reject);\n }\n });\n };\n }\n \n return {\n name: tableName,\n schema: tableSchema,\n \n mutate,\n\n getMany ({trans, keys}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const length = keys.length;\n const result = new Array(length);\n let keyCount = 0;\n let callbackCount = 0;\n let valueCount = 0;\n let req: IDBRequest & {_pos?: number};\n \n const successHandler = event => {\n const req = event.target;\n if ((result[req._pos] = req.result) != null) ++valueCount;\n if (++callbackCount === keyCount) resolve(result);\n };\n const errorHandler = eventRejectHandler(reject);\n \n for (let i=0; i((resolve, reject) => {\n resolve = wrap (resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const req = store.get(key);\n req.onsuccess = event => resolve((event.target as any).result);\n req.onerror = eventRejectHandler(reject);\n });\n },\n\n query: query(hasGetAll),\n \n openCursor,\n\n count ({query, trans}) {\n const {index, range} = query;\n return new Promise((resolve, reject) => {\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n const req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n req.onsuccess = wrap(ev => resolve((ev.target as IDBRequest).result));\n req.onerror = eventRejectHandler(reject);\n });\n }\n };\n }\n\n const {schema, hasGetAll} = extractSchema(db, tmpTrans);\n const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema));\n const tableMap: {[name: string]: DBCoreTable} = {};\n tables.forEach(table => tableMap[table.name] = table);\n return {\n stack: \"dbcore\",\n \n transaction: db.transaction.bind(db),\n\n table(name: string) {\n const result = tableMap[name];\n if (!result) throw new Error(`Table '${name}' not found`);\n return tableMap[name];\n },\n\n MIN_KEY: -Infinity,\n\n MAX_KEY: getMaxKey(IdbKeyRange),\n\n schema\n\n };\n}\n","import { Dexie } from './';\nimport { createDBCore } from '../../dbcore/dbcore-indexeddb';\nimport { DBCore } from '../../public/types/dbcore';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { DexieStacks, Middleware } from '../../public/types/middleware';\nimport { exceptions } from '../../errors';\n\nfunction createMiddlewareStack(\n stackImpl: {stack: string},\n middlewares: Middleware<{stack: string}>[]): TStack {\n return middlewares.reduce((down, {create}) => ({...down, ...create(down)}), stackImpl) as TStack;\n} \n\nfunction createMiddlewareStacks(\n middlewares: {[StackName in keyof DexieStacks]?: Middleware[]},\n idbdb: IDBDatabase,\n {IDBKeyRange, indexedDB}: DexieDOMDependencies,\n tmpTrans: IDBTransaction): {[StackName in keyof DexieStacks]?: DexieStacks[StackName]}\n{\n const dbcore = createMiddlewareStack(\n createDBCore(idbdb, IDBKeyRange, tmpTrans),\n middlewares.dbcore);\n \n // TODO: Create other stacks the same way as above. They might be dependant on the result\n // of creating dbcore stack.\n\n return {\n dbcore\n };\n}\n\nexport function generateMiddlewareStacks(db: Dexie, tmpTrans: IDBTransaction) {\n const idbdb = tmpTrans.db;\n const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n db.core = stacks.dbcore!;\n db.tables.forEach(table => {\n const tableName = table.name;\n if (db.core.schema.tables.some(tbl => tbl.name === tableName)) {\n table.core = db.core.table(tableName);\n if (db[tableName] instanceof db.Table) {\n db[tableName].core = table.core;\n }\n }\n });\n}\n","import { Dexie } from '../dexie';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { _global } from \"../../globals/global\";\nimport { setProp, keys, slice, isArray, shallowClone, isAsyncFunction, defineProperty, getPropertyDescriptor } from '../../functions/utils';\nimport { Transaction } from '../transaction';\nimport { Version } from './version';\nimport Promise, { PSD, newScope, NativePromise, decrementExpectedAwaits, incrementExpectedAwaits } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { IndexSpec } from '../../public/types/index-spec';\nimport { createIndexSpec, nameFromKeyPath } from '../../helpers/index-spec';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { generateMiddlewareStacks } from '../dexie/generate-middleware-stacks';\nimport { debug } from '../../helpers/debug';\nimport { PromiseExtended } from '../../public/types/promise-extended';\n\nexport function setApiOnPlace(db: Dexie, objs: Object[], tableNames: string[], dbschema: DbSchema) {\n tableNames.forEach(tableName => {\n const schema = dbschema[tableName];\n objs.forEach(obj => {\n const propDesc = getPropertyDescriptor(obj, tableName);\n if (!propDesc || (\"value\" in propDesc && propDesc.value === undefined)) {\n // Either the prop is not declared, or it is initialized to undefined.\n if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n // obj is a Transaction prototype (or prototype of a subclass to Transaction)\n // Make the API a getter that returns this.table(tableName)\n setProp(obj, tableName, {\n get(this: Transaction) { return this.table(tableName); },\n set(value: any) {\n // Issue #1039\n // Let \"this.schema = dbschema;\" and other props in transaction constructor work even if there's a name collision with the table name.\n defineProperty(this, tableName, {value, writable: true, configurable: true, enumerable: true});\n }\n });\n } else {\n // Table will not be bound to a transaction (will use Dexie.currentTransaction)\n obj[tableName] = new db.Table(tableName, schema);\n }\n }\n });\n });\n}\n\nexport function removeTablesApi(db: Dexie, objs: Object[]) {\n objs.forEach(obj => {\n for (let key in obj) {\n if (obj[key] instanceof db.Table) delete obj[key];\n }\n });\n}\n\nexport function lowerVersionFirst(a: Version, b: Version) {\n return a._cfg.version - b._cfg.version;\n}\n\nexport function runUpgraders(db: Dexie, oldVersion: number, idbUpgradeTrans: IDBTransaction, reject) {\n const globalSchema = db._dbSchema;\n if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) {\n globalSchema.$meta = createTableSchema(\"$meta\", parseIndexSyntax(\"\")[0], []);\n db._storeNames.push('$meta');\n }\n const trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n trans.create(idbUpgradeTrans);\n trans._completion.catch(reject);\n const rejectTransaction = trans._reject.bind(trans);\n const transless = PSD.transless || PSD;\n newScope(() => {\n PSD.trans = trans;\n PSD.transless = transless;\n if (oldVersion === 0) {\n // Create tables:\n keys(globalSchema).forEach(tableName => {\n createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n });\n generateMiddlewareStacks(db, idbUpgradeTrans);\n Promise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction);\n } else {\n generateMiddlewareStacks(db, idbUpgradeTrans);\n return getExistingVersion(db, trans, oldVersion)\n .then(oldVersion => updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans))\n .catch(rejectTransaction);\n }\n });\n}\n\nexport type UpgradeQueueItem = (idbtrans: IDBTransaction) => PromiseLike | void;\n\nexport function patchCurrentVersion(db: Dexie, idbUpgradeTrans: IDBTransaction) {\n createMissingTables(db._dbSchema, idbUpgradeTrans);\n if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) {\n // Rolled over to the next 10-ies due to many schema upgrades without bumping version.\n // No problem! We pin the database to its expected version by adding the $meta table so that next\n // time the programmer bumps the version and attaches, an upgrader, that upgrader will indeed run,\n // as well any further upgraders coming after that.\n idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version');\n }\n const globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans);\n const diff = getSchemaDiff(globalSchema, db._dbSchema);\n for (const tableChange of diff.change) {\n if (tableChange.change.length || tableChange.recreate) {\n console.warn(`Unable to patch indexes of table ${tableChange.name} because it has changes on the type of index or primary key.`);\n return;\n }\n const store = idbUpgradeTrans.objectStore(tableChange.name);\n tableChange.add.forEach(idx => {\n if (debug) console.debug(`Dexie upgrade patch: Creating missing index ${tableChange.name}.${idx.src}`);\n addIndex(store, idx);\n });\n }\n}\n\nfunction getExistingVersion(db: Dexie, trans: Transaction, oldVersion: number): PromiseExtended {\n // In normal case, existing version is the native installed version divided by 10.\n // However, in case more than 10 schema changes have been made on the same version (such as while\n // developing an app), the native version may have passed beyond a multiple of 10 within the same version.\n // When that happens, a table $meta will have been created, containing a single entry with key \"version\"\n // and the value of the real old version to use when running upgraders going forward.\n if (trans.storeNames.includes('$meta')) {\n return trans.table('$meta').get('version').then(metaVersion => {\n return metaVersion != null ? metaVersion : oldVersion\n })\n } else {\n return Promise.resolve(oldVersion);\n }\n}\n\nfunction updateTablesAndIndexes(\n db: Dexie,\n oldVersion: number,\n trans: Transaction,\n idbUpgradeTrans: IDBTransaction)\n{\n // Upgrade version to version, step-by-step from oldest to newest version.\n // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version)\n const queue: UpgradeQueueItem[] = [];\n const versions = db._versions;\n let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n let anyContentUpgraderHasRun = false;\n \n const versToRun = versions.filter(v => v._cfg.version >= oldVersion);\n if (versToRun.length === 0) {\n // Important not to continue at this point.\n // Coming here means we've already patched schema in patchCurrentVersion() after having\n // incremented native version to a value above the declared highest version.\n // When being in this mode, it means that there might be different versions the db competing\n // about it with different version of the schema. Therefore, we must avoid deleting tables\n // or indexes here so that both versions can co-exist until the application has been upgraded to\n // a version that declares no lower than the native version.\n // If after that, a downgrade happens again, we'll end up here again, accepting both versions\n // And we'll stay in this state until app developer releases a new declared version.\n return Promise.resolve(); \n }\n \n versToRun.forEach(version => {\n queue.push(() => {\n const oldSchema = globalSchema;\n const newSchema = version._cfg.dbschema;\n adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n\n globalSchema = db._dbSchema = newSchema;\n\n const diff = getSchemaDiff(oldSchema, newSchema);\n // Add tables \n diff.add.forEach(tuple => {\n createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n });\n // Change tables\n diff.change.forEach(change => {\n if (change.recreate) {\n throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n } else {\n const store = idbUpgradeTrans.objectStore(change.name);\n // Add indexes\n change.add.forEach(idx => addIndex(store, idx));\n // Update indexes\n change.change.forEach(idx => {\n store.deleteIndex(idx.name);\n addIndex(store, idx);\n });\n // Delete indexes\n change.del.forEach(idxName => store.deleteIndex(idxName));\n }\n });\n\n const contentUpgrade = version._cfg.contentUpgrade;\n\n if (contentUpgrade && version._cfg.version > oldVersion) {\n // Update db.core with new tables and indexes:\n generateMiddlewareStacks(db, idbUpgradeTrans);\n trans._memoizedTables = {}; // Invalidate memoization as transaction shape may change between versions.\n\n anyContentUpgraderHasRun = true;\n\n // Add to-be-deleted tables to contentUpgrade transaction\n let upgradeSchema = shallowClone(newSchema);\n diff.del.forEach(table => {\n upgradeSchema[table] = oldSchema[table];\n });\n\n // Safe to affect Transaction.prototype globally in this moment,\n // because when this code runs, there may not be any other code\n // that can access any transaction instance, else than this particular\n // upgrader function.\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema);\n trans.schema = upgradeSchema;\n\n // Support for native async await.\n const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade);\n if (contentUpgradeIsAsync) {\n incrementExpectedAwaits();\n }\n \n let returnValue: any;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = contentUpgrade(trans);\n if (returnValue) {\n if (contentUpgradeIsAsync) {\n // contentUpgrade is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n }\n }\n });\n return (returnValue && typeof returnValue.then === 'function' ?\n Promise.resolve(returnValue) : promiseFollowed.then(()=>returnValue));\n }\n });\n queue.push(idbtrans => {\n const newSchema = version._cfg.dbschema;\n // Delete old tables\n deleteRemovedTables(newSchema, idbtrans);\n // Restore the final API\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);\n trans.schema = db._dbSchema;\n });\n // Maintain the $meta table after this version's tables and indexes has been created and content upgraders have run.\n queue.push(idbtrans => {\n if (db.idbdb.objectStoreNames.contains('$meta')) {\n if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) {\n // Remove $meta table if it's no more needed - we are in line with the native version\n db.idbdb.deleteObjectStore('$meta');\n delete db._dbSchema.$meta;\n db._storeNames = db._storeNames.filter(name => name !== '$meta');\n } else {\n // We're still not in line with the native version. Make sure to update the virtual version\n // to the successfully run version\n idbtrans.objectStore('$meta').put(version._cfg.version, 'version');\n }\n }\n }); \n });\n\n // Now, create a queue execution engine\n function runQueue() {\n return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n Promise.resolve();\n }\n\n return runQueue().then(() => {\n createMissingTables(globalSchema, idbUpgradeTrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version)\n });\n}\n\nexport interface SchemaDiff {\n del: string[],\n add: [string, TableSchema][];\n change: TableSchemaDiff[];\n}\n\nexport interface TableSchemaDiff {\n name: string,\n recreate: boolean,\n del: string[],\n add: IndexSpec[],\n change: IndexSpec[]\n}\n\nexport function getSchemaDiff(oldSchema: DbSchema, newSchema: DbSchema): SchemaDiff {\n const diff: SchemaDiff = {\n del: [], // Array of table names\n add: [], // Array of [tableName, newDefinition]\n change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}\n };\n let table: string;\n for (table in oldSchema) {\n if (!newSchema[table]) diff.del.push(table);\n }\n for (table in newSchema) {\n const oldDef = oldSchema[table],\n newDef = newSchema[table];\n if (!oldDef) {\n diff.add.push([table, newDef]);\n } else {\n const change = {\n name: table,\n def: newDef,\n recreate: false,\n del: [],\n add: [],\n change: []\n };\n if (\n (\n // compare keyPaths no matter if string or string[]\n // compare falsy keypaths same no matter if they are null or empty string.\n ''+(oldDef.primKey.keyPath||'')\n ) !== (\n ''+(newDef.primKey.keyPath||'')\n ) ||\n // Compare the autoIncrement flag also\n (oldDef.primKey.auto !== newDef.primKey.auto))\n {\n // Primary key has changed. Remove and re-add table.\n change.recreate = true;\n diff.change.push(change);\n } else {\n // Same primary key. Just find out what differs:\n const oldIndexes = oldDef.idxByName;\n const newIndexes = newDef.idxByName;\n let idxName: string;\n for (idxName in oldIndexes) {\n if (!newIndexes[idxName]) change.del.push(idxName);\n }\n for (idxName in newIndexes) {\n const oldIdx = oldIndexes[idxName],\n newIdx = newIndexes[idxName];\n if (!oldIdx) change.add.push(newIdx);\n else if (oldIdx.src !== newIdx.src) change.change.push(newIdx);\n }\n if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n diff.change.push(change);\n }\n }\n }\n }\n return diff;\n}\n\nexport function createTable(\n idbtrans: IDBTransaction,\n tableName: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n) {\n const store = idbtrans.db.createObjectStore(\n tableName,\n primKey.keyPath ?\n { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n { autoIncrement: primKey.auto }\n );\n indexes.forEach(idx => addIndex(store, idx));\n return store;\n}\n\nexport function createMissingTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n keys(newSchema).forEach(tableName => {\n if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n if (debug) console.debug('Dexie: Creating missing table', tableName);\n createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n }\n });\n}\n\nexport function deleteRemovedTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName =>\n newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName));\n}\n\nexport function addIndex(store: IDBObjectStore, idx: IndexSpec) {\n store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\n\nfunction buildGlobalSchema(\n db: Dexie,\n idbdb: IDBDatabase,\n tmpTrans: IDBTransaction\n) {\n const globalSchema = {};\n const dbStoreNames = slice(idbdb.objectStoreNames, 0);\n dbStoreNames.forEach(storeName => {\n const store = tmpTrans.objectStore(storeName);\n let keyPath = store.keyPath;\n const primKey = createIndexSpec(\n nameFromKeyPath(keyPath),\n keyPath || \"\",\n true,\n false,\n !!store.autoIncrement,\n keyPath && typeof keyPath !== \"string\",\n true\n );\n const indexes: IndexSpec[] = [];\n for (let j = 0; j < store.indexNames.length; ++j) {\n const idbindex = store.index(store.indexNames[j]);\n keyPath = idbindex.keyPath;\n var index = createIndexSpec(\n idbindex.name,\n keyPath,\n !!idbindex.unique,\n !!idbindex.multiEntry,\n false,\n keyPath && typeof keyPath !== \"string\",\n false\n );\n indexes.push(index);\n }\n globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n });\n return globalSchema;\n}\n\nexport function readGlobalSchema(db: Dexie, idbdb: IDBDatabase, tmpTrans: IDBTransaction) {\n db.verno = idbdb.version / 10;\n const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);\n db._storeNames = slice(idbdb.objectStoreNames, 0);\n setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\n\nexport function verifyInstalledSchema(db: Dexie, tmpTrans: IDBTransaction): boolean {\n const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans);\n const diff = getSchemaDiff(installedSchema, db._dbSchema);\n return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length));\n}\n\nexport function adjustToExistingIndexNames(db: Dexie, schema: DbSchema, idbtrans: IDBTransaction) {\n // Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db\n const storeNames = idbtrans.db.objectStoreNames;\n\n for (let i = 0; i < storeNames.length; ++i) {\n const storeName = storeNames[i];\n const store = idbtrans.objectStore(storeName);\n db._hasGetAll = 'getAll' in store;\n\n for (let j = 0; j < store.indexNames.length; ++j) {\n const indexName = store.indexNames[j];\n const keyPath = store.index(indexName).keyPath;\n const dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n if (schema[storeName]) {\n const indexSpec = schema[storeName].idxByName[dexieName];\n if (indexSpec) {\n indexSpec.name = indexName;\n delete schema[storeName].idxByName[dexieName];\n schema[storeName].idxByName[indexName] = indexSpec;\n }\n }\n }\n }\n\n // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579\n if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604)\n {\n db._hasGetAll = false;\n }\n}\n\nexport function parseIndexSyntax(primKeyAndIndexes: string): IndexSpec[] {\n return primKeyAndIndexes.split(',').map((index, indexNum) => {\n index = index.trim();\n const name = index.replace(/([&*]|\\+\\+)/g, \"\"); // Remove \"&\", \"++\" and \"*\"\n // Let keyPath of \"[a+b]\" be [\"a\",\"b\"]:\n const keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n\n return createIndexSpec(\n name,\n keyPath || null,\n /\\&/.test(index),\n /\\*/.test(index),\n /\\+\\+/.test(index),\n isArray(keyPath),\n indexNum === 0\n );\n });\n}\n","import { Version as IVersion } from '../../public/types/version';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { extend, keys } from '../../functions/utils';\nimport { Dexie } from '../dexie';\nimport { Transaction } from '../transaction';\nimport { removeTablesApi, setApiOnPlace, parseIndexSyntax } from './schema-helpers';\nimport { exceptions } from '../../errors';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\n\n/** class Version\n *\n * https://dexie.org/docs/Version/Version\n */\nexport class Version implements IVersion {\n db: Dexie;\n _cfg: {\n version: number,\n storesSource: { [tableName: string]: string | null },\n dbschema: DbSchema,\n tables: {},\n contentUpgrade: Function | null\n }\n\n _parseStoresSpec(stores: { [tableName: string]: string | null }, outSchema: DbSchema): any {\n keys(stores).forEach(tableName => {\n if (stores[tableName] !== null) {\n var indexes = parseIndexSyntax(stores[tableName]);\n var primKey = indexes.shift();\n primKey.unique = true;\n if (primKey.multi) throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n indexes.forEach(idx => {\n if (idx.auto) throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n if (!idx.keyPath) throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n });\n outSchema[tableName] = createTableSchema(tableName, primKey, indexes);\n }\n });\n }\n\n stores(stores: { [key: string]: string | null; }): IVersion {\n const db = this.db;\n this._cfg.storesSource = this._cfg.storesSource ?\n extend(this._cfg.storesSource, stores) :\n stores;\n const versions = db._versions;\n\n // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax.\n const storesSpec: { [key: string]: string; } = {};\n let dbschema = {};\n versions.forEach(version => { // 'versions' is always sorted by lowest version first.\n extend(storesSpec, version._cfg.storesSource);\n dbschema = (version._cfg.dbschema = {});\n version._parseStoresSpec(storesSpec, dbschema);\n });\n // Update the latest schema to this version\n db._dbSchema = dbschema;\n // Update APIs\n removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);\n setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n db._storeNames = keys(dbschema);\n return this;\n }\n\n upgrade(upgradeFunction: (trans: Transaction) => PromiseLike | void): Version {\n this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction);\n return this;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Version } from './version';\n\nexport interface VersionConstructor {\n new(versionNumber: number): Version;\n prototype: Version;\n}\n\n/** Generates a Version constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createVersionConstructor(db: Dexie) {\n return makeClassConstructor(\n Version.prototype,\n\n function Version(this: Version, versionNumber: number) {\n this.db = db;\n this._cfg = {\n version: versionNumber,\n storesSource: null,\n dbschema: {},\n tables: {},\n contentUpgrade: null\n };\n });\n\n}\n","import { Dexie } from \"../classes/dexie/dexie\";\nimport { Table } from \"../public/types/table\";\nimport { DBNAMES_DB } from \"../globals/constants\";\nimport { DexieDOMDependencies } from \"../public/types/dexie-dom-dependencies\";\nimport { nop } from \"../functions/chaining-functions\";\n\ntype IDBKeyNamesVar = typeof IDBKeyRange;\n\nfunction getDbNamesTable(indexedDB: IDBFactory, IDBKeyRange: IDBKeyNamesVar) {\n let dbNamesDB = indexedDB[\"_dbNamesDB\"];\n if (!dbNamesDB) {\n dbNamesDB = indexedDB[\"_dbNamesDB\"] = new Dexie(DBNAMES_DB, {\n addons: [],\n indexedDB,\n IDBKeyRange,\n });\n dbNamesDB.version(1).stores({ dbnames: \"name\" });\n }\n return dbNamesDB.table(\"dbnames\") as Table<{ name: string }, string>;\n}\n\nfunction hasDatabasesNative(indexedDB: IDBFactory) {\n return indexedDB && typeof indexedDB.databases === \"function\";\n}\n\nexport function getDatabaseNames({\n indexedDB,\n IDBKeyRange,\n}: DexieDOMDependencies) {\n return hasDatabasesNative(indexedDB)\n ? Promise.resolve(indexedDB.databases()).then((infos) =>\n infos\n // Select name prop of infos:\n .map((info) => info.name)\n // Filter out DBNAMES_DB as previous Dexie or browser version would not have included it in the result.\n .filter((name) => name !== DBNAMES_DB)\n )\n : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys();\n}\n\nexport function _onDatabaseCreated(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).put({name}).catch(nop);\n}\n\nexport function _onDatabaseDeleted(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop);\n}\n","import { newScope } from '../../helpers/promise';\nimport { PSD } from '../../helpers/promise';\n\nexport function vip (fn) {\n // To be used by subscribers to the on('ready') event.\n // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing.\n // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD\n // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since\n // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that.\n // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip()\n // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by\n // the caller will not resolve until database is opened.\n return newScope(function () {\n PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing.\n return fn();\n });\n}\n\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import { cmp } from \"../functions/cmp\";\nimport { extend, iteratorSymbol, props } from '../functions/utils';\nimport { IndexableType } from '../public';\nimport {\n EmptyRange,\n IntervalTree,\n IntervalTreeNode,\n RangeSetConstructor,\n RangeSetPrototype,\n} from \"../public/types/rangeset\";\n\n/* An interval tree implementation to efficiently detect overlapping ranges of queried indexes.\n *\n * https://en.wikipedia.org/wiki/Interval_tree\n * \n */\n\nfunction isEmptyRange(node: IntervalTree | {from: IndexableType, to: IndexableType}): node is EmptyRange {\n return !(\"from\" in node);\n}\n\nexport type RangeSet = RangeSetPrototype & IntervalTree;\n\nexport const RangeSet = function(fromOrTree: any, to?: any) {\n if (this) {\n // Called with new()\n extend(this, arguments.length ? {d:1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree} : {d:0});\n } else {\n // Called without new()\n const rv = new RangeSet();\n if (fromOrTree && (\"d\" in fromOrTree)) {\n extend(rv, fromOrTree);\n }\n return rv;\n }\n} as RangeSetConstructor;\n\nprops(RangeSet.prototype, {\n add(rangeSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n mergeRanges(this, rangeSet);\n return this;\n },\n addKey(key: IndexableType) {\n addRange(this, key, key);\n return this;\n },\n addKeys(keys: IndexableType[]) {\n keys.forEach(key => addRange(this, key, key));\n return this;\n },\n\n [iteratorSymbol](): Iterator {\n return getRangeSetIterator(this);\n }\n});\n\nfunction addRange(target: IntervalTree, from: IndexableType, to: IndexableType) {\n const diff = cmp(from, to);\n // cmp() returns NaN if one of the args are IDB-invalid keys.\n // Avoid storing invalid keys in rangeset:\n if (isNaN(diff)) return;\n\n // Caller is trying to add a range where from is greater than to:\n if (diff > 0) throw RangeError();\n \n if (isEmptyRange(target)) return extend(target, { from, to, d: 1 });\n const left = target.l;\n const right = target.r;\n if (cmp(to, target.from) < 0) {\n left\n ? addRange(left, from, to)\n : (target.l = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.to) > 0) {\n right\n ? addRange(right, from, to)\n : (target.r = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n // Now we have some kind of overlap. We will be able to merge the new range into the node or let it be swallowed.\n\n // Grow left?\n if (cmp(from, target.from) < 0) {\n target.from = from;\n target.l = null; // Cut off for now. Re-add later.\n target.d = right ? right.d + 1 : 1;\n }\n // Grow right?\n if (cmp(to, target.to) > 0) {\n target.to = to;\n target.r = null; // Cut off for now. Re-add later.\n target.d = target.l ? target.l.d + 1 : 1;\n }\n const rightWasCutOff = !target.r;\n // Re-add left?\n if (left && !target.l) {\n //Ranges to the left may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, left);\n }\n // Re-add right?\n if (right && rightWasCutOff) {\n //Ranges to the right may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, right);\n }\n}\n\nexport function mergeRanges(target: IntervalTree, newSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n function _addRangeSet(\n target: IntervalTree,\n { from, to, l, r }: IntervalTreeNode | {from: IndexableType, to: IndexableType, l?: undefined, r?: undefined}\n ) {\n addRange(target, from, to);\n if (l) _addRangeSet(target, l);\n if (r) _addRangeSet(target, r);\n }\n\n if(!isEmptyRange(newSet)) _addRangeSet(target, newSet);\n}\n\nexport function rangesOverlap(\n rangeSet1: IntervalTree,\n rangeSet2: IntervalTree\n): boolean {\n // Start iterating other from scratch.\n const i1 = getRangeSetIterator(rangeSet2);\n let nextResult1 = i1.next();\n if (nextResult1.done) return false;\n let a = nextResult1.value;\n\n // Start iterating this from start of other\n const i2 = getRangeSetIterator(rangeSet1);\n let nextResult2 = i2.next(a.from); // Start from beginning of other range\n let b = nextResult2.value;\n\n while (!nextResult1.done && !nextResult2.done) {\n if (cmp(b!.from, a.to) <= 0 && cmp(b!.to, a.from) >= 0) return true;\n cmp(a.from, b!.from) < 0\n ? (a = (nextResult1 = i1.next(b!.from)).value!) // a is behind. forward it to beginning of next b-range\n : (b = (nextResult2 = i2.next(a.from)).value); // b is behind. forward it to beginning of next a-range\n }\n return false;\n}\n\ntype RangeSetIteratorState =\n | {\n up?: RangeSetIteratorState;\n n: IntervalTreeNode;\n s: 0 | 1 | 2 | 3;\n }\n | undefined\n | null;\nexport function getRangeSetIterator(\n node: EmptyRange | IntervalTreeNode\n): Generator {\n let state: RangeSetIteratorState = isEmptyRange(node) ? null : { s: 0, n: node };\n\n return {\n next(key?) {\n const keyProvided = arguments.length > 0;\n while (state) {\n switch (state.s) {\n case 0:\n // Initial state for node.\n // Fast forward to leftmost node.\n state.s = 1;\n if (keyProvided) {\n while (state.n.l && cmp(key, state.n.from) < 0)\n state = { up: state, n: state.n.l, s: 1 };\n } else {\n while (state.n.l) state = { up: state, n: state.n.l, s: 1 };\n }\n // intentionally fall into case 1:\n case 1:\n // We're on a node where it's left part is already handled or does not exist.\n state.s = 2;\n if (!keyProvided || cmp(key, state.n.to) <= 0)\n return { value: state.n, done: false };\n case 2:\n // We've emitted our node and should continue with the right part or let parent take over from it's state 1\n if (state.n.r) {\n state.s = 3; // So when child is done, we know we're done.\n state = { up: state, n: state.n.r, s: 0 };\n continue; // Will fall in to case 0 with fast forward to left leaf of this subtree.\n }\n // intentionally fall into case 3:\n case 3:\n state = state.up;\n }\n }\n return { done: true };\n },\n } as Generator;\n}\n\nfunction rebalance(target: IntervalTreeNode) {\n const diff = (target.r?.d || 0) - (target.l?.d || 0);\n const r = diff > 1 ? \"r\" : diff < -1 ? \"l\" : \"\";\n if (r) {\n\n // Rotate (https://en.wikipedia.org/wiki/Tree_rotation)\n //\n // \n // [OLDROOT]\n // [OLDROOT.L] [NEWROOT]\n // [NEWROOT.L] [NEWROOT.R]\n //\n // Is going to become:\n //\n // \n // [NEWROOT]\n // [OLDROOT] [NEWROOT.R]\n // [OLDROOT.L] [NEWROOT.L] \n\n // * clone now has the props of OLDROOT\n // Plan:\n // * target must be given the props of NEWROOT\n // * target[l] must point to a new OLDROOT\n // * target[r] must point to NEWROOT.R\n // * OLDROOT[r] must point to NEWROOT.L\n const l = r === \"r\" ? \"l\" : \"r\"; // Support both left/right rotation\n const rootClone = { ...target };\n // We're gonna copy props from target's right node into target so that target will\n // have same range as old target[r] (instead of changing pointers, we copy values.\n // that way we do not need to adjust pointers in parents).\n const oldRootRight = target[r]; \n target.from = oldRootRight.from;\n target.to = oldRootRight.to;\n target[r] = oldRootRight[r];\n rootClone[r] = oldRootRight[l];\n target[l] = rootClone;\n rootClone.d = computeDepth(rootClone);\n }\n target.d = computeDepth(target);\n}\n\nfunction computeDepth({ r, l }: Pick) {\n return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;\n}\n","import { cloneSimpleObjectTree, deepClone, keys, objectIsEmpty } from \"../functions/utils\";\nimport { mergeRanges, RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\n\nexport function extendObservabilitySet(\n target: ObservabilitySet,\n newSet: ObservabilitySet\n): ObservabilitySet {\n keys(newSet).forEach(part => {\n if (target[part]) mergeRanges(target[part], newSet[part]);\n else target[part] = cloneSimpleObjectTree(newSet[part]); // Somewhat faster\n });\n return target;\n}\n","import { rangesOverlap } from '../helpers/rangeset';\nimport { ObservabilitySet } from '../public/types/db-events';\n\nexport function obsSetsOverlap(os1: ObservabilitySet, os2: ObservabilitySet) {\n return os1.all || os2.all || Object.keys(os1).some(\n (key) => os2[key] && rangesOverlap(os2[key], os1[key])\n );\n}\n","import { type GlobalQueryCache } from \"../../public/types/cache\";\n\nexport const cache: GlobalQueryCache = {}\n","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport { extendObservabilitySet } from '../extend-observability-set';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { cache } from './cache';\n\nlet unsignaledParts: ObservabilitySet = {};\nlet isTaskEnqueued = false;\n\nexport function signalSubscribersLazily(part: ObservabilitySet, optimistic = false) {\n extendObservabilitySet(unsignaledParts, part);\n if (!isTaskEnqueued) {\n isTaskEnqueued = true;\n setTimeout(() => {\n isTaskEnqueued = false;\n const parts = unsignaledParts;\n unsignaledParts = {};\n signalSubscribersNow(parts, false);\n }, 0);\n }\n}\n\nexport function signalSubscribersNow(\n updatedParts: ObservabilitySet,\n deleteAffectedCacheEntries = false\n) {\n const queriesToSignal = new Set<() => void>();\n if (updatedParts.all) {\n // Signal all subscribers to requery.\n for (const tblCache of Object.values(cache)) {\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n } else {\n for (const key in updatedParts) {\n const parts = /^idb\\:\\/\\/(.*)\\/(.*)\\//.exec(key);\n if (parts) {\n const [, dbName, tableName] = parts;\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (tblCache)\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n }\n }\n // Now when affected cache entries are removed, signal collected subscribers to requery.\n queriesToSignal.forEach((requery) => requery());\n}\n\nfunction collectTableSubscribers(\n tblCache: TblQueryCache,\n updatedParts: ObservabilitySet,\n outQueriesToSignal: Set<() => void>,\n deleteAffectedCacheEntries: boolean\n) {\n const updatedEntryLists: [string, CacheEntry[]][] = [];\n for (const [indexName, entries] of Object.entries(tblCache.queries.query)) {\n const filteredEntries: CacheEntry[] = [];\n for (const entry of entries) {\n if (obsSetsOverlap(updatedParts, entry.obsSet)) {\n // This query is affected by the mutation. Remove it from cache\n // and signal all subscribers to requery.\n entry.subscribers.forEach((requery) => outQueriesToSignal.add(requery));\n } else if (deleteAffectedCacheEntries) {\n filteredEntries.push(entry);\n }\n }\n // Collect cache entries to be updated\n if (deleteAffectedCacheEntries)\n updatedEntryLists.push([indexName, filteredEntries]);\n }\n if (deleteAffectedCacheEntries) {\n for (const [indexName, filteredEntries] of updatedEntryLists) {\n tblCache.queries.query[indexName] = filteredEntries;\n }\n }\n}\n","import { Dexie } from './dexie';\nimport * as Debug from '../../helpers/debug';\nimport { rejection } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { eventRejectHandler, preventDefault } from '../../functions/event-wrappers';\nimport Promise, { wrap } from '../../helpers/promise';\nimport { connections } from '../../globals/constants';\nimport { runUpgraders, readGlobalSchema, adjustToExistingIndexNames, verifyInstalledSchema, patchCurrentVersion } from '../version/schema-helpers';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { _onDatabaseCreated } from '../../helpers/database-enumerator';\nimport { vip } from './vip';\nimport { promisableChain, nop } from '../../functions/chaining-functions';\nimport { generateMiddlewareStacks } from './generate-middleware-stacks';\nimport { slice } from '../../functions/utils';\nimport safari14Workaround from 'safari-14-idb-fix';\nimport { type ObservabilitySet } from '../../public/types/db-events';\nimport { RangeSet } from '../../helpers/rangeset';\nimport { DEXIE_STORAGE_MUTATED_EVENT_NAME, globalEvents } from '../../globals/global-events';\nimport { signalSubscribersNow } from '../../live-query/cache/signalSubscribers';\n\nexport function dexieOpen (db: Dexie) {\n const state = db._state;\n const {indexedDB} = db._deps;\n if (state.isBeingOpened || db.idbdb)\n return state.dbReadyPromise.then(() => state.dbOpenError ?\n rejection (state.dbOpenError) :\n db);\n state.isBeingOpened = true;\n state.dbOpenError = null;\n state.openComplete = false;\n const openCanceller = state.openCanceller;\n let nativeVerToOpen = Math.round(db.verno * 10);\n let schemaPatchMode = false;\n\n function throwIfCancelled() {\n // If state.openCanceller object reference is replaced, it means db.close() has been called,\n // meaning this open flow should be cancelled.\n if (state.openCanceller !== openCanceller) throw new exceptions.DatabaseClosed('db.open() was cancelled');\n }\n \n // Function pointers to call when the core opening process completes.\n let resolveDbReady = state.dbReadyResolve,\n // upgradeTransaction to abort on failure.\n upgradeTransaction: (IDBTransaction | null) = null,\n wasCreated = false;\n\n const tryOpenDB = () => new Promise((resolve, reject) => {\n throwIfCancelled();\n // If no API, throw!\n if (!indexedDB) throw new exceptions.MissingAPI();\n const dbName = db.name;\n \n const req = state.autoSchema || !nativeVerToOpen ?\n indexedDB.open(dbName) :\n indexedDB.open(dbName, nativeVerToOpen);\n if (!req) throw new exceptions.MissingAPI(); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134\n req.onerror = eventRejectHandler(reject);\n req.onblocked = wrap(db._fireOnBlocked);\n req.onupgradeneeded = wrap (e => {\n upgradeTransaction = req.transaction;\n if (state.autoSchema && !db._options.allowEmptyDB) { // Unless an addon has specified db._allowEmptyDB, lets make the call fail.\n // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases.\n // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we\n // do not create a new database by accident here.\n req.onerror = preventDefault; // Prohibit onabort error from firing before we're done!\n upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.)\n // Close database and delete it.\n req.result.close();\n const delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here!\n delreq.onsuccess = delreq.onerror = wrap(() => {\n reject (new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`));\n });\n } else {\n upgradeTransaction.onerror = eventRejectHandler(reject);\n const oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix.\n wasCreated = oldVer < 1;\n db.idbdb = req.result;\n if (schemaPatchMode) {\n patchCurrentVersion(db, upgradeTransaction);\n }\n runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n }\n }, reject);\n \n req.onsuccess = wrap (() => {\n // Core opening procedure complete. Now let's just record some stuff.\n upgradeTransaction = null;\n const idbdb = db.idbdb = req.result;\n\n const objectStoreNames = slice(idbdb.objectStoreNames);\n if (objectStoreNames.length > 0) try {\n const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n if (state.autoSchema) readGlobalSchema(db, idbdb, tmpTrans);\n else {\n adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) {\n console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this.`);\n idbdb.close();\n nativeVerToOpen = idbdb.version + 1;\n schemaPatchMode = true;\n return resolve (tryOpenDB()); // Try again with new version (nativeVerToOpen\n }\n }\n generateMiddlewareStacks(db, tmpTrans);\n } catch (e) {\n // Safari 8 may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120.\n // BUGBUG: It will bail out anyway as of Dexie 3.\n // Should we support Safari 8 anymore? Believe all\n // Dexie users use the shim for that platform anyway?!\n // If removing Safari 8 support, go ahead and remove the safariMultiStoreFix() function\n // as well as absurd upgrade version quirk for Safari.\n }\n \n connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari.\n \n idbdb.onversionchange = wrap(ev => {\n state.vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari)\n db.on(\"versionchange\").fire(ev);\n });\n \n idbdb.onclose = wrap(ev => {\n db.on(\"close\").fire(ev);\n });\n\n if (wasCreated) _onDatabaseCreated(db._deps, dbName);\n\n resolve();\n\n }, reject);\n }).catch(err => {\n switch (err?.name) {\n case \"UnknownError\":\n if (state.PR1398_maxLoop > 0) {\n // Bug in Chrome after clearing site data\n // https://github.com/dexie/Dexie.js/issues/543#issuecomment-1795736695\n state.PR1398_maxLoop--;\n console.warn('Dexie: Workaround for Chrome UnknownError on open()');\n return tryOpenDB();\n }\n break;\n case \"VersionError\":\n if (nativeVerToOpen > 0) {\n nativeVerToOpen = 0;\n return tryOpenDB();\n }\n break;\n }\n return Promise.reject(err);\n });\n \n // safari14Workaround = Workaround by jakearchibald for new nasty bug in safari 14.\n return Promise.race([\n openCanceller,\n (typeof navigator === 'undefined' ? Promise.resolve() : safari14Workaround()).then(tryOpenDB)\n ]).then(() => {\n // Before finally resolving the dbReadyPromise and this promise,\n // call and await all on('ready') subscribers:\n // Dexie.vip() makes subscribers able to use the database while being opened.\n // This is a must since these subscribers take part of the opening procedure.\n throwIfCancelled();\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>db.on.ready.fire(db.vip))).then(function fireRemainders() {\n if (state.onReadyBeingFired.length > 0) {\n // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed.\n let remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>remainders(db.vip))).then(fireRemainders)\n }\n });\n }).finally(()=>{\n if (state.openCanceller === openCanceller) {\n // Only modify state if not cancelled in the mean time.\n state.onReadyBeingFired = null;\n state.isBeingOpened = false;\n }\n }).catch(err => {\n state.dbOpenError = err; // Record the error. It will be used to reject further promises of db operations.\n try {\n // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit.\n upgradeTransaction && upgradeTransaction.abort();\n } catch { }\n if (openCanceller === state.openCanceller) {\n // Still in the same open flow - The error reason was not due to external call to db.close().\n // Make sure to call db.close() to finalize resources.\n db._close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh.\n }\n return rejection (err);\n }).finally(()=>{\n state.openComplete = true;\n resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters.\n }).then(()=>{\n if (wasCreated) {\n // Propagate full range on primary keys and indexes on all tables now that the DB is ready and opened,\n // and all upgraders and on('ready') subscribers have run.\n const everything: ObservabilitySet = {};\n db.tables.forEach(table => {\n table.schema.indexes.forEach(idx => {\n if (idx.name) everything[`idb://${db.name}/${table.name}/${idx.name}`] = new RangeSet(-Infinity, [[[]]]);\n });\n everything[`idb://${db.name}/${table.name}/`] = everything[`idb://${db.name}/${table.name}/:dels`] = new RangeSet(-Infinity, [[[]]]);\n });\n // Database was created. If another tab had it open when it was deleted and reopened, that tab must be updated now.\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything);\n // Wipe the cache and trigger optimistic queries:\n signalSubscribersNow(everything, true);\n }\n // Resolve the db.open() with the db instance.\n return db;\n });\n}\n","import { isArray } from '../functions/utils';\n\nexport function awaitIterator (iterator: Iterator) {\n var callNext = result => iterator.next(result),\n doThrow = error => iterator.throw(error),\n onSuccess = step(callNext),\n onError = step(doThrow);\n\n function step(getNext: (any)=>any) {\n return (val?) => {\n var next = getNext(val),\n value = next.value;\n\n return next.done ? value :\n (!value || typeof value.then !== 'function' ?\n isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :\n value.then(onSuccess, onError));\n };\n }\n\n return step(callNext)();\n}\n","import { TransactionMode } from '../../public/types/transaction-mode';\nimport { errnames, exceptions } from '../../errors';\nimport { flatten, isAsyncFunction } from '../../functions/utils';\nimport { Dexie } from './dexie';\nimport { Transaction } from '../transaction';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise, {\n PSD,\n NativePromise,\n decrementExpectedAwaits,\n rejection,\n incrementExpectedAwaits\n} from '../../helpers/promise';\n\nexport function extractTransactionArgs(mode: TransactionMode, _tableArgs_, scopeFunc) {\n // Let table arguments be all arguments between mode and last argument.\n var i = arguments.length;\n if (i < 2) throw new exceptions.InvalidArgument(\"Too few arguments\");\n // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments)\n // and clone arguments except the first one into local var 'args'.\n var args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments.\n scopeFunc = args.pop();\n var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays.\n return [mode, tables, scopeFunc];\n}\n\nexport function enterTransactionScope(\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n parentTransaction: Transaction | undefined,\n scopeFunc: ()=>PromiseLike | any\n) {\n return Promise.resolve().then(() => {\n // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction().\n const transless = PSD.transless || PSD;\n // Our transaction.\n //return new Promise((resolve, reject) => {\n const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n trans.explicit = true;\n // Let the transaction instance be part of a Promise-specific data (PSD) value.\n const zoneProps = {\n trans: trans,\n transless: transless\n };\n\n if (parentTransaction) {\n // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing)\n trans.idbtrans = parentTransaction.idbtrans;\n } else {\n try {\n trans.create(); // Create the native transaction so that complete() or error() will trigger even if no operation is made upon it.\n // @ts-ignore Mark the idbtrans object with \"_explicit\". DBCore middleware won't have access to Dexie trans but will need to have this info.\n trans.idbtrans._explicit = true;\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(() => enterTransactionScope(\n db,\n mode,\n storeNames,\n null,\n scopeFunc\n ));\n }\n return rejection(ex);\n }\n }\n\n // Support for native async await.\n const scopeFuncIsAsync = isAsyncFunction(scopeFunc);\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n\n let returnValue;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = scopeFunc.call(trans, trans);\n if (returnValue) {\n if (scopeFuncIsAsync) {\n // scopeFunc is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n } else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {\n // scopeFunc returned an iterator with throw-support. Handle yield as await.\n returnValue = awaitIterator(returnValue);\n }\n }\n }, zoneProps);\n return (returnValue && typeof returnValue.then === 'function' ?\n // Promise returned. User uses promise-style transactions.\n Promise.resolve(returnValue).then(x => trans.active ?\n x // Transaction still active. Continue.\n : rejection(new exceptions.PrematureCommit(\n \"Transaction committed too early. See http://bit.ly/2kdckMn\")))\n // No promise returned. Wait for all outstanding promises before continuing. \n : promiseFollowed.then(() => returnValue)\n ).then(x => {\n // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion:\n if (parentTransaction) trans._resolve();\n // wait for trans._completion\n // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves)\n return trans._completion.then(() => x);\n }).catch(e => {\n trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc!\n return rejection(e);\n });\n });\n}\n","import {\n DBCore,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryRequest,\n DBCoreRangeType,\n DBCoreOpenCursorRequest,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreTable,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { getKeyExtractor } from './get-key-extractor';\nimport { getKeyPathAlias } from './dbcore-indexeddb';\nimport { Middleware } from '../public/types/middleware';\n\ninterface VirtualIndex extends DBCoreIndex {\n /** True if this index is virtual, i.e. represents a compound index internally,\n * but makes it act as as having a subset of its keyPaths.\n */\n isVirtual: boolean;\n\n /** Number of keypaths that this index comprises. Can be 0..N.\n * Note: This is the length of the *virtual index*, not the real index.\n */\n keyLength: number;\n\n /** Number of popped keypaths from the real index.\n */\n keyTail: number;\n\n /** LowLevelIndex represents the actual IndexedDB index behind it */\n lowLevelIndex: DBCoreIndex;\n}\n\n// Move into some util:\nexport function pad (a: any | any[], value: any, count: number) {\n const result = isArray(a) ? a.slice() : [a];\n for (let i=0; i 0;\n const virtualIndex = {\n ...lowLevelIndex,\n name: isVirtual\n ? `${keyPathAlias}(virtual-from:${lowLevelIndex.name})`\n : lowLevelIndex.name,\n lowLevelIndex,\n isVirtual,\n keyTail,\n keyLength,\n extractKey: getKeyExtractor(keyPath),\n unique: !isVirtual && lowLevelIndex.unique\n };\n indexList.push(virtualIndex);\n if (!virtualIndex.isPrimaryKey) {\n allVirtualIndexes.push(virtualIndex);\n }\n if (keyLength > 1) {\n const virtualKeyPath = keyLength === 2 ?\n keyPath[0] : // This is a compound [a, b]. Add a virtual normal index a.\n keyPath.slice(0, keyLength - 1); // This is compound [a,b,c]. Add virtual compound [a,b].\n addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n }\n indexList.sort((a,b) => a.keyTail - b.keyTail); // Shortest keyTail is the best one (represents real index)\n return virtualIndex;\n }\n \n const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n indexLookup[\":id\"] = [primaryKey];\n for (const index of schema.indexes) {\n addVirtualIndexes(index.keyPath, 0, index);\n }\n \n function findBestIndex(keyPath: null | string | string[]): VirtualIndex {\n const result = indexLookup[getKeyPathAlias(keyPath)];\n return result && result[0];\n }\n \n function translateRange (range: DBCoreKeyRange, keyTail: number): DBCoreKeyRange {\n return {\n type: range.type === DBCoreRangeType.Equal ?\n DBCoreRangeType.Range :\n range.type,\n lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),\n lowerOpen: true, // doesn't matter true or false\n upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),\n upperOpen: true // doesn't matter true or false\n };\n }\n \n function translateRequest (req: DBCoreQueryRequest): DBCoreQueryRequest;\n function translateRequest (req: DBCoreOpenCursorRequest): DBCoreOpenCursorRequest;\n function translateRequest (req: DBCoreCountRequest): DBCoreCountRequest {\n const index = req.query.index as VirtualIndex;\n return index.isVirtual ? {\n ...req,\n query: {\n index: index.lowLevelIndex,\n range: translateRange(req.query.range, index.keyTail)\n }\n } : req;\n }\n \n const result: DBCoreTable = {\n ...table,\n schema: {\n ...schema,\n primaryKey,\n indexes: allVirtualIndexes,\n getIndexByKeyPath: findBestIndex\n },\n\n count(req) {\n return table.count(translateRequest(req));\n }, \n \n query(req) {\n return table.query(translateRequest(req));\n },\n \n openCursor(req) {\n const {keyTail, isVirtual, keyLength} = (req.query.index as VirtualIndex);\n if (!isVirtual) return table.openCursor(req);\n \n function createVirtualCursor(cursor: DBCoreCursor) : DBCoreCursor {\n function _continue (key?: any) {\n key != null ?\n cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :\n req.unique ?\n cursor.continue(\n cursor.key.slice(0, keyLength)\n .concat(req.reverse\n ? down.MIN_KEY\n : down.MAX_KEY, keyTail)\n ) :\n cursor.continue()\n }\n const virtualCursor = Object.create(cursor, {\n continue: {value: _continue},\n continuePrimaryKey: {\n value(key: any, primaryKey: any) {\n cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n }\n },\n primaryKey: {\n get() {\n return cursor.primaryKey;\n }\n },\n key: {\n get() {\n const key = cursor.key as any[]; // A virtual cursor always operates on compound key\n return keyLength === 1 ?\n key[0] : // Cursor.key should not be an array.\n key.slice(0, keyLength); // Cursor.key should be first part of array.\n }\n },\n value: {\n get() {\n return cursor.value;\n }\n }\n });\n return virtualCursor;\n }\n \n return table.openCursor(translateRequest(req))\n .then(cursor => cursor && createVirtualCursor(cursor));\n }\n };\n return result;\n }\n }\n}\n\nexport const virtualIndexMiddleware : Middleware = {\n stack: \"dbcore\",\n name: \"VirtualIndexMiddleware\",\n level: 1,\n create: createVirtualIndexMiddleware\n};\n\n","import { keys, hasOwn, toStringTag } from './utils';\n\nexport function getObjectDiff(a: any, b: any, rv?: any, prfx?: string) {\n // Compares objects a and b and produces a diff object.\n rv = rv || {};\n prfx = prfx || '';\n keys(a).forEach((prop) => {\n if (!hasOwn(b, prop)) {\n // Property removed\n rv[prfx + prop] = undefined;\n } else {\n var ap = a[prop],\n bp = b[prop];\n if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {\n const apTypeName = toStringTag(ap);\n const bpTypeName = toStringTag(bp);\n\n if (apTypeName !== bpTypeName) {\n rv[prfx + prop] = b[prop]; // Property changed to other type\n } else if (apTypeName === 'Object') {\n // Pojo objects (not Date, ArrayBuffer, Array etc). Go deep.\n getObjectDiff(ap, bp, rv, prfx + prop + '.');\n } else if (ap !== bp) {\n // Values differ.\n // Could have checked if Date, arrays or binary types have same\n // content here but I think that would be a suboptimation.\n // Prefer simplicity.\n rv[prfx + prop] = b[prop];\n }\n } else if (ap !== bp) rv[prfx + prop] = b[prop]; // Primitive value changed\n }\n });\n keys(b).forEach((prop) => {\n if (!hasOwn(a, prop)) {\n rv[prfx + prop] = b[prop]; // Property added\n }\n });\n return rv;\n}\n","import {\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreIndex,\n DBCoreTable,\n} from \"../public/types/dbcore\";\n\nexport function getEffectiveKeys (\n primaryKey: DBCoreIndex,\n req: (Pick & {keys?: any[]}) | Pick)\n{\n //const {outbound} = primaryKey;\n if (req.type === 'delete') return req.keys;\n return req.keys || req.values.map(primaryKey.extractKey)\n}\n","import {\n DBCore,\n DBCoreTable,\n DBCoreMutateResponse,\n DBCoreDeleteRangeRequest,\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreTransaction,\n DBCoreKeyRange\n} from \"../public/types/dbcore\";\nimport { nop } from '../functions/chaining-functions';\nimport { hasOwn, setByKeyPath } from '../functions/utils';\nimport { getObjectDiff } from \"../functions/get-object-diff\";\nimport { PSD } from '../helpers/promise';\n//import { LockableTableMiddleware } from '../dbcore/lockable-table-middleware';\nimport { getEffectiveKeys } from '../dbcore/get-effective-keys';\nimport { Middleware } from '../public/types/middleware';\nimport { Transaction } from '../classes/transaction';\n\nexport const hooksMiddleware: Middleware = {\n stack: \"dbcore\",\n name: \"HooksMiddleware\",\n level: 2,\n create: (downCore: DBCore) => ({\n ...downCore,\n table(tableName: string) {\n const downTable = downCore.table(tableName);\n const {primaryKey} = downTable.schema;\n \n const tableMiddleware: DBCoreTable = {\n ...downTable,\n mutate(req):Promise {\n const dxTrans = PSD.trans as Transaction;\n // Hooks can be transaction-bound. Need to grab them from transaction.table and not\n // db.table!\n const {deleting, creating, updating} = dxTrans.table(tableName).hook;\n switch (req.type) {\n case 'add':\n if (creating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'put':\n if (creating.fire === nop && updating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'delete':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'deleteRange':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>deleteRange(req), true);\n }\n // Any of the breaks above happened (no hooks) - do the default:\n return downTable.mutate(req);\n\n\n function addPutOrDelete(req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest): Promise {\n const dxTrans = PSD.trans;\n const keys = req.keys || getEffectiveKeys(primaryKey, req);\n if (!keys) throw new Error(\"Keys missing\");\n // Clone Request and set keys arg\n req = req.type === 'add' || req.type === 'put' ?\n {...req, keys} :\n {...req};\n if (req.type !== 'delete') req.values = [...req.values];\n if (req.keys) req.keys = [...req.keys];\n \n return getExistingValues(downTable, req, keys).then (existingValues => {\n const contexts = keys.map((key, i) => {\n const existingValue = existingValues[i];\n const ctx = { onerror: null, onsuccess: null };\n if (req.type === 'delete') {\n // delete operation\n deleting.fire.call(ctx, key, existingValue, dxTrans);\n } else if (req.type === 'add' || existingValue === undefined) {\n // The add() or put() resulted in a create\n const generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);\n if (key == null && generatedPrimaryKey != null) {\n key = generatedPrimaryKey;\n req.keys[i] = key;\n if (!primaryKey.outbound) {\n setByKeyPath(req.values[i], primaryKey.keyPath, key);\n }\n }\n } else {\n // The put() operation resulted in an update\n const objectDiff = getObjectDiff(existingValue, req.values[i]);\n const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n if (additionalChanges) {\n const requestedValue = req.values[i];\n Object.keys(additionalChanges).forEach(keyPath => {\n if (hasOwn(requestedValue, keyPath)) {\n // keyPath is already present as a literal property of the object\n requestedValue[keyPath] = additionalChanges[keyPath];\n } else {\n // keyPath represents a new or existing path into the object\n setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]);\n }\n });\n }\n }\n return ctx;\n });\n return downTable.mutate(req).then(({failures, results, numFailures, lastResult}) => {\n for (let i=0; i {\n contexts.forEach(ctx => ctx.onerror && ctx.onerror(error));\n return Promise.reject(error);\n });\n });\n }\n \n function deleteRange(req: DBCoreDeleteRangeRequest): Promise {\n return deleteNextChunk(req.trans, req.range, 10000);\n }\n \n function deleteNextChunk(trans: DBCoreTransaction, range: DBCoreKeyRange, limit: number) {\n // Query what keys in the DB within the given range\n return downTable.query({trans, values: false, query: {index: primaryKey, range}, limit})\n .then(({result}) => {\n // Given a set of keys, bulk delete those using the same procedure as in addPutOrDelete().\n // This will make sure that deleting hook is called.\n return addPutOrDelete({type: 'delete', keys: result, trans}).then(res => {\n if (res.numFailures > 0) return Promise.reject(res.failures[0]);\n if (result.length < limit) {\n return {failures: [], numFailures: 0, lastResult: undefined} as DBCoreMutateResponse;\n } else {\n return deleteNextChunk(trans, {...range, lower: result[result.length - 1], lowerOpen: true}, limit);\n }\n });\n })\n }\n }\n };\n //const {lock, lockableMiddleware} = LockableTableMiddleware(tableMiddleware);\n\n return tableMiddleware;\n },\n }) as DBCore\n};\n\nfunction getExistingValues(\n table: DBCoreTable,\n req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest,\n effectiveKeys: any[]\n) {\n return req.type === \"add\"\n ? Promise.resolve([])\n : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: \"immutable\" });\n}\n","import { deepClone } from \"../functions/utils\";\nimport { DBCore } from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport Promise from \"../helpers/promise\";\nimport { cmp } from '../functions/cmp';\n\nexport function getFromTransactionCache(\n keys: readonly any[],\n cache: { keys: any[]; values: any[] } | undefined | null,\n clone?: boolean\n) {\n try {\n if (!cache) return null;\n if (cache.keys.length < keys.length) return null;\n const result: any[] = [];\n // Compare if the exact same order of keys was retrieved in same transaction:\n // Allow some cached keys to be omitted from provided set of keys\n // Use case: 1. getMany(keys) 2. update a subset of those 3. call put with the updated ones ==> middlewares should be able to find old values\n for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) {\n if (cmp(cache.keys[i], keys[j]) !== 0) continue;\n result.push(clone ? deepClone(cache.values[i]) : cache.values[i]);\n ++j;\n }\n // If got all keys caller was looking for, return result.\n return result.length === keys.length ? result : null;\n } catch {\n return null;\n }\n}\n\nexport const cacheExistingValuesMiddleware: Middleware = {\n stack: \"dbcore\",\n level: -1,\n create: (core) => {\n return {\n table: (tableName) => {\n const table = core.table(tableName);\n return {\n ...table,\n getMany: (req) => {\n if (!req.cache) {\n return table.getMany(req);\n }\n const cachedResult = getFromTransactionCache(\n req.keys,\n req.trans[\"_cache\"],\n req.cache === \"clone\"\n );\n if (cachedResult) {\n return Promise.resolve(cachedResult);\n }\n return table.getMany(req).then((res) => {\n req.trans[\"_cache\"] = {\n keys: req.keys,\n values: req.cache === \"clone\" ? deepClone(res) : res,\n };\n return res;\n });\n },\n mutate: (req) => {\n // Invalidate cache on any mutate except \"add\" which can't change existing values:\n if (req.type !== \"add\") req.trans[\"_cache\"] = null;\n return table.mutate(req);\n },\n };\n },\n };\n },\n};\n","import { DBCore, DBCoreTable } from '../../public/types/dbcore';\nimport { LiveQueryContext } from '../live-query';\n\nexport function isCachableContext(ctx: LiveQueryContext, table: DBCoreTable) {\n return (\n ctx.trans.mode === 'readonly' &&\n !!ctx.subscr &&\n !ctx.trans.explicit &&\n ctx.trans.db._options.cache !== 'disabled' &&\n !table.schema.primaryKey.outbound\n );\n}\n\n","import { DBCoreCountRequest, DBCoreGetManyRequest, DBCoreGetRequest, DBCoreOpenCursorRequest, DBCoreQueryRequest } from '../../public/types/dbcore';\n\n\nexport function isCachableRequest(type: string, req: Partial) {\n switch (type) {\n case 'query':\n return req.values && !req.unique;\n case 'get':\n return false;\n case 'getMany':\n return false;\n case 'count':\n return false;\n case 'openCursor':\n return false;\n }\n}\n","import { LiveQueryContext } from \".\";\nimport { getFromTransactionCache } from \"../dbcore/cache-existing-values-middleware\";\nimport { getEffectiveKeys } from \"../dbcore/get-effective-keys\";\nimport { exceptions } from \"../errors\";\nimport { cmp } from \"../functions/cmp\";\nimport { isArray, keys } from \"../functions/utils\";\nimport { PSD } from \"../helpers/promise\";\nimport { RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport {\n DBCore,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreGetManyRequest,\n DBCoreGetRequest,\n DBCoreIndex,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreQueryResponse,\n DBCoreTable,\n DBCoreTableSchema,\n DBCoreTransaction,\n} from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport { isCachableContext } from \"./cache/is-cachable-context\";\nimport { isCachableRequest } from \"./cache/is-cachable-request\";\nimport { extendObservabilitySet } from \"./extend-observability-set\";\n\nexport const observabilityMiddleware: Middleware = {\n stack: \"dbcore\",\n level: 0,\n name: \"Observability\",\n create: (core) => {\n const dbName = core.schema.name;\n const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);\n\n return {\n ...core,\n transaction: (stores, mode, options) => {\n if (PSD.subscr && mode !== 'readonly') {\n throw new exceptions.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${(PSD as LiveQueryContext).querier}`);\n }\n return core.transaction(stores, mode, options);\n },\n table: (tableName) => {\n const table = core.table(tableName);\n const { schema } = table;\n const { primaryKey, indexes } = schema;\n const { extractKey, outbound } = primaryKey;\n const indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(\n (index) => index.compound && (index.keyPath as string[]).includes(primaryKey.keyPath as string)\n );\n const tableClone: DBCoreTable = {\n ...table,\n mutate: (req) => {\n const trans = req.trans as DBCoreTransaction & {\n mutatedParts?: ObservabilitySet;\n };\n const mutatedParts = req.mutatedParts || (req.mutatedParts = {});\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (mutatedParts[part] ||\n (mutatedParts[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n\n const { type } = req;\n let [keys, newObjs] =\n req.type === \"deleteRange\"\n ? [req.range] // keys will be an DBCoreKeyRange object - transformed later on to a [from,to]-style range.\n : req.type === \"delete\"\n ? [req.keys] // keys known already here. newObjs will be undefined.\n : req.values.length < 50\n ? [getEffectiveKeys(primaryKey, req).filter(id => id), req.values] // keys except autoIncremented - they will be added later on.\n : []; // keys and newObjs will both be undefined - changeSpec will become true (changed for entire table)\n\n const oldCache = req.trans[\"_cache\"];\n\n // Add the mutated table and optionally keys to the mutatedTables set on the transaction.\n // Used by subscribers to txcommit event and for Collection.prototype.subscribe().\n if (isArray(keys)) {\n // keys is an array - delete, add or put of less than 50 rows.\n // Individual keys (add put or delete)\n pkRangeSet.addKeys(keys);\n // Only get oldObjs if they have been cached recently\n // (This applies to Collection.modify() only, but also if updating/deleting hooks have subscribers)\n const oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null;\n\n // Supply detailed values per index for both old and new objects:\n if (!oldObjs) {\n // add, delete or put and we don't know old values.\n // Indicate this in the \":dels\" part, for the sake of count() and primaryKeys() queries only!\n delsRangeSet.addKeys(keys);\n }\n if (oldObjs || newObjs) {\n // No matter if knowning oldObjs or not, track the indices if it's a put, add or delete.\n trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);\n }\n } else if (keys) {\n // keys is a DBCoreKeyRange object. Transform it to [from,to]-style range.\n // As we can't know deleted index ranges, mark index-based subscriptions must trigger.\n const range = { from: keys.lower, to: keys.upper };\n delsRangeSet.add(range);\n // deleteRange. keys is a DBCoreKeyRange objects. Transform it to [from,to]-style range.\n pkRangeSet.add(range);\n } else {\n // Too many requests to record the details without slowing down write performance.\n // Let's just record a generic large range on primary key, the virtual :dels index and\n // all secondary indices:\n pkRangeSet.add(FULL_RANGE);\n delsRangeSet.add(FULL_RANGE);\n schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE));\n }\n\n return table.mutate(req).then((res) => {\n // Merge the mutated parts from the request into the transaction's mutatedParts\n // now when the request went fine.\n if (keys && (req.type === 'add' || req.type === 'put')) {\n // Less than 50 requests (keys truthy) (otherwise we've added full range anyway)\n // autoincrement means we might not have got all keys until now\n pkRangeSet.addKeys(res.results);\n if (indexesWithAutoIncPK) {\n // Dexie Issue 1946:\n // If an auto-incremented primary key is part of a compound index,\n // we need to compute the resulting value of that index after inserting\n // the rows.\n indexesWithAutoIncPK.forEach(idx => {\n // Extract values of this compound index where primary key is not yet set:\n const idxVals = req.values.map(v => idx.extractKey(v));\n // Find the position of the primary key in the index:\n const pkPos = (idx.keyPath as string[]).findIndex(prop => prop === primaryKey.keyPath);\n // Update idxVals with the resulting primary keys to complete the index value:\n res.results!.forEach(pk => idxVals[pkPos] = pk);\n // Add the updated index to the rangeset:\n getRangeSet(idx.name).addKeys(idxVals);\n });\n }\n }\n trans.mutatedParts = extendObservabilitySet (\n trans.mutatedParts || {},\n mutatedParts\n );\n return res;\n });\n },\n };\n\n const getRange: (req: any) => [DBCoreIndex, RangeSet] = ({\n query: { index, range },\n }:\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest) => [\n index,\n new RangeSet(range.lower ?? core.MIN_KEY, range.upper ?? core.MAX_KEY),\n ];\n\n const readSubscribers: {[method in\n Exclude]: \n (req: any) => [DBCoreIndex, RangeSet]\n } = {\n get: (req) => [primaryKey, new RangeSet(req.key)],\n getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)],\n count: getRange,\n query: getRange,\n openCursor: getRange,\n }\n\n keys(readSubscribers).forEach((method: 'get' | 'getMany' | 'count' | 'query' | 'openCursor') => {\n tableClone[method] = function (\n req:\n | DBCoreGetRequest\n | DBCoreGetManyRequest\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest\n ) {\n const { subscr } = PSD as LiveQueryContext;\n const isLiveQuery = !!subscr;\n let cachable = isCachableContext(PSD as LiveQueryContext, table) && isCachableRequest(method, req);\n const obsSet = cachable\n ? req.obsSet = {} // Implicit read transaction - track changes for this query only for the request's duration\n : subscr; // Explicit read transaction - track changes across entire live query\n\n if (isLiveQuery) {\n // Current zone want's to track all queries so they can be subscribed to.\n // (The query is executed within a \"liveQuery\" zone)\n // Check whether the query applies to a certain set of ranges:\n // Track what we should be observing:\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (obsSet[part] ||\n (obsSet[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const [queriedIndex, queriedRanges] = readSubscribers[method](req);\n // A generic rule here: queried ranges should always be subscribed to.\n if (method === 'query' && queriedIndex.isPrimaryKey && !(req as DBCoreQueryRequest).values) {\n // A pure primay-key based Collection where only .primaryKeys() is requested. Don't wakeup on other changes than added or deleted primary keys within queried range.\n delsRangeSet.add(queriedRanges);\n } else {\n getRangeSet(queriedIndex.name || \"\").add(queriedRanges);\n }\n if (!queriedIndex.isPrimaryKey) {\n // Only count(), query() and openCursor() operates on secondary indices.\n // Since put(), delete() and deleteRange() mutations may happen without knowing oldObjs,\n // the mutate() method will be missing what secondary indices that are being deleted from\n // the subscribed range. We are working around this issue by recording all the resulting\n // primary keys from the queries. This only works for those kinds of queries where we can\n // derive the primary key from the result.\n // In this block we are accomplishing this using various strategies depending on the properties\n // of the query result.\n\n if (method === \"count\") {\n // We've got a problem! Delete and put mutations happen without known the oldObjs.\n // Those mutation could change the count.\n // Solution: Dedicated \":dels\" url represends a subscription to all mutations without oldObjs\n // (specially triggered in the mutators put(), delete() and deleteRange() when they don't know oldObject)\n delsRangeSet.add(FULL_RANGE);\n } else {\n // openCursor() or query()\n\n // Prepare a keysPromise in case the we're doing an IDBIndex.getAll() on a store with outbound keys.\n const keysPromise =\n method === \"query\" &&\n outbound &&\n (req as DBCoreQueryRequest).values &&\n table.query({\n ...(req as DBCoreQueryRequest),\n values: false,\n });\n\n return table[method].apply(this, arguments).then((res) => {\n if (method === \"query\") {\n if (outbound && (req as DBCoreQueryRequest).values) {\n // If keys are outbound, we can't use extractKey to map what keys to observe.\n // We've queried an index (like 'dateTime') on an outbound table\n // and retrieve a list of objects\n // from who we cannot know their primary keys.\n // \"Luckily\" though, we've prepared the keysPromise to assist us in exact this condition.\n return keysPromise.then(\n ({ result: resultingKeys }: DBCoreQueryResponse) => {\n pkRangeSet.addKeys(resultingKeys);\n return res;\n }\n );\n }\n // query() inbound values, keys or outbound keys. Secondary indexes only since\n // for primary keys we would only add results within the already registered range.\n const pKeys = (req as DBCoreQueryRequest).values\n ? (res as DBCoreQueryResponse).result.map(extractKey)\n : (res as DBCoreQueryResponse).result;\n if ((req as DBCoreQueryRequest).values) {\n // Subscribe to any mutation made on the returned keys,\n // so that we detect both deletions and updated properties.\n pkRangeSet.addKeys(pKeys);\n } else {\n // Subscribe only to mutations on the returned keys\n // in case the mutator was unable to know oldObjs.\n // If it has oldObj, the mutator won't put anything in \":dels\" because\n // it can more fine-grained put the exact removed and added index value in the correct\n // index range that we subscribe to in the queried range sets.\n // We don't load values so a change on a property outside our index will not\n // require us to re-execute the query.\n delsRangeSet.addKeys(pKeys);\n }\n } else if (method === \"openCursor\") {\n // Caller requests a cursor.\n // For the same reason as when method===\"query\", we only need to observe\n // those keys whose values are possibly used or rendered - which could\n // only happen on keys where they get the cursor's key, primaryKey or value.\n const cursor: DBCoreCursor | null = res;\n const wantValues = (req as DBCoreOpenCursorRequest).values;\n return (\n cursor &&\n Object.create(cursor, {\n key: {\n get() {\n delsRangeSet.addKey(cursor.primaryKey);\n return cursor.key;\n },\n },\n primaryKey: {\n get() {\n const pkey = cursor.primaryKey;\n delsRangeSet.addKey(pkey);\n return pkey;\n },\n },\n value: {\n get() {\n wantValues && pkRangeSet.addKey(cursor.primaryKey);\n return cursor.value;\n },\n },\n })\n );\n }\n return res;\n });\n }\n }\n }\n return table[method].apply(this, arguments);\n };\n });\n return tableClone;\n },\n };\n },\n};\n\nfunction trackAffectedIndexes(\n getRangeSet: (index: string) => RangeSet,\n schema: DBCoreTableSchema,\n oldObjs: readonly any[] | undefined,\n newObjs: readonly any[] | undefined\n) {\n function addAffectedIndex(ix: DBCoreIndex) {\n const rangeSet = getRangeSet(ix.name || \"\");\n function extractKey(obj: any) {\n return obj != null ? ix.extractKey(obj) : null;\n }\n const addKeyOrKeys = (key: any) => ix.multiEntry && isArray(key)\n // multiEntry and the old property was an array - add each array entry to the rangeSet:\n ? key.forEach(key => rangeSet.addKey(key))\n // Not multiEntry or the old property was not an array - add each array entry to the rangeSet:\n : rangeSet.addKey(key);\n\n (oldObjs || newObjs).forEach((_, i) => {\n const oldKey = oldObjs && extractKey(oldObjs[i]);\n const newKey = newObjs && extractKey(newObjs[i]);\n if (cmp(oldKey, newKey) !== 0) {\n // The index has changed. Add both old and new value of the index.\n if (oldKey != null) addKeyOrKeys(oldKey); // If oldKey is invalid key, addKey() will be a noop.\n if (newKey != null) addKeyOrKeys(newKey); // If newKey is invalid key, addKey() will be a noop.\n }\n });\n }\n schema.indexes.forEach(addAffectedIndex);\n}\n","import { delArrayItem, isArray } from '../../functions/utils';\nimport { TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreMutateRequest,\n DBCoreMutateResponse,\n} from '../../public/types/dbcore';\n\nexport function adjustOptimisticFromFailures(\n tblCache: TblQueryCache,\n req: DBCoreMutateRequest,\n res: DBCoreMutateResponse\n): DBCoreMutateRequest {\n if (res.numFailures === 0) return req;\n if (req.type === 'deleteRange') {\n // numFailures > 0 means the deleteRange operation failed in its whole.\n return null;\n }\n\n const numBulkOps = req.keys\n ? req.keys.length\n : 'values' in req && req.values\n ? req.values.length\n : 1;\n if (res.numFailures === numBulkOps) {\n // Same number of failures as the number of ops. This means that all ops failed.\n return null;\n }\n\n const clone: DBCoreMutateRequest = { ...req };\n\n if (isArray(clone.keys)) {\n clone.keys = clone.keys.filter((_, i) => !(i in res.failures));\n }\n if ('values' in clone && isArray(clone.values)) {\n clone.values = clone.values.filter((_, i) => !(i in res.failures));\n }\n return clone;\n}\n","import { cmp } from '../../functions/cmp';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function isAboveLower(key: IndexableType, range: DBCoreKeyRange) {\n return range.lower === undefined\n ? true // lower is less than anything because it is undefined\n : range.lowerOpen\n ? cmp(key, range.lower) > 0 // lowerOpen: Exclude lower bound\n : cmp(key, range.lower) >= 0; // !lowerOpen: Include lower bound\n}\n\nexport function isBelowUpper(key: IndexableType, range: DBCoreKeyRange) {\n return range.upper === undefined\n ? true // upper is greater than anything because it is undefined\n : range.upperOpen\n ? cmp(key, range.upper) < 0 // upperOpen: Exclude upper bound\n : cmp(key, range.upper) <= 0; // !upperOpen: Include upper bound\n}\n\nexport function isWithinRange(key: IndexableType, range: DBCoreKeyRange) {\n return isAboveLower(key, range) && isBelowUpper(key, range);\n}\n","import { cmp } from '../../functions/cmp';\nimport { deepClone, isArray } from '../../functions/utils';\nimport { RangeSet, rangesOverlap } from '../../helpers/rangeset';\nimport { CacheEntry } from '../../public/types/cache';\nimport {\n DBCoreIndex,\n DBCoreMutateRequest,\n DBCoreQueryRequest,\n DBCoreTable,\n} from '../../public/types/dbcore';\nimport { isWithinRange } from './is-within-range';\n\nexport function applyOptimisticOps(\n result: any[],\n req: DBCoreQueryRequest,\n ops: DBCoreMutateRequest[] | undefined,\n table: DBCoreTable,\n cacheEntry: CacheEntry,\n immutable: boolean\n): any[] {\n if (!ops || ops.length === 0) return result;\n const index = req.query.index;\n const { multiEntry } = index;\n const queryRange = req.query.range;\n const primaryKey = table.schema.primaryKey;\n const extractPrimKey = primaryKey.extractKey!;\n const extractIndex = index.extractKey!;\n const extractLowLevelIndex = (index.lowLevelIndex || index).extractKey!;\n\n let finalResult = ops.reduce((result, op) => {\n let modifedResult = result;\n const includedValues =\n op.type === 'add' || op.type === 'put'\n ? op.values.filter((v) => {\n const key = extractIndex(v);\n return multiEntry && isArray(key) // multiEntry index work like plain index unless key is array\n ? key.some((k) => isWithinRange(k, queryRange)) // multiEntry and array key\n : isWithinRange(key, queryRange); // multiEntry but not array key\n }).map(v => {\n v = deepClone(v);// v might come from user so we can't just freeze it.\n if (immutable) Object.freeze(v);\n return v;\n })\n : [];\n switch (op.type) {\n case 'add':\n modifedResult = result.concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'put':\n const keySet = new RangeSet().addKeys(\n op.values.map((v) => extractPrimKey(v))\n );\n modifedResult = result\n .filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keySet);\n })\n .concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'delete':\n const keysToDelete = new RangeSet().addKeys(op.keys);\n modifedResult = result.filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keysToDelete);\n });\n\n break;\n case 'deleteRange':\n const range = op.range;\n modifedResult = result.filter((item) => !isWithinRange(extractPrimKey(item), range));\n break;\n }\n return modifedResult;\n }, result);\n\n // If no changes were made, we can return the original result.\n if (finalResult === result) return result;\n\n // Sort the result on sortIndex:\n finalResult.sort((a, b) =>\n cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) ||\n cmp(extractPrimKey(a), extractPrimKey(b))\n );\n\n // If we have a limit we need to respect it:\n if (req.limit && req.limit < Infinity) {\n if (finalResult.length > req.limit) {\n finalResult.length = req.limit; // Cut of any extras after sorting correctly.\n } else if (result.length === req.limit && finalResult.length < req.limit) {\n // We're missing some items because of the limit. We need to add them back.\n // The easiest way is to mark the cache entry as dirty, which will cause\n // it to be requeried after the write-transaction successfully completes.\n cacheEntry.dirty = true;\n }\n }\n return immutable ? Object.freeze(finalResult) as any[] : finalResult;\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function areRangesEqual(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n cmp(r1.lower, r2.lower) === 0 &&\n cmp(r1.upper, r2.upper) === 0 &&\n !!r1.lowerOpen === !!r2.lowerOpen &&\n !!r1.upperOpen === !!r2.upperOpen\n );\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function compareLowers(lower1: any, lower2: any, lowerOpen1: boolean, lowerOpen2: boolean) {\n if (lower1 === undefined) return lower2 !== undefined ? -1 : 0;\n if (lower2 === undefined) return 1; // since lower1 !== undefined\n const c = cmp(lower1, lower2);\n if (c === 0) {\n if (lowerOpen1 && lowerOpen2) return 0;\n if (lowerOpen1) return 1\n if (lowerOpen2) return -1;\n }\n return c;\n}\n\nexport function compareUppers(upper1: any, upper2: any, upperOpen1: boolean, upperOpen2: boolean) {\n if (upper1 === undefined) return upper2 !== undefined ? 1 : 0;\n if (upper2 === undefined) return -1; // since upper1 !== undefined\n const c = cmp(upper1, upper2);\n if (c === 0) {\n if (upperOpen1 && upperOpen2) return 0;\n if (upperOpen1) return -1\n if (upperOpen2) return 1;\n }\n return c;\n}\n\nexport function isSuperRange(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 &&\n compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0\n );\n}","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreCountRequest,\n DBCoreQueryRequest,\n} from '../../public/types/dbcore';\nimport { areRangesEqual } from './are-ranges-equal';\nimport { cache } from './cache';\nimport { isSuperRange } from './is-super-range';\n\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query',\n req: DBCoreQueryRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'count',\n req: DBCoreCountRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query' | 'count',\n req: Partial & Partial\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]] {\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return [];\n const queries = tblCache.queries[type];\n if (!queries) return [null, false, tblCache, null];\n const indexName = req.query ? req.query.index.name : null;\n const entries = queries[indexName || ''];\n if (!entries) return [null, false, tblCache, null];\n\n switch (type) {\n case 'query':\n const equalEntry = entries.find(\n (entry) =>\n (entry.req as DBCoreQueryRequest).limit === req.limit &&\n (entry.req as DBCoreQueryRequest).values === req.values &&\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n if (equalEntry)\n return [\n equalEntry,\n true, // exact match\n tblCache,\n entries,\n ];\n const superEntry = entries.find((entry) => {\n const limit = 'limit' in entry.req ? entry.req.limit : Infinity;\n return (\n limit >= req.limit &&\n (req.values ? (entry.req as DBCoreQueryRequest).values : true) &&\n isSuperRange(entry.req.query.range, req.query.range)\n );\n });\n return [superEntry, false, tblCache, entries];\n case 'count':\n const countQuery = entries.find((entry) =>\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n return [countQuery, !!countQuery, tblCache, entries];\n }\n}\n","import { delArrayItem } from \"../../functions/utils\";\nimport { CacheEntry } from \"../../public/types/cache\";\n\nexport function subscribeToCacheEntry(cacheEntry: CacheEntry, container: CacheEntry[], requery: ()=>void, signal: AbortSignal) {\n cacheEntry.subscribers.add(requery);\n signal.addEventListener(\"abort\", () => {\n cacheEntry.subscribers.delete(requery);\n if (cacheEntry.subscribers.size === 0) {\n enqueForDeletion(cacheEntry, container);\n }\n });\n}\n\n\nfunction enqueForDeletion(cacheEntry: CacheEntry, container: CacheEntry[]) {\n setTimeout(() => {\n if (cacheEntry.subscribers.size === 0) { // Still empty (no new subscribers readded after grace time)\n delArrayItem(container, cacheEntry);\n }\n }, 3000);\n}\n","import { LiveQueryContext } from '..';\nimport type { Transaction } from '../../classes/transaction';\nimport { getEffectiveKeys } from '../../dbcore/get-effective-keys';\nimport { deepClone, delArrayItem, setByKeyPath } from '../../functions/utils';\nimport DexiePromise, { PSD } from '../../helpers/promise';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport {\n DBCore, DBCoreMutateRequest, DBCoreMutateResponse, DBCoreQueryRequest,\n DBCoreQueryResponse\n} from '../../public/types/dbcore';\nimport { Middleware } from '../../public/types/middleware';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { adjustOptimisticFromFailures } from './adjust-optimistic-request-from-failures';\nimport { applyOptimisticOps } from './apply-optimistic-ops';\nimport { cache } from './cache';\nimport { findCompatibleQuery } from './find-compatible-query';\nimport { isCachableContext } from './is-cachable-context';\nimport { isCachableRequest } from './is-cachable-request';\nimport { signalSubscribersLazily } from './signalSubscribers';\nimport { subscribeToCacheEntry } from './subscribe-cachentry';\n\nexport const cacheMiddleware: Middleware = {\n stack: 'dbcore',\n level: 0,\n name: 'Cache',\n create: (core) => {\n const dbName = core.schema.name;\n const coreMW: DBCore = {\n ...core,\n transaction: (stores, mode, options) => {\n const idbtrans = core.transaction(\n stores,\n mode,\n options\n ) as IDBTransaction & {\n mutatedParts?: ObservabilitySet;\n _explicit?: boolean;\n };\n // Maintain TblQueryCache.ops array when transactions commit or abort\n if (mode === 'readwrite') {\n const ac = new AbortController();\n const { signal } = ac;\n const endTransaction = (wasCommitted: boolean) => () => {\n ac.abort();\n if (mode === 'readwrite') {\n // Collect which subscribers to notify:\n const affectedSubscribers = new Set<()=>void>();\n\n // Go through all tables in transaction and check if they have any optimistic updates\n for (const storeName of stores) {\n const tblCache = cache[`idb://${dbName}/${storeName}`];\n if (tblCache) {\n const table = core.table(storeName);\n // Pick optimistic ops that are part of this transaction\n const ops = tblCache.optimisticOps.filter(\n (op) => op.trans === idbtrans\n );\n // Transaction was marked as _explicit in enterTransactionScope(), transaction-helpers.ts.\n if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) {\n // Invalidate all queries that overlap with the mutated parts and signal their subscribers\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) {\n delArrayItem(entries, entry); // Remove the entry from the cache so it can be refreshed\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n } else if (ops.length > 0) {\n // Remove them from the optimisticOps array\n tblCache.optimisticOps = tblCache.optimisticOps.filter(\n (op) => op.trans !== idbtrans\n );\n // Commit or abort the optimistic updates\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (\n entry.res != null && // if entry.promise but not entry.res, we're fine. Query will resume now and get the result.\n idbtrans.mutatedParts/* &&\n obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)*/\n ) {\n if (wasCommitted && !entry.dirty) {\n const freezeResults = Object.isFrozen(entry.res);\n const modRes = applyOptimisticOps(\n entry.res as any[],\n entry.req,\n ops,\n table,\n entry,\n freezeResults\n );\n if (entry.dirty) {\n // Found out at this point that the entry is dirty - not to rely on!\n delArrayItem(entries, entry);\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n } else if (modRes !== entry.res) {\n entry.res = modRes;\n // Update promise\n entry.promise = DexiePromise.resolve({result: modRes} satisfies DBCoreQueryResponse);\n \n // No need to notify subscribers. They already have this value.\n // We have just updated the value of the cache without having to\n // requery the database - because we know the result for this\n // query based on computing the operations and applying them\n // to the previous result.\n }\n } else {\n if (entry.dirty) {\n // If the entry is dirty we need to get rid of it so that\n // a new entry will be created when the query is run again.\n delArrayItem(entries, entry);\n }\n // If we're not committing, we need to notify subscribers that the\n // optimistic updates are no longer valid.\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n }\n }\n }\n }\n affectedSubscribers.forEach((requery) => requery());\n }\n };\n idbtrans.addEventListener('abort', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('error', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('complete', endTransaction(true), {\n signal,\n });\n }\n return idbtrans;\n },\n table(tableName: string) {\n const downTable = core.table(tableName);\n const primKey = downTable.schema.primaryKey;\n const tableMW = {\n ...downTable,\n mutate(req: DBCoreMutateRequest): Promise {\n const trans = PSD.trans as Transaction;\n if (\n primKey.outbound || // Non-inbound tables are harded to apply optimistic updates on because we can't know primary key of results\n trans.db._options.cache === 'disabled' || // User has opted-out from caching\n trans.explicit // It's an explicit write transaction being made. Don't affect cache until transaction commits.\n ) {\n // Just forward the request to the core.\n return downTable.mutate(req);\n }\n // Find the TblQueryCache for this table:\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return downTable.mutate(req);\n\n const promise = downTable.mutate(req);\n if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(key => key == null))) {\n // There are some autoIncremented keys not set yet. Need to wait for completion before we can reliably enqueue the operation.\n // (or there are too many objects so we lazy out to avoid performance bottleneck for large bulk inserts)\n promise.then((res) => { // We need to extract result keys and generate cloned values with the keys set (so that applyOptimisticOps can work)\n // But we have a problem! The req.mutatedParts is still not complete so we have to actively add the keys to the unsignaledParts set manually.\n const reqWithResolvedKeys = {\n ...req,\n values: req.values.map((value, i) => {\n const valueWithKey = primKey.keyPath?.includes('.')\n ? deepClone(value)\n : {\n ...value,\n };\n setByKeyPath(valueWithKey, primKey.keyPath, res.results![i]);\n return valueWithKey;\n })\n };\n const adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res);\n tblCache.optimisticOps.push(adjustedReq);\n // Signal subscribers after the observability middleware has complemented req.mutatedParts with the new keys.\n // We must queue the task so that we get the req.mutatedParts updated by observability middleware first.\n // If we refactor the dependency between observability middleware and this middleware we might not need to queue the task.\n queueMicrotask(()=>req.mutatedParts && signalSubscribersLazily(req.mutatedParts)); // Reason for double laziness: in user awaits put and then does another put, signal once.\n });\n } else {\n // Enque the operation immediately\n tblCache.optimisticOps.push(req);\n // Signal subscribers that there are mutated parts\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts);\n promise.then((res) => {\n if (res.numFailures > 0) {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n const adjustedReq = adjustOptimisticFromFailures(tblCache, req, res);\n if (adjustedReq) {\n tblCache.optimisticOps.push(adjustedReq);\n }\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n }\n });\n promise.catch(()=> {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n });\n }\n return promise;\n },\n query(req: DBCoreQueryRequest): Promise {\n if (!isCachableContext(PSD, downTable) || !isCachableRequest(\"query\", req)) return downTable.query(req);\n const freezeResults =\n (PSD as LiveQueryContext).trans?.db._options.cache === 'immutable';\n const { requery, signal } = PSD as LiveQueryContext;\n let [cacheEntry, exactMatch, tblCache, container] =\n findCompatibleQuery(dbName, tableName, 'query', req);\n if (cacheEntry && exactMatch) {\n cacheEntry.obsSet = req.obsSet!; // So that optimistic result is monitored.\n // How? - because observability-middleware will track result where optimistic\n // mutations are applied and record it in the cacheEntry.\n // TODO: CHANGE THIS! The difference is resultKeys only.\n // Wanted behavior:\n // * cacheEntry obsSet should represent the obsSet without optimistic updates (so it can be checked when merging ops in tx commit)\n // * cacheEntry optimisticObsSet should represent the obsSet with current optimistic updates. It should be updated when adding an op\n // by adding the primary keys of the put/add/delete operation to the set.\n // * observability-middleware should stop recording req.obsSet when a cache entry exact match is found because it won't be used anyway.\n // I'm thinking of merging observability-middleware with cache-middleware into one single middleware because the dependencies are too\n // tight between them.\n } else {\n // --> TODO here: If not exact match, check if we have a superset to extract\n // the data from.\n\n // No cached result found. We need to query the database and cache the result.\n const promise = downTable.query(req).then((res) => {\n // Freeze or clone results\n const result = res.result;\n if (cacheEntry) cacheEntry.res = result;\n if (freezeResults) {\n // For performance reasons don't deep freeze.\n // Only freeze the top-level array and its items.\n // This is good enough to teach users that the result must be treated as immutable\n // without enforcing it recursively on the entire result (which is not even possible\n // for things like Date objects and typed arrays)\n for (let i = 0, l = result.length; i < l; ++i) {\n Object.freeze(result[i]);\n }\n Object.freeze(result);\n } else {\n // If not frozen, we need to clone the result to avoid user mutating the cache\n // When we do this, user's must feel conformable with the fact that the result\n // can be mutated deeply - user is not expected to have any respect for immutability.\n res.result = deepClone(result);\n }\n return res;\n }).catch(error => {\n // In case the query operation failed, we need to remove it from the cache\n // so that subsequent calls does not get the same error but re-evaluate\n // the query.\n if (container && cacheEntry) delArrayItem(container, cacheEntry);\n return Promise.reject(error);\n });\n cacheEntry = {\n obsSet: req.obsSet!,\n promise,\n subscribers: new Set(),\n type: 'query',\n req,\n dirty: false,\n };\n if (container) {\n container.push(cacheEntry);\n } else {\n container = [cacheEntry];\n if (!tblCache) {\n tblCache = cache[`idb://${dbName}/${tableName}`] = {\n queries: {\n query: {},\n count: {},\n },\n objs: new Map(),\n optimisticOps: [],\n unsignaledParts: {}\n };\n }\n tblCache.queries.query[req.query.index.name || ''] = container;\n }\n }\n subscribeToCacheEntry(cacheEntry, container!, requery, signal);\n return cacheEntry.promise.then((res: DBCoreQueryResponse) => {\n return {\n result: applyOptimisticOps(\n res.result,\n req,\n tblCache?.optimisticOps,\n downTable,\n cacheEntry!,\n freezeResults\n ) as any[], // readonly any[]\n };\n });\n },\n };\n return tableMW;\n },\n };\n return coreMW;\n },\n};\n\n\n","import { type Dexie } from \"../classes/dexie\";\nimport { type Table } from \"../classes/table\";\nimport { type Transaction } from \"../classes/transaction\";\n\nexport function vipify(\n target: T,\n vipDb: Dexie\n): T {\n return new Proxy(target, {\n get (target, prop, receiver) {\n // The \"db\" prop of the table or transaction is the only one we need to\n // override. The rest of the props can be accessed from the original\n // object.\n if (prop === 'db') return vipDb;\n return Reflect.get(target, prop, receiver);\n }\n });\n}\n","// Import types from the public API\nimport { Dexie as IDexie } from \"../../public/types/dexie\";\nimport { DexieOptions, DexieConstructor } from \"../../public/types/dexie-constructor\";\nimport { DbEvents } from \"../../public/types/db-events\";\n//import { PromiseExtended, PromiseExtendedConstructor } from '../../public/types/promise-extended';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from \"../../public/types/table-schema\";\nimport { DbSchema } from '../../public/types/db-schema';\n\n// Internal imports\nimport { Table, TableConstructor, createTableConstructor } from \"../table\";\nimport { Collection, CollectionConstructor, createCollectionConstructor } from '../collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { WhereClauseConstructor, createWhereClauseConstructor } from '../where-clause/where-clause-constructor';\nimport { Transaction } from '../transaction';\nimport { TransactionConstructor, createTransactionConstructor } from '../transaction/transaction-constructor';\nimport { Version } from \"../version/version\";\nimport { VersionConstructor, createVersionConstructor } from '../version/version-constructor';\n\n// Other imports...\nimport { DexieEventSet } from '../../public/types/dexie-event-set';\nimport { DexieExceptionClasses } from '../../public/types/errors';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\nimport Promise, { PSD, globalPSD } from '../../helpers/promise';\nimport { extend, override, keys, hasOwn } from '../../functions/utils';\nimport Events from '../../helpers/Events';\nimport { maxString, connections, READONLY, READWRITE } from '../../globals/constants';\nimport { getMaxKey } from '../../functions/quirks';\nimport { exceptions } from '../../errors';\nimport { lowerVersionFirst } from '../version/schema-helpers';\nimport { dexieOpen } from './dexie-open';\nimport { wrap } from '../../helpers/promise';\nimport { _onDatabaseDeleted } from '../../helpers/database-enumerator';\nimport { eventRejectHandler } from '../../functions/event-wrappers';\nimport { extractTransactionArgs, enterTransactionScope } from './transaction-helpers';\nimport { TransactionMode } from '../../public/types/transaction-mode';\nimport { rejection } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { DBCore } from '../../public/types/dbcore';\nimport { Middleware, DexieStacks } from '../../public/types/middleware';\nimport { virtualIndexMiddleware } from '../../dbcore/virtual-index-middleware';\nimport { hooksMiddleware } from '../../hooks/hooks-middleware';\nimport { IndexableType } from '../../public';\nimport { observabilityMiddleware } from '../../live-query/observability-middleware';\nimport { cacheExistingValuesMiddleware } from '../../dbcore/cache-existing-values-middleware';\nimport { cacheMiddleware } from \"../../live-query/cache/cache-middleware\";\nimport { vipify } from \"../../helpers/vipify\";\n\nexport interface DbReadyState {\n dbOpenError: any;\n isBeingOpened: boolean;\n onReadyBeingFired: undefined | Function[];\n openComplete: boolean;\n dbReadyResolve: () => void;\n dbReadyPromise: Promise;\n cancelOpen: (reason?: Error) => void;\n openCanceller: Promise & { _stackHolder?: Error };\n autoSchema: boolean;\n vcFired?: boolean;\n PR1398_maxLoop?: number;\n autoOpen?: boolean;\n}\n\nexport class Dexie implements IDexie {\n _options: DexieOptions;\n _state: DbReadyState;\n _versions: Version[];\n _storeNames: string[];\n _deps: DexieDOMDependencies;\n _allTables: { [name: string]: Table; };\n _createTransaction: (this: Dexie, mode: IDBTransactionMode, storeNames: ArrayLike, dbschema: { [tableName: string]: TableSchema; }, parentTransaction?: Transaction) => Transaction;\n _dbSchema: { [tableName: string]: TableSchema; };\n _hasGetAll?: boolean;\n _maxKey: IndexableType;\n _fireOnBlocked: (ev: Event) => void;\n _middlewares: {[StackName in keyof DexieStacks]?: Middleware[]} = {};\n _vip?: boolean;\n _novip: Dexie;// db._novip is to escape to orig db from db.vip.\n core: DBCore;\n\n name: string;\n verno: number = 0;\n idbdb: IDBDatabase | null;\n vip: Dexie;\n on: DbEvents;\n\n Table: TableConstructor;\n WhereClause: WhereClauseConstructor;\n Collection: CollectionConstructor;\n Version: VersionConstructor;\n Transaction: TransactionConstructor;\n static disableBfCache?: boolean;\n\n constructor(name: string, options?: DexieOptions) {\n const deps = (Dexie as any as DexieConstructor).dependencies;\n this._options = options = {\n // Default Options\n addons: (Dexie as any as DexieConstructor).addons, // Pick statically registered addons by default\n autoOpen: true, // Don't require db.open() explicitely.\n // Default DOM dependency implementations from static prop.\n indexedDB: deps.indexedDB, // Backend IndexedDB api. Default to browser env.\n IDBKeyRange: deps.IDBKeyRange, // Backend IDBKeyRange api. Default to browser env.\n cache: 'cloned', // Default to cloned for backward compatibility. For best performance and least memory consumption use 'immutable'.\n ...options\n }; \n this._deps = {\n indexedDB: options.indexedDB as IDBFactory,\n IDBKeyRange: options.IDBKeyRange as typeof IDBKeyRange\n };\n const {\n addons,\n } = options;\n this._dbSchema = {};\n this._versions = [];\n this._storeNames = [];\n this._allTables = {};\n this.idbdb = null;\n this._novip = this;\n const state: DbReadyState = {\n dbOpenError: null,\n isBeingOpened: false,\n onReadyBeingFired: null,\n openComplete: false,\n dbReadyResolve: nop,\n dbReadyPromise: null as Promise,\n cancelOpen: nop,\n openCanceller: null as Promise,\n autoSchema: true,\n PR1398_maxLoop: 3,\n autoOpen: options.autoOpen,\n };\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n this._state = state;\n this.name = name;\n this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", \"close\", { ready: [promisableChain, nop] }) as DbEvents;\n this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => {\n return (subscriber, bSticky) => {\n (Dexie as any as DexieConstructor).vip(() => {\n const state = this._state;\n if (state.openComplete) {\n // Database already open. Call subscriber asap.\n if (!state.dbOpenError) Promise.resolve().then(subscriber);\n // bSticky: Also subscribe to future open sucesses (after close / reopen) \n if (bSticky) subscribe(subscriber);\n } else if (state.onReadyBeingFired) {\n // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected\n state.onReadyBeingFired.push(subscriber);\n if (bSticky) subscribe(subscriber);\n } else {\n // Database not yet open. Subscribe to it.\n subscribe(subscriber);\n // If bSticky is falsy, make sure to unsubscribe subscriber when fired once.\n const db = this;\n if (!bSticky) subscribe(function unsubscribe() {\n db.on.ready.unsubscribe(subscriber);\n db.on.ready.unsubscribe(unsubscribe);\n });\n }\n });\n }\n });\n\n // Create derived classes bound to this instance of Dexie:\n this.Collection = createCollectionConstructor(this);\n this.Table = createTableConstructor(this);\n this.Transaction = createTransactionConstructor(this);\n this.Version = createVersionConstructor(this);\n this.WhereClause = createWhereClauseConstructor(this);\n\n // Default subscribers to \"versionchange\" and \"blocked\".\n // Can be overridden by custom handlers. If custom handlers return false, these default\n // behaviours will be prevented.\n this.on(\"versionchange\", ev => {\n // Default behavior for versionchange event is to close database connection.\n // Caller can override this behavior by doing db.on(\"versionchange\", function(){ return false; });\n // Let's not block the other window from making it's delete() or open() call.\n // NOTE! This event is never fired in IE,Edge or Safari.\n if (ev.newVersion > 0)\n console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`);\n else\n console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`);\n this.close({disableAutoOpen: false});\n // In many web applications, it would be recommended to force window.reload()\n // when this event occurs. To do that, subscribe to the versionchange event\n // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion)\n // The reason for this is that your current web app obviously has old schema code that needs\n // to be updated. Another window got a newer version of the app and needs to upgrade DB but\n // your window is blocking it unless we close it here.\n });\n this.on(\"blocked\", ev => {\n if (!ev.newVersion || ev.newVersion < ev.oldVersion)\n console.warn(`Dexie.delete('${this.name}') was blocked`);\n else\n console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`);\n });\n\n this._maxKey = getMaxKey(options.IDBKeyRange as typeof IDBKeyRange);\n\n this._createTransaction = (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n parentTransaction?: Transaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction);\n\n this._fireOnBlocked = ev => {\n this.on(\"blocked\").fire(ev);\n // Workaround (not fully*) for missing \"versionchange\" event in IE,Edge and Safari:\n connections\n .filter(c => c.name === this.name && c !== this && !c._state.vcFired)\n .map(c => c.on(\"versionchange\").fire(ev));\n }\n\n // Default middlewares:\n this.use(cacheExistingValuesMiddleware);\n this.use(cacheMiddleware);\n this.use(observabilityMiddleware);\n this.use(virtualIndexMiddleware);\n this.use(hooksMiddleware);\n\n const vipDB = new Proxy(this, {\n get: (_, prop, receiver) => {\n if (prop === '_vip') return true;\n if (prop === 'table') return (tableName: string) => vipify(this.table(tableName), vipDB);\n const rv = Reflect.get(_, prop, receiver);\n if (rv instanceof Table) return vipify(rv, vipDB);\n if (prop === 'tables') return (rv as Table[]).map(t => vipify(t, vipDB));\n if (prop === '_createTransaction') return function() {\n const tx: Transaction = (rv as typeof this._createTransaction).apply(this, arguments);\n return vipify(tx, vipDB);\n }\n return rv;\n }\n });\n this.vip = vipDB;\n\n // Call each addon:\n addons.forEach(addon => addon(this));\n }\n\n version(versionNumber: number): Version {\n if (isNaN(versionNumber) || versionNumber < 0.1) throw new exceptions.Type(`Given version is not a positive number`);\n versionNumber = Math.round(versionNumber * 10) / 10;\n if (this.idbdb || this._state.isBeingOpened)\n throw new exceptions.Schema(\"Cannot add version when database is open\");\n this.verno = Math.max(this.verno, versionNumber);\n const versions = this._versions;\n var versionInstance = versions.filter(\n v => v._cfg.version === versionNumber)[0];\n if (versionInstance) return versionInstance;\n versionInstance = new this.Version(versionNumber);\n versions.push(versionInstance);\n versions.sort(lowerVersionFirst);\n versionInstance.stores({}); // Derive earlier schemas by default.\n // Disable autoschema mode, as at least one version is specified.\n this._state.autoSchema = false;\n return versionInstance;\n }\n\n _whenReady(fn: () => Promise): Promise {\n return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new Promise((resolve, reject) => {\n if (this._state.openComplete) {\n // idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return reject(new exceptions.DatabaseClosed(this._state.dbOpenError));\n }\n if (!this._state.isBeingOpened) {\n if (!this._state.autoOpen) {\n reject(new exceptions.DatabaseClosed());\n return;\n }\n this.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n this._state.dbReadyPromise.then(resolve, reject);\n }).then(fn);\n }\n\n use({stack, create, level, name}: Middleware): this {\n if (name) this.unuse({stack, name}); // Be able to replace existing middleware.\n const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n middlewares.push({stack, create, level: level == null ? 10 : level, name});\n middlewares.sort((a, b) => a.level - b.level);\n // Todo update db.core and db.tables...core ? Or should be expect this to have effect\n // only after next open()?\n return this;\n }\n\n unuse({stack, create}: Middleware<{stack: keyof DexieStacks}>): this;\n unuse({stack, name}: {stack: keyof DexieStacks, name: string}): this;\n unuse({stack, name, create}: {stack: keyof DexieStacks, name?: string, create?: Function}) {\n if (stack && this._middlewares[stack]) {\n this._middlewares[stack] = this._middlewares[stack].filter(mw =>\n create ? mw.create !== create : // Given middleware has a create method. Match that exactly.\n name ? mw.name !== name : // Given middleware spec \n false);\n }\n return this;\n }\n\n open() {\n return usePSD(\n globalPSD, // Enforce global scope here since db.open() can be part of a live query or transaction scope\n () => dexieOpen(this)\n );\n }\n\n _close(): void {\n const state = this._state;\n const idx = connections.indexOf(this);\n if (idx >= 0) connections.splice(idx, 1);\n if (this.idbdb) {\n try { this.idbdb.close(); } catch (e) { }\n this.idbdb = null;\n } \n // Reset dbReadyPromise promise:\n if (!state.isBeingOpened) {\n // Only if not being opened, reset these promises.\n // Otherwise, keep them so existing promise consumers will resolve when db\n // db is reopened later on, in case closing for purpose reopening, using {disableAutoOpen: false}.\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n }\n }\n\n close({disableAutoOpen} = {disableAutoOpen: true}): void {\n const state = this._state;\n if (disableAutoOpen) {\n if (state.isBeingOpened) {\n // cancel before the call to this._close() because this._close() will recreate dbReadyPromise and openCanceller.\n state.cancelOpen(new exceptions.DatabaseClosed());\n }\n this._close();\n state.autoOpen = false;\n state.dbOpenError = new exceptions.DatabaseClosed();\n } else {\n this._close();\n state.autoOpen = this._options.autoOpen ||\n state.isBeingOpened; // If an open call is ongoing, that same promise will resolve when db is reopend.\n state.openComplete = false;\n state.dbOpenError = null;\n }\n }\n\n delete(closeOptions = {disableAutoOpen: true}): Promise {\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n const hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; \n const state = this._state;\n return new Promise((resolve, reject) => {\n const doDelete = () => {\n this.close(closeOptions);\n var req = this._deps.indexedDB.deleteDatabase(this.name);\n req.onsuccess = wrap(() => {\n _onDatabaseDeleted(this._deps, this.name);\n resolve();\n });\n req.onerror = eventRejectHandler(reject);\n req.onblocked = this._fireOnBlocked;\n }\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n if (hasInvalidArguments) throw new exceptions.InvalidArgument(\"Invalid closeOptions argument to db.delete()\");\n if (state.isBeingOpened) {\n state.dbReadyPromise.then(doDelete);\n } else {\n doDelete();\n }\n });\n }\n\n backendDB() {\n return this.idbdb;\n }\n\n isOpen() {\n return this.idbdb !== null;\n }\n\n hasBeenClosed() {\n const dbOpenError = this._state.dbOpenError;\n return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n }\n\n hasFailed() {\n return this._state.dbOpenError !== null;\n }\n\n dynamicallyOpened() {\n return this._state.autoSchema;\n }\n\n get tables () {\n return keys(this._allTables).map(name => this._allTables[name]);\n }\n\n transaction(): Promise {\n const args = extractTransactionArgs.apply(this, arguments);\n return this._transaction.apply(this, args);\n }\n\n _transaction(mode: TransactionMode, tables: Array, scopeFunc: Function) {\n let parentTransaction = PSD.trans as Transaction | undefined;\n // Check if parent transactions is bound to this db instance, and if caller wants to reuse it\n if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) parentTransaction = null;\n const onlyIfCompatible = mode.indexOf('?') !== -1;\n mode = mode.replace('!', '').replace('?', '') as TransactionMode; // Ok. Will change arguments[0] as well but we wont touch arguments henceforth.\n let idbMode: IDBTransactionMode,\n storeNames;\n\n try {\n //\n // Get storeNames from arguments. Either through given table instances, or through given table names.\n //\n storeNames = tables.map(table => {\n var storeName = table instanceof this.Table ? table.name : table;\n if (typeof storeName !== 'string') throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n return storeName;\n });\n\n //\n // Resolve mode. Allow shortcuts \"r\" and \"rw\".\n //\n if (mode == \"r\" || mode === READONLY)\n idbMode = READONLY;\n else if (mode == \"rw\" || mode == READWRITE)\n idbMode = READWRITE;\n else\n throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n\n if (parentTransaction) {\n // Basic checks\n if (parentTransaction.mode === READONLY && idbMode === READWRITE) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n }\n if (parentTransaction) {\n storeNames.forEach(storeName => {\n if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Table \" + storeName +\n \" not included in parent transaction.\");\n }\n });\n }\n if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n // '?' mode should not keep using an inactive transaction.\n parentTransaction = null;\n }\n }\n } catch (e) {\n return parentTransaction ?\n parentTransaction._promise(null, (_, reject) => {reject(e);}) :\n rejection (e);\n }\n // If this is a sub-transaction, lock the parent and then launch the sub-transaction.\n const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);\n return (parentTransaction ?\n parentTransaction._promise(idbMode, enterTransaction, \"lock\") :\n PSD.trans ?\n // no parent transaction despite PSD.trans exists. Make sure also\n // that the zone we create is not a sub-zone of current, because\n // Promise.follow() should not wait for it if so.\n usePSD(PSD.transless, ()=>this._whenReady(enterTransaction)) :\n this._whenReady (enterTransaction));\n }\n\n table(tableName: string): Table;\n table(tableName: string): ITable;\n table(tableName: string): Table {\n if (!hasOwn(this._allTables, tableName)) {\n throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); }\n return this._allTables[tableName];\n }\n}\n","import {\n Observable as IObservable,\n Observer,\n Subscription,\n} from \"../../public/types/observable\";\n\nconst symbolObservable: typeof Symbol.observable =\n typeof Symbol !== \"undefined\" && \"observable\" in Symbol\n ? Symbol.observable\n : \"@@observable\" as any;\n\nexport class Observable implements IObservable {\n private _subscribe: (observer: Observer) => Subscription;\n hasValue?: ()=>boolean;\n getValue?: ()=>T;\n\n constructor(subscribe: (observer: Observer) => Subscription) {\n this._subscribe = subscribe;\n }\n\n subscribe(\n onNext?: ((value: T) => void) | null,\n onError?: ((error: any) => void) | null,\n onComplete?: (() => void) | null\n ): Subscription;\n subscribe(observer?: Observer | null): Subscription;\n subscribe(x?: any, error?: any, complete?: any): Subscription {\n return this._subscribe(\n !x || typeof x === \"function\" ? { next: x, error, complete } : x\n );\n }\n\n [symbolObservable]() {\n return this;\n }\n}\n","import { _global } from '../../globals/global';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\n\nexport let domDeps: DexieDOMDependencies\n\ntry {\n domDeps = {\n // Required:\n indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n };\n} catch (e) {\n domDeps = { indexedDB: null, IDBKeyRange: null };\n}\n","import { _global, isAsyncFunction, keys, objectIsEmpty } from '../functions/utils';\nimport {\n globalEvents,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport {\n beginMicroTickScope,\n decrementExpectedAwaits,\n endMicroTickScope,\n execInGlobalContext,\n incrementExpectedAwaits,\n NativePromise,\n newScope,\n PSD,\n usePSD,\n} from '../helpers/promise';\nimport { ObservabilitySet } from '../public/types/db-events';\nimport {\n Observable as IObservable,\n Subscription,\n} from '../public/types/observable';\nimport { Observable } from '../classes/observable/observable';\nimport { extendObservabilitySet } from './extend-observability-set';\nimport { rangesOverlap } from '../helpers/rangeset';\nimport { domDeps } from '../classes/dexie/dexie-dom-dependencies';\nimport { Transaction } from '../classes/transaction';\nimport { obsSetsOverlap } from './obs-sets-overlap';\n\nexport interface LiveQueryContext {\n subscr: ObservabilitySet;\n signal: AbortSignal;\n requery: () => void;\n trans: null | Transaction;\n querier: Function; // For debugging purposes and Error messages\n}\n\nexport function liveQuery(querier: () => T | Promise): IObservable {\n let hasValue = false;\n let currentValue: T;\n const observable = new Observable((observer) => {\n const scopeFuncIsAsync = isAsyncFunction(querier);\n function execute(ctx: LiveQueryContext) {\n const wasRootExec = beginMicroTickScope(); // Performance: Avoid starting a new microtick scope within the async context.\n try {\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n let rv = newScope(querier, ctx);\n if (scopeFuncIsAsync) {\n // Make sure to set rv = rv.finally in order to wait to after decrementExpectedAwaits() has been called.\n // This fixes zone leaking issue that the liveQuery zone can leak to observer's next microtask.\n rv = (rv as Promise).finally(decrementExpectedAwaits);\n }\n return rv;\n } finally {\n wasRootExec && endMicroTickScope(); // Given that we created the microtick scope, we must also end it.\n }\n }\n\n let closed = false;\n let abortController: AbortController;\n\n let accumMuts: ObservabilitySet = {};\n let currentObs: ObservabilitySet = {};\n\n const subscription: Subscription = {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n if (closed) return;\n closed = true;\n if (abortController) abortController.abort();\n if (startedListening) globalEvents.storagemutated.unsubscribe(mutationListener);\n },\n };\n\n observer.start && observer.start(subscription); // https://github.com/tc39/proposal-observable\n\n let startedListening = false;\n\n const doQuery = () => execInGlobalContext(_doQuery);\n\n function shouldNotify() {\n return obsSetsOverlap(currentObs, accumMuts);\n }\n\n const mutationListener = (parts: ObservabilitySet) => {\n extendObservabilitySet(accumMuts, parts);\n if (shouldNotify()) {\n doQuery();\n }\n };\n\n const _doQuery = () => {\n if (\n closed || // closed - don't run!\n !domDeps.indexedDB) // SSR in sveltekit, nextjs etc\n {\n return;\n }\n accumMuts = {};\n const subscr: ObservabilitySet = {};\n // Abort signal fill three purposes:\n // 1. Abort the query if the observable is unsubscribed.\n // 2. Abort the query if a new query is made before the previous one has completed.\n // 3. For cached queries to know if they should remain in memory or could be enqued for being freed up.\n // (they will remain in memory for a short time and if noone needs them again, they will eventually be freed up)\n if (abortController) abortController.abort(); // Cancel previous query. Last query will be cancelled on unsubscribe().\n abortController = new AbortController();\n \n const ctx: LiveQueryContext = {\n subscr,\n signal: abortController.signal,\n requery: doQuery,\n querier,\n trans: null // Make the scope transactionless (don't reuse transaction from outer scope of the caller of subscribe())\n }\n const ret = execute(ctx);\n Promise.resolve(ret).then(\n (result) => {\n hasValue = true;\n currentValue = result;\n if (closed || ctx.signal.aborted) {\n // closed - no subscriber anymore.\n // signal.aborted - new query was made before this one completed and\n // the querier might have catched AbortError and return successful result.\n // If so, we should not rely in that result because we know we have aborted\n // this run, which means there's another run going on that will handle accumMuts\n // and we must not base currentObs on the half-baked subscr.\n return;\n }\n accumMuts = {};\n // Update what we are subscribing for based on this last run:\n currentObs = subscr;\n if (!objectIsEmpty(currentObs) && !startedListening) {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);\n startedListening = true;\n }\n execInGlobalContext(()=>!closed && observer.next && observer.next(result));\n },\n (err) => {\n hasValue = false;\n if (!['DatabaseClosedError', 'AbortError'].includes(err?.name)) {\n if (!closed) execInGlobalContext(()=>{\n if (closed) return;\n observer.error && observer.error(err);\n });\n }\n }\n );\n };\n\n // Use setTimeot here to guarantee execution in a private macro task before and\n // after. The helper executeInGlobalContext(_doQuery) is not enough here because\n // caller of `subscribe()` could be anything, such as a frontend framework that will\n // continue in the same tick after subscribe() is called and call other\n // eftects, that could involve dexie operations such as writing to the DB.\n // If that happens, the private zone echoes from a live query tast started here\n // could still be ongoing when the other operations start and make them inherit\n // the async context from a live query.\n setTimeout(doQuery, 0);\n return subscription;\n });\n observable.hasValue = () => hasValue;\n observable.getValue = () => currentValue;\n return observable;\n}\n","import { Dexie as _Dexie } from './dexie';\nimport { _global } from '../../globals/global';\nimport { props, derive, extend, override, getByKeyPath, setByKeyPath, delByKeyPath, shallowClone, deepClone, asap } from '../../functions/utils';\nimport { getObjectDiff } from \"../../functions/get-object-diff\";\nimport { fullNameExceptions } from '../../errors';\nimport { DexieConstructor } from '../../public/types/dexie-constructor';\nimport { getDatabaseNames } from '../../helpers/database-enumerator';\nimport { PSD } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { newScope } from '../../helpers/promise';\nimport { rejection } from '../../helpers/promise';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { dexieStackFrameFilter, minKey, connections, DEXIE_VERSION } from '../../globals/constants';\nimport Events from '../../helpers/Events';\nimport { exceptions } from '../../errors';\nimport { errnames } from '../../errors';\nimport { getMaxKey } from '../../functions/quirks';\nimport { vip } from './vip';\nimport { globalEvents } from '../../globals/global-events';\nimport { liveQuery } from '../../live-query/live-query';\nimport { extendObservabilitySet } from '../../live-query/extend-observability-set';\nimport { domDeps } from './dexie-dom-dependencies';\nimport { cmp } from '../../functions/cmp';\nimport { cache } from '../../live-query/cache/cache';\n\n/* (Dexie) is an instance of DexieConstructor, as defined in public/types/dexie-constructor.d.ts\n* (new Dexie()) is an instance of Dexie, as defined in public/types/dexie.d.ts\n* \n* Why we're doing this?\n\n* Because we've choosen to define the public Dexie API using a DexieConstructor interface\n* rather than declaring a class. On that interface, all static props are defined.\n* In practice, class Dexie's constructor implements DexieConstructor and all member props\n* are defined in interface Dexie. We could say, it's a typescript limitation of not being\n* able to define a static interface that forces us to do the cast below.\n*/\nconst Dexie = _Dexie as any as DexieConstructor;\n\n//\n// Set all static methods and properties onto Dexie:\n// \nprops(Dexie, {\n\n // Dexie.BulkError = class BulkError {...};\n // Dexie.XXXError = class XXXError {...};\n ...fullNameExceptions,\n\n //\n // Static delete() method.\n //\n delete(databaseName: string) {\n const db = new Dexie(databaseName, {addons: []});\n return db.delete();\n },\n\n //\n // Static exists() method.\n //\n exists(name: string) {\n return new Dexie(name, { addons: [] }).open().then(db => {\n db.close();\n return true;\n }).catch('NoSuchDatabaseError', () => false);\n },\n\n //\n // Static method for retrieving a list of all existing databases at current host.\n //\n getDatabaseNames(cb) {\n try {\n return getDatabaseNames(Dexie.dependencies).then(cb);\n } catch {\n return rejection(new exceptions.MissingAPI());\n }\n },\n\n /** @deprecated */\n defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return Class;\n },\n\n ignoreTransaction(scopeFunc) {\n // In case caller is within a transaction but needs to create a separate transaction.\n // Example of usage:\n //\n // Let's say we have a logger function in our app. Other application-logic should be unaware of the\n // logger function and not need to include the 'logentries' table in all transaction it performs.\n // The logging should always be done in a separate transaction and not be dependant on the current\n // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction.\n //\n // Dexie.ignoreTransaction(function() {\n // db.logentries.add(newLogEntry);\n // });\n //\n // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction\n // in current Promise-scope.\n //\n // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an\n // API for this because\n // 1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout().\n // 2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate().\n // 3) setImmediate() is not supported in the ES standard.\n // 4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough.\n return PSD.trans ?\n usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional.\n scopeFunc(); // No need to change scope because there is no ongoing transaction.\n },\n\n vip,\n\n async: function (generatorFn: Function) {\n return function () {\n try {\n var rv = awaitIterator(generatorFn.apply(this, arguments));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n };\n },\n\n spawn: function (generatorFn, args, thiz) {\n try {\n var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n },\n\n // Dexie.currentTransaction property\n currentTransaction: {\n get: () => PSD.trans || null\n },\n\n waitFor: function (promiseOrFunction, optionalTimeout) {\n // If a function is provided, invoke it and pass the returning value to Transaction.waitFor()\n const promise = Promise.resolve(\n typeof promiseOrFunction === 'function' ?\n Dexie.ignoreTransaction(promiseOrFunction) :\n promiseOrFunction)\n .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required. \n\n // Run given promise on current transaction. If no current transaction, just return a Dexie promise based\n // on given value.\n return PSD.trans ?\n PSD.trans.waitFor(promise) :\n promise;\n },\n\n // Export our Promise implementation since it can be handy as a standalone Promise implementation\n Promise: Promise,\n\n // Dexie.debug proptery:\n // Dexie.debug = false\n // Dexie.debug = true\n // Dexie.debug = \"dexie\" - don't hide dexie's stack frames.\n debug: {\n get: () => Debug.debug,\n set: value => {\n Debug.setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter);\n }\n },\n\n // Export our derive/extend/override methodology\n derive: derive, // Deprecate?\n extend: extend, // Deprecate?\n props: props,\n override: override, // Deprecate?\n // Export our Events() function - can be handy as a toolkit\n Events: Events,\n on: globalEvents,\n liveQuery,\n extendObservabilitySet,\n // Utilities\n getByKeyPath: getByKeyPath,\n setByKeyPath: setByKeyPath,\n delByKeyPath: delByKeyPath,\n shallowClone: shallowClone,\n deepClone: deepClone,\n getObjectDiff: getObjectDiff,\n cmp,\n asap: asap,\n //maxKey: new Dexie('',{addons:[]})._maxKey,\n minKey: minKey,\n // Addon registry\n addons: [],\n // Global DB connection list\n connections: connections,\n\n //MultiModifyError: exceptions.Modify, // Obsolete!\n errnames: errnames,\n\n // Export other static classes\n //IndexSpec: IndexSpec, Obsolete!\n //TableSchema: TableSchema, Obsolete!\n\n //\n // Dependencies\n //\n // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included.\n //\n // In node.js, however, these properties must be set \"manually\" before instansiating a new Dexie().\n // For node.js, you need to require indexeddb-js or similar and then set these deps.\n //\n dependencies: domDeps,\n cache,\n\n // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc.\n semVer: DEXIE_VERSION,\n version: DEXIE_VERSION.split('.')\n .map(n => parseInt(n))\n .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))),\n\n // https://github.com/dfahlander/Dexie.js/issues/186\n // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return\n // x.default. Workaround: Set Dexie.default = Dexie.\n // default: Dexie, // Commented because solved in index-umd.ts instead.\n // Make it possible to import {Dexie} (non-default import)\n // Reason 1: May switch to that in future.\n // Reason 2: We declare it both default and named exported in d.ts to make it possible\n // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely\n // exporting the symbol, not just default exporting)\n // Dexie: Dexie // Commented because solved in index-umd.ts instead.\n});\n\nDexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange);\n","import { globalEvents, DEXIE_STORAGE_MUTATED_EVENT_NAME, STORAGE_MUTATED_DOM_EVENT_NAME } from '../globals/global-events';\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport { signalSubscribersNow } from './cache/signalSubscribers';\n\nif (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => {\n if (!propagatingLocally) {\n let event: CustomEvent;\n event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, {\n detail: updatedParts\n });\n propagatingLocally = true;\n dispatchEvent(event);\n propagatingLocally = false;\n }\n });\n addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({detail}: CustomEvent) => {\n if (!propagatingLocally) {\n propagateLocally(detail);\n }\n });\n}\n\n/** Called from listeners to BroadcastChannel and DOM event to\n * propagate the event locally into dexie's storagemutated event\n * and invalidate cached queries.\n * \n * This function is only called when the event is not originating\n * from this same Dexie module - either from another redundant dexie import\n * or from a foreign tab or worker. That's why we need to invalidate\n * the cache when this happens.\n */\nexport function propagateLocally(updateParts: ObservabilitySet) {\n let wasMe = propagatingLocally;\n try {\n propagatingLocally = true;\n // Fire the \"storagemutated\" event.\n globalEvents.storagemutated.fire(updateParts);\n // Invalidate cached queries and signal subscribers to requery.\n signalSubscribersNow(updateParts, true);\n } finally {\n propagatingLocally = wasMe;\n }\n}\n\nexport let propagatingLocally = false;\n","import {\n globalEvents,\n STORAGE_MUTATED_DOM_EVENT_NAME,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport { propagateLocally, propagatingLocally } from './propagate-locally';\n\nexport let bc: BroadcastChannel;\n\nexport let createBC = ()=>{};\n\nif (typeof BroadcastChannel !== 'undefined') {\n createBC = () => {\n bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME);\n bc.onmessage = ev => ev.data && propagateLocally(ev.data);\n }\n createBC();\n\n /**\n * The Node.js BroadcastChannel will prevent the node process from exiting\n * if the BroadcastChannel is not closed.\n * Therefore we have to call unref() which allows the process to finish\n * properly even when the BroadcastChannel is never closed.\n * @link https://nodejs.org/api/worker_threads.html#broadcastchannelunref\n * @link https://github.com/dexie/Dexie.js/pull/1576\n */\n if (typeof (bc as any).unref === 'function') {\n (bc as any).unref();\n }\n \n //\n // Propagate local changes to remote tabs, windows and workers via BroadcastChannel\n //\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n if (!propagatingLocally) {\n bc.postMessage(changedParts);\n }\n });\n}\n","import { Dexie } from \"./classes/dexie\";\nimport { connections } from \"./globals/constants\";\nimport { debug } from \"./helpers/debug\";\nimport { RangeSet } from \"./helpers/rangeset\";\nimport { bc, createBC } from \"./live-query/enable-broadcast\";\nimport { propagateLocally } from \"./live-query/propagate-locally\";\n\n\nif (typeof addEventListener !== 'undefined') {\n addEventListener('pagehide', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pagehide');\n bc?.close();\n for (const db of connections) {\n db.close({disableAutoOpen: false});\n }\n }\n });\n addEventListener('pageshow', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pageshow');\n createBC();\n propagateLocally({all: new RangeSet(-Infinity, [[]])}); // Trigger all queries to requery\n }\n });\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function add(value: number | BigInt | Array) {\n return new PropModification({add: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function remove(value: number | BigInt | Array) {\n return new PropModification({remove: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function replacePrefix(a: string, b:string) {\n return new PropModification({replacePrefix: [a, b]});\n}\n","import { Dexie } from './classes/dexie';\nimport { DexieConstructor } from './public/types/dexie-constructor';\nimport { DexiePromise } from './helpers/promise';\nimport { mapError } from './errors';\nimport * as Debug from './helpers/debug';\nimport { dexieStackFrameFilter } from './globals/constants';\n\n// Generate all static properties such as Dexie.maxKey etc\n// (implement interface DexieConstructor):\nimport './classes/dexie/dexie-static-props';\nimport './live-query/enable-broadcast';\nimport './support-bfcache';\nimport { liveQuery } from './live-query/live-query';\nimport { Entity } from './classes/entity/Entity';\nimport { cmp } from './functions/cmp';\nimport { PropModification, PropModSymbol } from './helpers/prop-modification';\nimport { replacePrefix, add, remove } from './functions/propmods';\n\n\n// Set rejectionMapper of DexiePromise so that it generally tries to map\n// DOMErrors and DOMExceptions to a DexieError instance with same name but with\n// async stack support and with a prototypal inheritance from DexieError and Error.\n// of Map DOMErrors and DOMExceptions to corresponding Dexie errors.\nDexiePromise.rejectionMapper = mapError;\n\n// Let the async stack filter focus on app code and filter away frames from dexie.min.js:\nDebug.setDebug(Debug.debug, dexieStackFrameFilter);\n\nexport { RangeSet, mergeRanges, rangesOverlap } from \"./helpers/rangeset\";\nexport { Dexie, liveQuery }; // Comply with public/index.d.ts.\nexport { Entity };\nexport { cmp };\nexport { PropModSymbol, PropModification, replacePrefix, add, remove };\nexport default Dexie;\n","// Issue #1127. Need another index.ts for the UMD module with only a default export\n// like it was before.\n// In practice though, the UMD export will also export the named export in \n// https://github.com/dfahlander/Dexie.js/blob/c9187ae60c0d7a424f85bab3af179fbbc9901c8e/src/classes/dexie/dexie-static-props.ts#L223-L228\nimport Dexie from \"./index\";\nimport * as namedExports from \"./index\";\nimport { __assign } from 'tslib';\n__assign(Dexie, namedExports, {default: Dexie});\nexport default Dexie;\n"],"names":["asap","_a","Promise","Dexie","safari14Workaround","_Dexie","Debug.debug","Debug.setDebug"],"mappings":"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"} \ No newline at end of file diff --git a/src/dexie/dist/dexie.min.js b/src/dexie/dist/dexie.min.js new file mode 100644 index 000000000..88e76d734 --- /dev/null +++ b/src/dexie/dist/dexie.min.js @@ -0,0 +1,2 @@ +(function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e="undefined"!=typeof globalThis?globalThis:e||self).Dexie=t()})(this,function(){"use strict";var s=function(e,t){return(s=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};var w=function(){return(w=Object.assign||function(e){for(var t,n=1,r=arguments.length;n.",Ze="String expected.",et=[],tt="__dbnames",nt="readonly",rt="readwrite";function it(e,t){return e?t?function(){return e.apply(this,arguments)&&t.apply(this,arguments)}:e:t}var ot={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function at(t){return"string"!=typeof t||/\./.test(t)?function(e){return e}:function(e){return void 0===e[t]&&t in e&&delete(e=S(e))[t],e}}function ut(){throw Y.Type()}function st(e,t){try{var n=ct(e),r=ct(t);if(n!==r)return"Array"===n?1:"Array"===r?-1:"binary"===n?1:"binary"===r?-1:"string"===n?1:"string"===r?-1:"Date"===n?1:"Date"!==r?NaN:-1;switch(n){case"number":case"Date":case"string":return ts+c&&f(s+g)})})}var h=yt(r)&&r.limit===1/0&&("function"!=typeof w||w===Et)&&{index:r.index,range:r.range};return f(0).then(function(){if(0=c})).length?(e.forEach(function(u){t.push(function(){var t=h,e=u._cfg.dbschema;fn(s,t,f),fn(s,e,f),h=s._dbSchema=e;var n=an(t,e);n.add.forEach(function(e){un(f,e[0],e[1].primKey,e[1].indexes)}),n.change.forEach(function(e){if(e.recreate)throw new Y.Upgrade("Not yet support for changing primary key");var t=f.objectStore(e.name);e.add.forEach(function(e){return cn(t,e)}),e.change.forEach(function(e){t.deleteIndex(e.name),cn(t,e)}),e.del.forEach(function(e){return t.deleteIndex(e)})});var r=u._cfg.contentUpgrade;if(r&&u._cfg.version>c){Zt(s,f),l._memoizedTables={};var i=g(e);n.del.forEach(function(e){i[e]=t[e]}),tn(s,[s.Transaction.prototype]),en(s,[s.Transaction.prototype],_(i),i),l.schema=i;var o,a=B(r);a&&Le();n=_e.follow(function(){var e;(o=r(l))&&a&&(e=Ue.bind(null,null),o.then(e,e))});return o&&"function"==typeof o.then?_e.resolve(o):n.then(function(){return o})}}),t.push(function(e){var t,n,r=u._cfg.dbschema;t=r,n=e,[].slice.call(n.db.objectStoreNames).forEach(function(e){return null==t[e]&&n.db.deleteObjectStore(e)}),tn(s,[s.Transaction.prototype]),en(s,[s.Transaction.prototype],s._storeNames,s._dbSchema),l.schema=s._dbSchema}),t.push(function(e){s.idbdb.objectStoreNames.contains("$meta")&&(Math.ceil(s.idbdb.version/10)===u._cfg.version?(s.idbdb.deleteObjectStore("$meta"),delete s._dbSchema.$meta,s._storeNames=s._storeNames.filter(function(e){return"$meta"!==e})):e.objectStore("$meta").put(u._cfg.version,"version"))})}),function e(){return t.length?_e.resolve(t.shift()(l.idbtrans)).then(e):_e.resolve()}().then(function(){sn(h,f)})):_e.resolve();var s,c,l,f,t,h}).catch(u)):(_(o).forEach(function(e){un(i,e,o[e].primKey,o[e].indexes)}),Zt(n,i),void _e.follow(function(){return n.on.populate.fire(a)}).catch(u));var e,t})}function on(e,r){sn(e._dbSchema,r),r.db.version%10!=0||r.objectStoreNames.contains("$meta")||r.db.createObjectStore("$meta").add(Math.ceil(r.db.version/10-1),"version");var t=ln(0,e.idbdb,r);fn(e,e._dbSchema,r);for(var n=0,i=an(t,e._dbSchema).change;nMath.pow(2,62)?0:e.oldVersion,m=e<1,f.idbdb=l.result,p&&on(f,v),rn(f,e/10,v,n))},n),l.onsuccess=Te(function(){v=null;var e,t,n,r,i,o=f.idbdb=l.result,a=b(o.objectStoreNames);if(0u.limit?t.length=u.limit:e.length===u.limit&&t.length=r.limit&&(!r.values||e.req.values)&&Xn(e.req.query.range,r.query.range)}),!1,i,o];case"count":a=o.find(function(e){return Gn(e.req.query.range,r.query.range)});return[a,!!a,i,o]}}(O,c,"query",t),a=o[0],e=o[1],u=o[2],s=o[3];return a&&e?a.obsSet=t.obsSet:(e=l.query(t).then(function(e){var t=e.result;if(a&&(a.res=t),i){for(var n=0,r=t.length;n= 0) + a.splice(i, 1); + return i >= 0; +} +var NO_CHAR_ARRAY = {}; +function getArrayOf(arrayLike) { + var i, a, x, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') + return [arrayLike]; + if ((it = getIteratorOf(arrayLike))) { + a = []; + while ((x = it.next()), !x.done) + a.push(x.value); + return a; + } + if (arrayLike == null) + return [arrayLike]; + i = arrayLike.length; + if (typeof i === 'number') { + a = new Array(i); + while (i--) + a[i] = arrayLike[i]; + return a; + } + return [arrayLike]; + } + i = arguments.length; + a = new Array(i); + while (i--) + a[i] = arguments[i]; + return a; +} +var isAsyncFunction = typeof Symbol !== 'undefined' + ? function (fn) { return fn[Symbol.toStringTag] === 'AsyncFunction'; } + : function () { return false; }; + +var dexieErrorNames = [ + 'Modify', + 'Bulk', + 'OpenFailed', + 'VersionChange', + 'Schema', + 'Upgrade', + 'InvalidTable', + 'MissingAPI', + 'NoSuchDatabase', + 'InvalidArgument', + 'SubTransaction', + 'Unsupported', + 'Internal', + 'DatabaseClosed', + 'PrematureCommit', + 'ForeignAwait' +]; +var idbDomErrorNames = [ + 'Unknown', + 'Constraint', + 'Data', + 'TransactionInactive', + 'ReadOnly', + 'Version', + 'NotFound', + 'InvalidState', + 'InvalidAccess', + 'Abort', + 'Timeout', + 'QuotaExceeded', + 'Syntax', + 'DataClone' +]; +var errorList = dexieErrorNames.concat(idbDomErrorNames); +var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed", + MissingAPI: "IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb" +}; +function DexieError(name, msg) { + this.name = name; + this.message = msg; +} +derive(DexieError).from(Error).extend({ + toString: function () { return this.name + ": " + this.message; } +}); +function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + Object.keys(failures) + .map(function (key) { return failures[key].toString(); }) + .filter(function (v, i, s) { return s.indexOf(v) === i; }) + .join('\n'); +} +function ModifyError(msg, failures, successCount, failedKeys) { + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; + this.message = getMultiErrorMessage(msg, failures); +} +derive(ModifyError).from(DexieError); +function BulkError(msg, failures) { + this.name = "BulkError"; + this.failures = Object.keys(failures).map(function (pos) { return failures[pos]; }); + this.failuresByPos = failures; + this.message = getMultiErrorMessage(msg, this.failures); +} +derive(BulkError).from(DexieError); +var errnames = errorList.reduce(function (obj, name) { return (obj[name] = name + "Error", obj); }, {}); +var BaseException = DexieError; +var exceptions = errorList.reduce(function (obj, name) { + var fullName = name + "Error"; + function DexieError(msgOrInner, inner) { + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } + else if (typeof msgOrInner === 'string') { + this.message = "".concat(msgOrInner).concat(!inner ? '' : '\n ' + inner); + this.inner = inner || null; + } + else if (typeof msgOrInner === 'object') { + this.message = "".concat(msgOrInner.name, " ").concat(msgOrInner.message); + this.inner = msgOrInner; + } + } + derive(DexieError).from(BaseException); + obj[name] = DexieError; + return obj; +}, {}); +exceptions.Syntax = SyntaxError; +exceptions.Type = TypeError; +exceptions.Range = RangeError; +var exceptionMap = idbDomErrorNames.reduce(function (obj, name) { + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + setProp(rv, "stack", { get: function () { + return this.inner.stack; + } }); + } + return rv; +} +var fullNameExceptions = errorList.reduce(function (obj, name) { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +fullNameExceptions.ModifyError = ModifyError; +fullNameExceptions.DexieError = DexieError; +fullNameExceptions.BulkError = BulkError; + +function nop() { } +function mirror(val) { return val; } +function pureFunctionChain(f1, f2) { + if (f1 == null || f1 === mirror) + return f2; + return function (val) { + return f2(f1(val)); + }; +} +function callBoth(on1, on2) { + return function () { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; +} +function hookCreatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res !== undefined) + arguments[0] = res; + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== undefined ? res2 : res; + }; +} +function hookDeletingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = this.onerror = null; + f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; +} +function hookUpdatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function (modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === undefined ? + (res2 === undefined ? undefined : res2) : + (extend(res, res2)); + }; +} +function reverseStoppableEventChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + if (f2.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; +} +function promisableChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res && typeof res.then === 'function') { + var thiz = this, i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + return res.then(function () { + return f2.apply(thiz, args); + }); + } + return f2.apply(this, arguments); + }; +} + +var debug = typeof location !== 'undefined' && + /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); +function setDebug(value, filter) { + debug = value; +} + +var INTERNAL = {}; +var ZONE_ECHO_LIMIT = 100, _a$1 = typeof Promise === 'undefined' ? + [] : + (function () { + var globalP = Promise.resolve(); + if (typeof crypto === 'undefined' || !crypto.subtle) + return [globalP, getProto(globalP), globalP]; + var nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); + return [ + nativeP, + getProto(nativeP), + globalP + ]; + })(), resolvedNativePromise = _a$1[0], nativePromiseProto = _a$1[1], resolvedGlobalPromise = _a$1[2], nativePromiseThen = nativePromiseProto && nativePromiseProto.then; +var NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; +var patchGlobalPromise = !!resolvedGlobalPromise; +function schedulePhysicalTick() { + queueMicrotask(physicalTick); +} +var asap = function (callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } +}; +var isOutsideMicroTick = true, +needsNewPhysicalTick = true, +unhandledErrors = [], +rejectingErrors = [], +rejectionMapper = mirror; +var globalPSD = { + id: 'global', + global: true, + ref: 0, + unhandleds: [], + onunhandled: nop, + pgp: false, + env: {}, + finalize: nop +}; +var PSD = globalPSD; +var microtickQueue = []; +var numScheduledCalls = 0; +var tickFinalizers = []; +function DexiePromise(fn) { + if (typeof this !== 'object') + throw new TypeError('Promises must be constructed via new'); + this._listeners = []; + this._lib = false; + var psd = (this._PSD = PSD); + if (typeof fn !== 'function') { + if (fn !== INTERNAL) + throw new TypeError('Not a function'); + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); + return; + } + this._state = null; + this._value = null; + ++psd.ref; + executePromiseTask(this, fn); +} +var thenProp = { + get: function () { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var _this = this; + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + var cleanup = possibleAwait && !decrementExpectedAwaits(); + var rv = new DexiePromise(function (resolve, reject) { + propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); + }); + if (this._consoleTask) + rv._consoleTask = this._consoleTask; + return rv; + } + then.prototype = INTERNAL; + return then; + }, + set: function (value) { + setProp(this, 'then', value && value.prototype === INTERNAL ? + thenProp : + { + get: function () { + return value; + }, + set: thenProp.set + }); + } +}; +props(DexiePromise.prototype, { + then: thenProp, + _then: function (onFulfilled, onRejected) { + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + catch: function (onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + var type = arguments[0], handler = arguments[1]; + return typeof type === 'function' ? this.then(null, function (err) { + return err instanceof type ? handler(err) : PromiseReject(err); + }) + : this.then(null, function (err) { + return err && err.name === type ? handler(err) : PromiseReject(err); + }); + }, + finally: function (onFinally) { + return this.then(function (value) { + return DexiePromise.resolve(onFinally()).then(function () { return value; }); + }, function (err) { + return DexiePromise.resolve(onFinally()).then(function () { return PromiseReject(err); }); + }); + }, + timeout: function (ms, msg) { + var _this = this; + return ms < Infinity ? + new DexiePromise(function (resolve, reject) { + var handle = setTimeout(function () { return reject(new exceptions.Timeout(msg)); }, ms); + _this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } +}); +if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise'); +globalPSD.env = snapShot(); +function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; +} +props(DexiePromise, { + all: function () { + var values = getArrayOf.apply(null, arguments) + .map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (values.length === 0) + resolve([]); + var remaining = values.length; + values.forEach(function (a, i) { return DexiePromise.resolve(a).then(function (x) { + values[i] = x; + if (!--remaining) + resolve(values); + }, reject); }); + }); + }, + resolve: function (value) { + if (value instanceof DexiePromise) + return value; + if (value && typeof value.then === 'function') + return new DexiePromise(function (resolve, reject) { + value.then(resolve, reject); + }); + var rv = new DexiePromise(INTERNAL, true, value); + return rv; + }, + reject: PromiseReject, + race: function () { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + values.map(function (value) { return DexiePromise.resolve(value).then(resolve, reject); }); + }); + }, + PSD: { + get: function () { return PSD; }, + set: function (value) { return PSD = value; } + }, + totalEchoes: { get: function () { return totalEchoes; } }, + newPSD: newScope, + usePSD: usePSD, + scheduler: { + get: function () { return asap; }, + set: function (value) { asap = value; } + }, + rejectionMapper: { + get: function () { return rejectionMapper; }, + set: function (value) { rejectionMapper = value; } + }, + follow: function (fn, zoneProps) { + return new DexiePromise(function (resolve, reject) { + return newScope(function (resolve, reject) { + var psd = PSD; + psd.unhandleds = []; + psd.onunhandled = reject; + psd.finalize = callBoth(function () { + var _this = this; + run_at_end_of_this_or_next_physical_tick(function () { + _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]); + }); + }, psd.finalize); + fn(); + }, zoneProps, resolve, reject); + }); + } +}); +if (NativePromise) { + if (NativePromise.allSettled) + setProp(DexiePromise, "allSettled", function () { + var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve) { + if (possiblePromises.length === 0) + resolve([]); + var remaining = possiblePromises.length; + var results = new Array(remaining); + possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return results[i] = { status: "fulfilled", value: value }; }, function (reason) { return results[i] = { status: "rejected", reason: reason }; }) + .then(function () { return --remaining || resolve(results); }); }); + }); + }); + if (NativePromise.any && typeof AggregateError !== 'undefined') + setProp(DexiePromise, "any", function () { + var possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (possiblePromises.length === 0) + reject(new AggregateError([])); + var remaining = possiblePromises.length; + var failures = new Array(remaining); + possiblePromises.forEach(function (p, i) { return DexiePromise.resolve(p).then(function (value) { return resolve(value); }, function (failure) { + failures[i] = failure; + if (!--remaining) + reject(new AggregateError(failures)); + }); }); + }); + }); +} +function executePromiseTask(promise, fn) { + try { + fn(function (value) { + if (promise._state !== null) + return; + if (value === promise) + throw new TypeError('A promise cannot be resolved with itself.'); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === 'function') { + executePromiseTask(promise, function (resolve, reject) { + value instanceof DexiePromise ? + value._then(resolve, reject) : + value.then(resolve, reject); + }); + } + else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, handleRejection.bind(null, promise)); + } + catch (ex) { + handleRejection(promise, ex); + } +} +function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); +} +function propagateAllListeners(promise) { + var listeners = promise._listeners; + promise._listeners = []; + for (var i = 0, len = listeners.length; i < len; ++i) { + propagateToListener(promise, listeners[i]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); + if (numScheduledCalls === 0) { + ++numScheduledCalls; + asap(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } +} +function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap(callListener, [cb, promise, listener]); +} +function callListener(cb, promise, listener) { + try { + var ret, value = promise._value; + if (!promise._state && rejectingErrors.length) + rejectingErrors = []; + ret = debug && promise._consoleTask ? promise._consoleTask.run(function () { return cb(value); }) : cb(value); + if (!promise._state && rejectingErrors.indexOf(value) === -1) { + markErrorAsHandled(promise); + } + listener.resolve(ret); + } + catch (e) { + listener.reject(e); + } + finally { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } +} +function physicalTick() { + usePSD(globalPSD, function () { + beginMicroTickScope() && endMicroTickScope(); + }); +} +function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; +} +function endMicroTickScope() { + var callbacks, i, l; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l = callbacks.length; + for (i = 0; i < l; ++i) { + var item = callbacks[i]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; +} +function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach(function (p) { + p._PSD.onunhandled.call(null, p._value, p); + }); + var finalizers = tickFinalizers.slice(0); + var i = finalizers.length; + while (i) + finalizers[--i](); +} +function run_at_end_of_this_or_next_physical_tick(fn) { + function finalizer() { + fn(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap(function () { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); +} +function addPossiblyUnhandledError(promise) { + if (!unhandledErrors.some(function (p) { return p._value === promise._value; })) + unhandledErrors.push(promise); +} +function markErrorAsHandled(promise) { + var i = unhandledErrors.length; + while (i) + if (unhandledErrors[--i]._value === promise._value) { + unhandledErrors.splice(i, 1); + return; + } +} +function PromiseReject(reason) { + return new DexiePromise(INTERNAL, false, reason); +} +function wrap(fn, errorCatcher) { + var psd = PSD; + return function () { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn.apply(this, arguments); + } + catch (e) { + errorCatcher && errorCatcher(e); + } + finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; +} +var task = { awaits: 0, echoes: 0, id: 0 }; +var taskCounter = 0; +var zoneStack = []; +var zoneEchoes = 0; +var totalEchoes = 0; +var zone_id_counter = 0; +function newScope(fn, props, a1, a2) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: DexiePromise, + PromiseProp: { value: DexiePromise, configurable: true, writable: true }, + all: DexiePromise.all, + race: DexiePromise.race, + allSettled: DexiePromise.allSettled, + any: DexiePromise.any, + resolve: DexiePromise.resolve, + reject: DexiePromise.reject, + } : {}; + if (props) + extend(psd, props); + ++parent.ref; + psd.finalize = function () { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn, a1, a2); + if (psd.ref === 0) + psd.finalize(); + return rv; +} +function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; +} +function decrementExpectedAwaits() { + if (!task.awaits) + return false; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; + return true; +} +if (('' + nativePromiseThen).indexOf('[native code]') === -1) { + incrementExpectedAwaits = decrementExpectedAwaits = nop; +} +function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then(function (x) { + decrementExpectedAwaits(); + return x; + }, function (e) { + decrementExpectedAwaits(); + return rejection(e); + }); + } + return possiblePromise; +} +function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.awaits = task.id = 0; + } + zoneStack.push(PSD); + switchToZone(targetZone, true); +} +function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); +} +function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + var GlobalPromise = globalPSD.env.Promise; + var targetEnv = targetZone.env; + if (currentZone.global || targetZone.global) { + Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + if (targetEnv.allSettled) + GlobalPromise.allSettled = targetEnv.allSettled; + if (targetEnv.any) + GlobalPromise.any = targetEnv.any; + } + } +} +function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + allSettled: GlobalPromise.allSettled, + any: GlobalPromise.any, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + } : {}; +} +function usePSD(psd, fn, a1, a2, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn(a1, a2, a3); + } + finally { + switchToZone(outerScope, false); + } +} +function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) { + return typeof fn !== 'function' ? fn : function () { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn.apply(this, arguments); + } + finally { + switchToZone(outerZone, false); + if (cleanup) + queueMicrotask(decrementExpectedAwaits); + } + }; +} +function execInGlobalContext(cb) { + if (Promise === NativePromise && task.echoes === 0) { + if (zoneEchoes === 0) { + cb(); + } + else { + enqueueNativeMicroTask(cb); + } + } + else { + setTimeout(cb, 0); + } +} +var rejection = DexiePromise.reject; + +function tempTransaction(db, mode, storeNames, fn) { + if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) { + if (db._state.openComplete) { + return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError)); + } + if (!db._state.isBeingOpened) { + if (!db._state.autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); + } + return db._state.dbReadyPromise.then(function () { return tempTransaction(db, mode, storeNames, fn); }); + } + else { + var trans = db._createTransaction(mode, storeNames, db._dbSchema); + try { + trans.create(); + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(function () { return tempTransaction(db, mode, storeNames, fn); }); + } + return rejection(ex); + } + return trans._promise(mode, function (resolve, reject) { + return newScope(function () { + PSD.trans = trans; + return fn(resolve, reject, trans); + }); + }).then(function (result) { + if (mode === 'readwrite') + try { + trans.idbtrans.commit(); + } + catch (_a) { } + return mode === 'readonly' ? result : trans._completion.then(function () { return result; }); + }); + } +} + +var DEXIE_VERSION = '4.0.7'; +var maxString = String.fromCharCode(65535); +var minKey = -Infinity; +var INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; +var STRING_EXPECTED = "String expected."; +var connections = []; +var DBNAMES_DB = '__dbnames'; +var READONLY = 'readonly'; +var READWRITE = 'readwrite'; + +function combine(filter1, filter2) { + return filter1 ? + filter2 ? + function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : + filter1 : + filter2; +} + +var AnyRange = { + type: 3 , + lower: -Infinity, + lowerOpen: false, + upper: [[]], + upperOpen: false +}; + +function workaroundForUndefinedPrimKey(keyPath) { + return typeof keyPath === "string" && !/\./.test(keyPath) + ? function (obj) { + if (obj[keyPath] === undefined && (keyPath in obj)) { + obj = deepClone(obj); + delete obj[keyPath]; + } + return obj; + } + : function (obj) { return obj; }; +} + +function Entity() { + throw exceptions.Type(); +} + +function cmp(a, b) { + try { + var ta = type(a); + var tb = type(b); + if (ta !== tb) { + if (ta === 'Array') + return 1; + if (tb === 'Array') + return -1; + if (ta === 'binary') + return 1; + if (tb === 'binary') + return -1; + if (ta === 'string') + return 1; + if (tb === 'string') + return -1; + if (ta === 'Date') + return 1; + if (tb !== 'Date') + return NaN; + return -1; + } + switch (ta) { + case 'number': + case 'Date': + case 'string': + return a > b ? 1 : a < b ? -1 : 0; + case 'binary': { + return compareUint8Arrays(getUint8Array(a), getUint8Array(b)); + } + case 'Array': + return compareArrays(a, b); + } + } + catch (_a) { } + return NaN; +} +function compareArrays(a, b) { + var al = a.length; + var bl = b.length; + var l = al < bl ? al : bl; + for (var i = 0; i < l; ++i) { + var res = cmp(a[i], b[i]); + if (res !== 0) + return res; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function compareUint8Arrays(a, b) { + var al = a.length; + var bl = b.length; + var l = al < bl ? al : bl; + for (var i = 0; i < l; ++i) { + if (a[i] !== b[i]) + return a[i] < b[i] ? -1 : 1; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function type(x) { + var t = typeof x; + if (t !== 'object') + return t; + if (ArrayBuffer.isView(x)) + return 'binary'; + var tsTag = toStringTag(x); + return tsTag === 'ArrayBuffer' ? 'binary' : tsTag; +} +function getUint8Array(a) { + if (a instanceof Uint8Array) + return a; + if (ArrayBuffer.isView(a)) + return new Uint8Array(a.buffer, a.byteOffset, a.byteLength); + return new Uint8Array(a); +} + +var Table = (function () { + function Table() { + } + Table.prototype._trans = function (mode, fn, writeLocked) { + var trans = this._tx || PSD.trans; + var tableName = this.name; + var task = debug && typeof console !== 'undefined' && console.createTask && console.createTask("Dexie: ".concat(mode === 'readonly' ? 'read' : 'write', " ").concat(this.name)); + function checkTableInTransaction(resolve, reject, trans) { + if (!trans.schema[tableName]) + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + return fn(trans.idbtrans, trans); + } + var wasRootExec = beginMicroTickScope(); + try { + var p = trans && trans.db._novip === this.db._novip ? + trans === PSD.trans ? + trans._promise(mode, checkTableInTransaction, writeLocked) : + newScope(function () { return trans._promise(mode, checkTableInTransaction, writeLocked); }, { trans: trans, transless: PSD.transless || PSD }) : + tempTransaction(this.db, mode, [this.name], checkTableInTransaction); + if (task) { + p._consoleTask = task; + p = p.catch(function (err) { + console.trace(err); + return rejection(err); + }); + } + return p; + } + finally { + if (wasRootExec) + endMicroTickScope(); + } + }; + Table.prototype.get = function (keyOrCrit, cb) { + var _this = this; + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + if (keyOrCrit == null) + return rejection(new exceptions.Type("Invalid argument to Table.get()")); + return this._trans('readonly', function (trans) { + return _this.core.get({ trans: trans, key: keyOrCrit }) + .then(function (res) { return _this.hook.reading.fire(res); }); + }).then(cb); + }; + Table.prototype.where = function (indexOrCrit) { + if (typeof indexOrCrit === 'string') + return new this.db.WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new this.db.WhereClause(this, "[".concat(indexOrCrit.join('+'), "]")); + var keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + return this + .where(keyPaths[0]) + .equals(indexOrCrit[keyPaths[0]]); + var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) { + if (ix.compound && + keyPaths.every(function (keyPath) { return ix.keyPath.indexOf(keyPath) >= 0; })) { + for (var i = 0; i < keyPaths.length; ++i) { + if (keyPaths.indexOf(ix.keyPath[i]) === -1) + return false; + } + return true; + } + return false; + }).sort(function (a, b) { return a.keyPath.length - b.keyPath.length; })[0]; + if (compoundIndex && this.db._maxKey !== maxString) { + var keyPathsInValidOrder = compoundIndex.keyPath.slice(0, keyPaths.length); + return this + .where(keyPathsInValidOrder) + .equals(keyPathsInValidOrder.map(function (kp) { return indexOrCrit[kp]; })); + } + if (!compoundIndex && debug) + console.warn("The query ".concat(JSON.stringify(indexOrCrit), " on ").concat(this.name, " would benefit from a ") + + "compound index [".concat(keyPaths.join('+'), "]")); + var idxByName = this.schema.idxByName; + var idb = this.db._deps.indexedDB; + function equals(a, b) { + return idb.cmp(a, b) === 0; + } + var _a = keyPaths.reduce(function (_a, keyPath) { + var prevIndex = _a[0], prevFilterFn = _a[1]; + var index = idxByName[keyPath]; + var value = indexOrCrit[keyPath]; + return [ + prevIndex || index, + prevIndex || !index ? + combine(prevFilterFn, index && index.multi ? + function (x) { + var prop = getByKeyPath(x, keyPath); + return isArray(prop) && prop.some(function (item) { return equals(value, item); }); + } : function (x) { return equals(value, getByKeyPath(x, keyPath)); }) + : prevFilterFn + ]; + }, [null, null]), idx = _a[0], filterFunction = _a[1]; + return idx ? + this.where(idx.name).equals(indexOrCrit[idx.keyPath]) + .filter(filterFunction) : + compoundIndex ? + this.filter(filterFunction) : + this.where(keyPaths).equals(''); + }; + Table.prototype.filter = function (filterFunction) { + return this.toCollection().and(filterFunction); + }; + Table.prototype.count = function (thenShortcut) { + return this.toCollection().count(thenShortcut); + }; + Table.prototype.offset = function (offset) { + return this.toCollection().offset(offset); + }; + Table.prototype.limit = function (numRows) { + return this.toCollection().limit(numRows); + }; + Table.prototype.each = function (callback) { + return this.toCollection().each(callback); + }; + Table.prototype.toArray = function (thenShortcut) { + return this.toCollection().toArray(thenShortcut); + }; + Table.prototype.toCollection = function () { + return new this.db.Collection(new this.db.WhereClause(this)); + }; + Table.prototype.orderBy = function (index) { + return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? + "[".concat(index.join('+'), "]") : + index)); + }; + Table.prototype.reverse = function () { + return this.toCollection().reverse(); + }; + Table.prototype.mapToClass = function (constructor) { + var _a = this, db = _a.db, tableName = _a.name; + this.schema.mappedClass = constructor; + if (constructor.prototype instanceof Entity) { + constructor = (function (_super) { + __extends(class_1, _super); + function class_1() { + return _super !== null && _super.apply(this, arguments) || this; + } + Object.defineProperty(class_1.prototype, "db", { + get: function () { return db; }, + enumerable: false, + configurable: true + }); + class_1.prototype.table = function () { return tableName; }; + return class_1; + }(constructor)); + } + var inheritedProps = new Set(); + for (var proto = constructor.prototype; proto; proto = getProto(proto)) { + Object.getOwnPropertyNames(proto).forEach(function (propName) { return inheritedProps.add(propName); }); + } + var readHook = function (obj) { + if (!obj) + return obj; + var res = Object.create(constructor.prototype); + for (var m in obj) + if (!inheritedProps.has(m)) + try { + res[m] = obj[m]; + } + catch (_) { } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + }; + Table.prototype.defineClass = function () { + function Class(content) { + extend(this, content); + } + return this.mapToClass(Class); + }; + Table.prototype.add = function (obj, key) { + var _this = this; + var _a = this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + var objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', function (trans) { + return _this.core.mutate({ trans: trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] }); + }).then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }) + .then(function (lastResult) { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + }; + Table.prototype.update = function (keyOrObject, modifications) { + if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { + var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === undefined) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + return this.where(":id").equals(key).modify(modifications); + } + else { + return this.where(":id").equals(keyOrObject).modify(modifications); + } + }; + Table.prototype.put = function (obj, key) { + var _this = this; + var _a = this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + var objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult; }) + .then(function (lastResult) { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + }; + Table.prototype.delete = function (key) { + var _this = this; + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'delete', keys: [key] }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; }); + }; + Table.prototype.clear = function () { + var _this = this; + return this._trans('readwrite', function (trans) { return _this.core.mutate({ trans: trans, type: 'deleteRange', range: AnyRange }); }) + .then(function (res) { return res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined; }); + }; + Table.prototype.bulkGet = function (keys) { + var _this = this; + return this._trans('readonly', function (trans) { + return _this.core.getMany({ + keys: keys, + trans: trans + }).then(function (result) { return result.map(function (res) { return _this.hook.reading.fire(res); }); }); + }); + }; + Table.prototype.bulkAdd = function (objects, keysOrOptions, options) { + var _this = this; + var keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + var wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', function (trans) { + var _a = _this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + var numObjects = objects.length; + var objectsToAdd = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return _this.core.mutate({ trans: trans, type: 'add', keys: keys, values: objectsToAdd, wantResults: wantResults }) + .then(function (_a) { + var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures; + var result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError("".concat(_this.name, ".bulkAdd(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); + }); + }); + }; + Table.prototype.bulkPut = function (objects, keysOrOptions, options) { + var _this = this; + var keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + var wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', function (trans) { + var _a = _this.schema.primKey, auto = _a.auto, keyPath = _a.keyPath; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + var numObjects = objects.length; + var objectsToPut = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return _this.core.mutate({ trans: trans, type: 'put', keys: keys, values: objectsToPut, wantResults: wantResults }) + .then(function (_a) { + var numFailures = _a.numFailures, results = _a.results, lastResult = _a.lastResult, failures = _a.failures; + var result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError("".concat(_this.name, ".bulkPut(): ").concat(numFailures, " of ").concat(numObjects, " operations failed"), failures); + }); + }); + }; + Table.prototype.bulkUpdate = function (keysAndChanges) { + var _this = this; + var coreTable = this.core; + var keys = keysAndChanges.map(function (entry) { return entry.key; }); + var changeSpecs = keysAndChanges.map(function (entry) { return entry.changes; }); + var offsetMap = []; + return this._trans('readwrite', function (trans) { + return coreTable.getMany({ trans: trans, keys: keys, cache: 'clone' }).then(function (objs) { + var resultKeys = []; + var resultObjs = []; + keysAndChanges.forEach(function (_a, idx) { + var key = _a.key, changes = _a.changes; + var obj = objs[idx]; + if (obj) { + for (var _i = 0, _b = Object.keys(changes); _i < _b.length; _i++) { + var keyPath = _b[_i]; + var value = changes[keyPath]; + if (keyPath === _this.schema.primKey.keyPath) { + if (cmp(value, key) !== 0) { + throw new exceptions.Constraint("Cannot update primary key in bulkUpdate()"); + } + } + else { + setByKeyPath(obj, keyPath, value); + } + } + offsetMap.push(idx); + resultKeys.push(key); + resultObjs.push(obj); + } + }); + var numEntries = resultKeys.length; + return coreTable + .mutate({ + trans: trans, + type: 'put', + keys: resultKeys, + values: resultObjs, + updates: { + keys: keys, + changeSpecs: changeSpecs + } + }) + .then(function (_a) { + var numFailures = _a.numFailures, failures = _a.failures; + if (numFailures === 0) + return numEntries; + for (var _i = 0, _b = Object.keys(failures); _i < _b.length; _i++) { + var offset = _b[_i]; + var mappedOffset = offsetMap[Number(offset)]; + if (mappedOffset != null) { + var failure = failures[offset]; + delete failures[offset]; + failures[mappedOffset] = failure; + } + } + throw new BulkError("".concat(_this.name, ".bulkUpdate(): ").concat(numFailures, " of ").concat(numEntries, " operations failed"), failures); + }); + }); + }); + }; + Table.prototype.bulkDelete = function (keys) { + var _this = this; + var numKeys = keys.length; + return this._trans('readwrite', function (trans) { + return _this.core.mutate({ trans: trans, type: 'delete', keys: keys }); + }).then(function (_a) { + var numFailures = _a.numFailures, lastResult = _a.lastResult, failures = _a.failures; + if (numFailures === 0) + return lastResult; + throw new BulkError("".concat(_this.name, ".bulkDelete(): ").concat(numFailures, " of ").concat(numKeys, " operations failed"), failures); + }); + }; + return Table; +}()); + +function Events(ctx) { + var evs = {}; + var rv = function (eventName, subscriber) { + if (subscriber) { + var i = arguments.length, args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } + else if (typeof (eventName) === 'string') { + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i = 1, l = arguments.length; i < l; ++i) { + add(arguments[i]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === 'object') + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function (cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function (cb) { + context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + keys(cfg).forEach(function (eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } + else if (args === 'asap') { + var context = add(eventName, mirror, function fire() { + var i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + context.subscribers.forEach(function (fn) { + asap$1(function fireEvent() { + fn.apply(null, args); + }); + }); + }); + } + else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } +} + +function makeClassConstructor(prototype, constructor) { + derive(constructor).from({ prototype: prototype }); + return constructor; +} + +function createTableConstructor(db) { + return makeClassConstructor(Table.prototype, function Table(name, tableSchema, trans) { + this.db = db; + this._tx = trans; + this.name = name; + this.schema = tableSchema; + this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + }); +} + +function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && + (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); +} +function addFilter(ctx, fn) { + ctx.filter = combine(ctx.filter, fn); +} +function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? function () { return combine(curr(), factory()); } : factory; + ctx.justLimit = isLimitFilter && !curr; +} +function addMatchFilter(ctx, fn) { + ctx.isMatch = combine(ctx.isMatch, fn); +} +function getIndexOrStore(ctx, coreSchema) { + if (ctx.isPrimKey) + return coreSchema.primaryKey; + var index = coreSchema.getIndexByKeyPath(ctx.index); + if (!index) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); + return index; +} +function openCursor(ctx, coreTable, trans) { + var index = getIndexOrStore(ctx, coreTable.schema); + return coreTable.openCursor({ + trans: trans, + values: !ctx.keysOnly, + reverse: ctx.dir === 'prev', + unique: !!ctx.unique, + query: { + index: index, + range: ctx.range + } + }); +} +function iter(ctx, fn, coreTrans, coreTable) { + var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper); + } + else { + var set_1 = {}; + var union = function (item, cursor, advance) { + if (!filter || filter(cursor, advance, function (result) { return cursor.stop(result); }, function (err) { return cursor.fail(err); })) { + var primaryKey = cursor.primaryKey; + var key = '' + primaryKey; + if (key === '[object ArrayBuffer]') + key = '' + new Uint8Array(primaryKey); + if (!hasOwn(set_1, key)) { + set_1[key] = true; + fn(item, cursor, advance); + } + } + }; + return Promise.all([ + ctx.or._iterate(union, coreTrans), + iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) + ]); + } +} +function iterate(cursorPromise, filter, fn, valueMapper) { + var mappedFn = valueMapper ? function (x, c, a) { return fn(valueMapper(x), c, a); } : fn; + var wrappedFn = wrap(mappedFn); + return cursorPromise.then(function (cursor) { + if (cursor) { + return cursor.start(function () { + var c = function () { return cursor.continue(); }; + if (!filter || filter(cursor, function (advancer) { return c = advancer; }, function (val) { cursor.stop(val); c = nop; }, function (e) { cursor.fail(e); c = nop; })) + wrappedFn(cursor.value, cursor, function (advancer) { return c = advancer; }); + c(); + }); + } + }); +} + +var PropModSymbol = Symbol(); +var PropModification = (function () { + function PropModification(spec) { + Object.assign(this, spec); + } + PropModification.prototype.execute = function (value) { + var _a; + if (this.add !== undefined) { + var term = this.add; + if (isArray(term)) { + return __spreadArray(__spreadArray([], (isArray(value) ? value : []), true), term, true).sort(); + } + if (typeof term === 'number') + return (Number(value) || 0) + term; + if (typeof term === 'bigint') { + try { + return BigInt(value) + term; + } + catch (_b) { + return BigInt(0) + term; + } + } + throw new TypeError("Invalid term ".concat(term)); + } + if (this.remove !== undefined) { + var subtrahend_1 = this.remove; + if (isArray(subtrahend_1)) { + return isArray(value) ? value.filter(function (item) { return !subtrahend_1.includes(item); }).sort() : []; + } + if (typeof subtrahend_1 === 'number') + return Number(value) - subtrahend_1; + if (typeof subtrahend_1 === 'bigint') { + try { + return BigInt(value) - subtrahend_1; + } + catch (_c) { + return BigInt(0) - subtrahend_1; + } + } + throw new TypeError("Invalid subtrahend ".concat(subtrahend_1)); + } + var prefixToReplace = (_a = this.replacePrefix) === null || _a === void 0 ? void 0 : _a[0]; + if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) { + return this.replacePrefix[1] + value.substring(prefixToReplace.length); + } + return value; + }; + return PropModification; +}()); + +var Collection = (function () { + function Collection() { + } + Collection.prototype._read = function (fn, cb) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readonly', fn).then(cb); + }; + Collection.prototype._write = function (fn) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readwrite', fn, "locked"); + }; + Collection.prototype._addAlgorithm = function (fn) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn); + }; + Collection.prototype._iterate = function (fn, coreTrans) { + return iter(this._ctx, fn, coreTrans, this._ctx.table.core); + }; + Collection.prototype.clone = function (props) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props) + extend(ctx, props); + rv._ctx = ctx; + return rv; + }; + Collection.prototype.raw = function () { + this._ctx.valueMapper = null; + return this; + }; + Collection.prototype.each = function (fn) { + var ctx = this._ctx; + return this._read(function (trans) { return iter(ctx, fn, trans, ctx.table.core); }); + }; + Collection.prototype.count = function (cb) { + var _this = this; + return this._read(function (trans) { + var ctx = _this._ctx; + var coreTable = ctx.table.core; + if (isPlainKeyRange(ctx, true)) { + return coreTable.count({ + trans: trans, + query: { + index: getIndexOrStore(ctx, coreTable.schema), + range: ctx.range + } + }).then(function (count) { return Math.min(count, ctx.limit); }); + } + else { + var count = 0; + return iter(ctx, function () { ++count; return false; }, trans, coreTable) + .then(function () { return count; }); + } + }).then(cb); + }; + Collection.prototype.sortBy = function (keyPath, cb) { + var parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i) { + if (i) + return getval(obj[parts[i]], i - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a, b) { + var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function (a) { + return a.sort(sorter); + }).then(cb); + }; + Collection.prototype.toArray = function (cb) { + var _this = this; + return this._read(function (trans) { + var ctx = _this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + var valueMapper_1 = ctx.valueMapper; + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans: trans, + limit: ctx.limit, + values: true, + query: { + index: index, + range: ctx.range + } + }).then(function (_a) { + var result = _a.result; + return valueMapper_1 ? result.map(valueMapper_1) : result; + }); + } + else { + var a_1 = []; + return iter(ctx, function (item) { return a_1.push(item); }, trans, ctx.table.core).then(function () { return a_1; }); + } + }, cb); + }; + Collection.prototype.offset = function (offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function (cursor, advance) { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(function () { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } + else { + addReplayFilter(ctx, function () { + var offsetLeft = offset; + return function () { return (--offsetLeft < 0); }; + }); + } + return this; + }; + Collection.prototype.limit = function (numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); + addReplayFilter(this._ctx, function () { + var rowsLeft = numRows; + return function (cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); + return rowsLeft >= 0; + }; + }, true); + return this; + }; + Collection.prototype.until = function (filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function (cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } + else { + return true; + } + }); + return this; + }; + Collection.prototype.first = function (cb) { + return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); + }; + Collection.prototype.last = function (cb) { + return this.reverse().first(cb); + }; + Collection.prototype.filter = function (filterFunction) { + addFilter(this._ctx, function (cursor) { + return filterFunction(cursor.value); + }); + addMatchFilter(this._ctx, filterFunction); + return this; + }; + Collection.prototype.and = function (filter) { + return this.filter(filter); + }; + Collection.prototype.or = function (indexName) { + return new this.db.WhereClause(this._ctx.table, indexName, this); + }; + Collection.prototype.reverse = function () { + this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + }; + Collection.prototype.desc = function () { + return this.reverse(); + }; + Collection.prototype.eachKey = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.key, cursor); }); + }; + Collection.prototype.eachUniqueKey = function (cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + }; + Collection.prototype.eachPrimaryKey = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); + }; + Collection.prototype.keys = function (cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.key); + }).then(function () { + return a; + }).then(cb); + }; + Collection.prototype.primaryKeys = function (cb) { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + return this._read(function (trans) { + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans: trans, + values: false, + limit: ctx.limit, + query: { + index: index, + range: ctx.range + } + }); + }).then(function (_a) { + var result = _a.result; + return result; + }).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.primaryKey); + }).then(function () { + return a; + }).then(cb); + }; + Collection.prototype.uniqueKeys = function (cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + }; + Collection.prototype.firstKey = function (cb) { + return this.limit(1).keys(function (a) { return a[0]; }).then(cb); + }; + Collection.prototype.lastKey = function (cb) { + return this.reverse().firstKey(cb); + }; + Collection.prototype.distinct = function () { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; + var set = {}; + addFilter(this._ctx, function (cursor) { + var strKey = cursor.primaryKey.toString(); + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + }; + Collection.prototype.modify = function (changes) { + var _this = this; + var ctx = this._ctx; + return this._write(function (trans) { + var modifyer; + if (typeof changes === 'function') { + modifyer = changes; + } + else { + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function (item) { + var anythingModified = false; + for (var i = 0; i < numKeys; ++i) { + var keyPath = keyPaths[i]; + var val = changes[keyPath]; + var origVal = getByKeyPath(item, keyPath); + if (val instanceof PropModification) { + setByKeyPath(item, keyPath, val.execute(origVal)); + anythingModified = true; + } + else if (origVal !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + } + return anythingModified; + }; + } + var coreTable = ctx.table.core; + var _a = coreTable.schema.primaryKey, outbound = _a.outbound, extractKey = _a.extractKey; + var limit = _this.db._options.modifyChunkSize || 200; + var totalFailures = []; + var successCount = 0; + var failedKeys = []; + var applyMutateResult = function (expectedCount, res) { + var failures = res.failures, numFailures = res.numFailures; + successCount += expectedCount - numFailures; + for (var _i = 0, _a = keys(failures); _i < _a.length; _i++) { + var pos = _a[_i]; + totalFailures.push(failures[pos]); + } + }; + return _this.clone().primaryKeys().then(function (keys) { + var criteria = isPlainKeyRange(ctx) && + ctx.limit === Infinity && + (typeof changes !== 'function' || changes === deleteCallback) && { + index: ctx.index, + range: ctx.range + }; + var nextChunk = function (offset) { + var count = Math.min(limit, keys.length - offset); + return coreTable.getMany({ + trans: trans, + keys: keys.slice(offset, offset + count), + cache: "immutable" + }).then(function (values) { + var addValues = []; + var putValues = []; + var putKeys = outbound ? [] : null; + var deleteKeys = []; + for (var i = 0; i < count; ++i) { + var origValue = values[i]; + var ctx_1 = { + value: deepClone(origValue), + primKey: keys[offset + i] + }; + if (modifyer.call(ctx_1, ctx_1.value, ctx_1) !== false) { + if (ctx_1.value == null) { + deleteKeys.push(keys[offset + i]); + } + else if (!outbound && cmp(extractKey(origValue), extractKey(ctx_1.value)) !== 0) { + deleteKeys.push(keys[offset + i]); + addValues.push(ctx_1.value); + } + else { + putValues.push(ctx_1.value); + if (outbound) + putKeys.push(keys[offset + i]); + } + } + } + return Promise.resolve(addValues.length > 0 && + coreTable.mutate({ trans: trans, type: 'add', values: addValues }) + .then(function (res) { + for (var pos in res.failures) { + deleteKeys.splice(parseInt(pos), 1); + } + applyMutateResult(addValues.length, res); + })).then(function () { return (putValues.length > 0 || (criteria && typeof changes === 'object')) && + coreTable.mutate({ + trans: trans, + type: 'put', + keys: putKeys, + values: putValues, + criteria: criteria, + changeSpec: typeof changes !== 'function' + && changes, + isAdditionalChunk: offset > 0 + }).then(function (res) { return applyMutateResult(putValues.length, res); }); }).then(function () { return (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) && + coreTable.mutate({ + trans: trans, + type: 'delete', + keys: deleteKeys, + criteria: criteria, + isAdditionalChunk: offset > 0 + }).then(function (res) { return applyMutateResult(deleteKeys.length, res); }); }).then(function () { + return keys.length > offset + count && nextChunk(offset + limit); + }); + }); + }; + return nextChunk(0).then(function () { + if (totalFailures.length > 0) + throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); + return keys.length; + }); + }); + }); + }; + Collection.prototype.delete = function () { + var ctx = this._ctx, range = ctx.range; + if (isPlainKeyRange(ctx) && + (ctx.isPrimKey || range.type === 3 )) + { + return this._write(function (trans) { + var primaryKey = ctx.table.core.schema.primaryKey; + var coreRange = range; + return ctx.table.core.count({ trans: trans, query: { index: primaryKey, range: coreRange } }).then(function (count) { + return ctx.table.core.mutate({ trans: trans, type: 'deleteRange', range: coreRange }) + .then(function (_a) { + var failures = _a.failures; _a.lastResult; _a.results; var numFailures = _a.numFailures; + if (numFailures) + throw new ModifyError("Could not delete some values", Object.keys(failures).map(function (pos) { return failures[pos]; }), count - numFailures); + return count - numFailures; + }); + }); + }); + } + return this.modify(deleteCallback); + }; + return Collection; +}()); +var deleteCallback = function (value, ctx) { return ctx.value = null; }; + +function createCollectionConstructor(db) { + return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) { + this.db = db; + var keyRange = AnyRange, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } + catch (ex) { + error = ex; + } + var whereCtx = whereClause._ctx; + var table = whereCtx.table; + var readingHook = table.hook.reading.fire; + this._ctx = { + table: table, + index: whereCtx.index, + isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error: error, + or: whereCtx.or, + valueMapper: readingHook !== mirror ? readingHook : null + }; + }); +} + +function simpleCompare(a, b) { + return a < b ? -1 : a === b ? 0 : 1; +} +function simpleCompareReverse(a, b) { + return a > b ? -1 : a === b ? 0 : 1; +} + +function fail(collectionOrWhereClause, err, T) { + var collection = collectionOrWhereClause instanceof WhereClause ? + new collectionOrWhereClause.Collection(collectionOrWhereClause) : + collectionOrWhereClause; + collection._ctx.error = T ? new T(err) : new TypeError(err); + return collection; +} +function emptyCollection(whereClause) { + return new whereClause.Collection(whereClause, function () { return rangeEqual(""); }).limit(0); +} +function upperFactory(dir) { + return dir === "next" ? + function (s) { return s.toUpperCase(); } : + function (s) { return s.toLowerCase(); }; +} +function lowerFactory(dir) { + return dir === "next" ? + function (s) { return s.toLowerCase(); } : + function (s) { return s.toUpperCase(); }; +} +function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i = 0; i < length; ++i) { + var lwrKeyChar = lowerKey[i]; + if (lwrKeyChar !== lowerNeedle[i]) { + if (cmp(key[i], upperNeedle[i]) < 0) + return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); + if (cmp(key[i], lowerNeedle[i]) < 0) + return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp(key[i], lwrKeyChar) < 0) + llp = i; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); +} +function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every(function (s) { return typeof s === 'string'; })) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = (dir === "next" ? simpleCompare : simpleCompareReverse); + var needleBounds = needles.map(function (needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function (a, b) { + return compare(a.lower, b.lower); + }); + upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); + lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); + direction = dir; + nextKeySuffix = (dir === "next" ? "" : suffix); + } + initDirection("next"); + var c = new whereClause.Collection(whereClause, function () { return createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix); }); + c._ondirectionchange = function (direction) { + initDirection(direction); + }; + var firstPossibleNeedle = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + if (typeof key !== 'string') + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } + else { + var lowestPossibleCasing = null; + for (var i = firstPossibleNeedle; i < needlesLen; ++i) { + var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); + } + else { + advance(resolve); + } + return false; + } + }); + return c; +} +function createRange(lower, upper, lowerOpen, upperOpen) { + return { + type: 2 , + lower: lower, + upper: upper, + lowerOpen: lowerOpen, + upperOpen: upperOpen + }; +} +function rangeEqual(value) { + return { + type: 1 , + lower: value, + upper: value + }; +} + +var WhereClause = (function () { + function WhereClause() { + } + Object.defineProperty(WhereClause.prototype, "Collection", { + get: function () { + return this._ctx.table.db.Collection; + }, + enumerable: false, + configurable: true + }); + WhereClause.prototype.between = function (lower, upper, includeLower, includeUpper) { + includeLower = includeLower !== false; + includeUpper = includeUpper === true; + try { + if ((this._cmp(lower, upper) > 0) || + (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) + return emptyCollection(this); + return new this.Collection(this, function () { return createRange(lower, upper, !includeLower, !includeUpper); }); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + }; + WhereClause.prototype.equals = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return rangeEqual(value); }); + }; + WhereClause.prototype.above = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(value, undefined, true); }); + }; + WhereClause.prototype.aboveOrEqual = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(value, undefined, false); }); + }; + WhereClause.prototype.below = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(undefined, value, false, true); }); + }; + WhereClause.prototype.belowOrEqual = function (value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, function () { return createRange(undefined, value); }); + }; + WhereClause.prototype.startsWith = function (str) { + if (typeof str !== 'string') + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + }; + WhereClause.prototype.startsWithIgnoreCase = function (str) { + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, function (x, a) { return x.indexOf(a[0]) === 0; }, [str], maxString); + }; + WhereClause.prototype.equalsIgnoreCase = function (str) { + return addIgnoreCaseAlgorithm(this, function (x, a) { return x === a[0]; }, [str], ""); + }; + WhereClause.prototype.anyOfIgnoreCase = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.indexOf(x) !== -1; }, set, ""); + }; + WhereClause.prototype.startsWithAnyOfIgnoreCase = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, function (x, a) { return a.some(function (n) { return x.indexOf(n) === 0; }); }, set, maxString); + }; + WhereClause.prototype.anyOf = function () { + var _this = this; + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + var compare = this._cmp; + try { + set.sort(compare); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + var c = new this.Collection(this, function () { return createRange(set[0], set[set.length - 1]); }); + c._ondirectionchange = function (direction) { + compare = (direction === "next" ? + _this._ascending : + _this._descending); + set.sort(compare); + }; + var i = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (compare(key, set[i]) > 0) { + ++i; + if (i === set.length) { + advance(resolve); + return false; + } + } + if (compare(key, set[i]) === 0) { + return true; + } + else { + advance(function () { cursor.continue(set[i]); }); + return false; + } + }); + return c; + }; + WhereClause.prototype.notEqual = function (value) { + return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false }); + }; + WhereClause.prototype.noneOf = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new this.Collection(this); + try { + set.sort(this._ascending); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var ranges = set.reduce(function (res, val) { return res ? + res.concat([[res[res.length - 1][1], val]]) : + [[minKey, val]]; }, null); + ranges.push([set[set.length - 1], this.db._maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + }; + WhereClause.prototype.inAnyRange = function (ranges, options) { + var _this = this; + var cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every(function (range) { + return range[0] !== undefined && + range[1] !== undefined && + ascending(range[0], range[1]) <= 0; + })) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + var includeLowers = !options || options.includeLowers !== false; + var includeUppers = options && options.includeUppers === true; + function addRange(ranges, newRange) { + var i = 0, l = ranges.length; + for (; i < l; ++i) { + var range = ranges[i]; + if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i === l) + ranges.push(newRange); + return ranges; + } + var sortDirection = ascending; + function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } + var set; + try { + set = ranges.reduce(addRange, []); + set.sort(rangeSorter); + } + catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + var rangePos = 0; + var keyIsBeyondCurrentEntry = includeUppers ? + function (key) { return ascending(key, set[rangePos][1]) > 0; } : + function (key) { return ascending(key, set[rangePos][1]) >= 0; }; + var keyIsBeforeCurrentEntry = includeLowers ? + function (key) { return descending(key, set[rangePos][0]) > 0; } : + function (key) { return descending(key, set[rangePos][0]) >= 0; }; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + var checkKey = keyIsBeyondCurrentEntry; + var c = new this.Collection(this, function () { return createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers); }); + c._ondirectionchange = function (direction) { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } + else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + while (checkKey(key)) { + ++rangePos; + if (rangePos === set.length) { + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + return true; + } + else if (_this._cmp(key, set[rangePos][1]) === 0 || _this._cmp(key, set[rangePos][0]) === 0) { + return false; + } + else { + advance(function () { + if (sortDirection === ascending) + cursor.continue(set[rangePos][0]); + else + cursor.continue(set[rangePos][1]); + }); + return false; + } + }); + return c; + }; + WhereClause.prototype.startsWithAnyOf = function () { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every(function (s) { return typeof s === 'string'; })) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map(function (str) { return [str, str + maxString]; })); + }; + return WhereClause; +}()); + +function createWhereClauseConstructor(db) { + return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) { + this.db = db; + this._ctx = { + table: table, + index: index === ":id" ? null : index, + or: orCollection + }; + this._cmp = this._ascending = cmp; + this._descending = function (a, b) { return cmp(b, a); }; + this._max = function (a, b) { return cmp(a, b) > 0 ? a : b; }; + this._min = function (a, b) { return cmp(a, b) < 0 ? a : b; }; + this._IDBKeyRange = db._deps.IDBKeyRange; + if (!this._IDBKeyRange) + throw new exceptions.MissingAPI(); + }); +} + +function eventRejectHandler(reject) { + return wrap(function (event) { + preventDefault(event); + reject(event.target.error); + return false; + }); +} +function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); +} + +var DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated'; +var STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1'; +var globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME); + +var Transaction = (function () { + function Transaction() { + } + Transaction.prototype._lock = function () { + assert(!PSD.global); + ++this._reculock; + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + }; + Transaction.prototype._unlock = function () { + assert(!PSD.global); + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } + catch (e) { } + } + } + return this; + }; + Transaction.prototype._locked = function () { + return this._reculock && PSD.lockOwnerFor !== this; + }; + Transaction.prototype.create = function (idbtrans) { + var _this = this; + if (!this.mode) + return this; + var idbdb = this.db.idbdb; + var dbOpenError = this.db._state.dbOpenError; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || + (this.db.core + ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) + : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); + idbtrans.onerror = wrap(function (ev) { + preventDefault(ev); + _this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap(function (ev) { + preventDefault(ev); + _this.active && _this._reject(new exceptions.Abort(idbtrans.error)); + _this.active = false; + _this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(function () { + _this.active = false; + _this._resolve(); + if ('mutatedParts' in idbtrans) { + globalEvents.storagemutated.fire(idbtrans["mutatedParts"]); + } + }); + return this; + }; + Transaction.prototype._promise = function (mode, fn, bWriteLock) { + var _this = this; + if (mode === 'readwrite' && this.mode !== 'readwrite') + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new DexiePromise(function (resolve, reject) { + _this._blockedFuncs.push([function () { + _this._promise(mode, fn, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } + else if (bWriteLock) { + return newScope(function () { + var p = new DexiePromise(function (resolve, reject) { + _this._lock(); + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p.finally(function () { return _this._unlock(); }); + p._lib = true; + return p; + }); + } + else { + var p = new DexiePromise(function (resolve, reject) { + var rv = fn(resolve, reject, _this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p._lib = true; + return p; + } + }; + Transaction.prototype._root = function () { + return this.parent ? this.parent._root() : this; + }; + Transaction.prototype.waitFor = function (promiseLike) { + var root = this._root(); + var promise = DexiePromise.resolve(promiseLike); + if (root._waitingFor) { + root._waitingFor = root._waitingFor.then(function () { return promise; }); + } + else { + root._waitingFor = promise; + root._waitingQueue = []; + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; + while (root._waitingQueue.length) + (root._waitingQueue.shift())(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + }()); + } + var currentWaitPromise = root._waitingFor; + return new DexiePromise(function (resolve, reject) { + promise.then(function (res) { return root._waitingQueue.push(wrap(resolve.bind(null, res))); }, function (err) { return root._waitingQueue.push(wrap(reject.bind(null, err))); }).finally(function () { + if (root._waitingFor === currentWaitPromise) { + root._waitingFor = null; + } + }); + }); + }; + Transaction.prototype.abort = function () { + if (this.active) { + this.active = false; + if (this.idbtrans) + this.idbtrans.abort(); + this._reject(new exceptions.Abort()); + } + }; + Transaction.prototype.table = function (tableName) { + var memoizedTables = (this._memoizedTables || (this._memoizedTables = {})); + if (hasOwn(memoizedTables, tableName)) + return memoizedTables[tableName]; + var tableSchema = this.schema[tableName]; + if (!tableSchema) { + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + } + var transactionBoundTable = new this.db.Table(tableName, tableSchema, this); + transactionBoundTable.core = this.db.core.table(tableName); + memoizedTables[tableName] = transactionBoundTable; + return transactionBoundTable; + }; + return Transaction; +}()); + +function createTransactionConstructor(db) { + return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) { + var _this = this; + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.schema = dbschema; + this.chromeTransactionDurability = chromeTransactionDurability; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; + this._completion = new DexiePromise(function (resolve, reject) { + _this._resolve = resolve; + _this._reject = reject; + }); + this._completion.then(function () { + _this.active = false; + _this.on.complete.fire(); + }, function (e) { + var wasActive = _this.active; + _this.active = false; + _this.on.error.fire(e); + _this.parent ? + _this.parent._reject(e) : + wasActive && _this.idbtrans && _this.idbtrans.abort(); + return rejection(e); + }); + }); +} + +function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) { + return { + name: name, + keyPath: keyPath, + unique: unique, + multi: multi, + auto: auto, + compound: compound, + src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath) + }; +} +function nameFromKeyPath(keyPath) { + return typeof keyPath === 'string' ? + keyPath : + keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : ""; +} + +function createTableSchema(name, primKey, indexes) { + return { + name: name, + primKey: primKey, + indexes: indexes, + mappedClass: null, + idxByName: arrayToObject(indexes, function (index) { return [index.name, index]; }) + }; +} + +function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; +} +var getMaxKey = function (IdbKeyRange) { + try { + IdbKeyRange.only([[]]); + getMaxKey = function () { return [[]]; }; + return [[]]; + } + catch (e) { + getMaxKey = function () { return maxString; }; + return maxString; + } +}; + +function getKeyExtractor(keyPath) { + if (keyPath == null) { + return function () { return undefined; }; + } + else if (typeof keyPath === 'string') { + return getSinglePathKeyExtractor(keyPath); + } + else { + return function (obj) { return getByKeyPath(obj, keyPath); }; + } +} +function getSinglePathKeyExtractor(keyPath) { + var split = keyPath.split('.'); + if (split.length === 1) { + return function (obj) { return obj[keyPath]; }; + } + else { + return function (obj) { return getByKeyPath(obj, keyPath); }; + } +} + +function arrayify(arrayLike) { + return [].slice.call(arrayLike); +} +var _id_counter = 0; +function getKeyPathAlias(keyPath) { + return keyPath == null ? + ":id" : + typeof keyPath === 'string' ? + keyPath : + "[".concat(keyPath.join('+'), "]"); +} +function createDBCore(db, IdbKeyRange, tmpTrans) { + function extractSchema(db, trans) { + var tables = arrayify(db.objectStoreNames); + return { + schema: { + name: db.name, + tables: tables.map(function (table) { return trans.objectStore(table); }).map(function (store) { + var keyPath = store.keyPath, autoIncrement = store.autoIncrement; + var compound = isArray(keyPath); + var outbound = keyPath == null; + var indexByKeyPath = {}; + var result = { + name: store.name, + primaryKey: { + name: null, + isPrimaryKey: true, + outbound: outbound, + compound: compound, + keyPath: keyPath, + autoIncrement: autoIncrement, + unique: true, + extractKey: getKeyExtractor(keyPath) + }, + indexes: arrayify(store.indexNames).map(function (indexName) { return store.index(indexName); }) + .map(function (index) { + var name = index.name, unique = index.unique, multiEntry = index.multiEntry, keyPath = index.keyPath; + var compound = isArray(keyPath); + var result = { + name: name, + compound: compound, + keyPath: keyPath, + unique: unique, + multiEntry: multiEntry, + extractKey: getKeyExtractor(keyPath) + }; + indexByKeyPath[getKeyPathAlias(keyPath)] = result; + return result; + }), + getIndexByKeyPath: function (keyPath) { return indexByKeyPath[getKeyPathAlias(keyPath)]; } + }; + indexByKeyPath[":id"] = result.primaryKey; + if (keyPath != null) { + indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; + } + return result; + }) + }, + hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) && + !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) + }; + } + function makeIDBKeyRange(range) { + if (range.type === 3 ) + return null; + if (range.type === 4 ) + throw new Error("Cannot convert never type to IDBKeyRange"); + var lower = range.lower, upper = range.upper, lowerOpen = range.lowerOpen, upperOpen = range.upperOpen; + var idbRange = lower === undefined ? + upper === undefined ? + null : + IdbKeyRange.upperBound(upper, !!upperOpen) : + upper === undefined ? + IdbKeyRange.lowerBound(lower, !!lowerOpen) : + IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); + return idbRange; + } + function createDbCoreTable(tableSchema) { + var tableName = tableSchema.name; + function mutate(_a) { + var trans = _a.trans, type = _a.type, keys = _a.keys, values = _a.values, range = _a.range; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var outbound = store.keyPath == null; + var isAddOrPut = type === "put" || type === "add"; + if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange') + throw new Error("Invalid operation type: " + type); + var length = (keys || values || { length: 1 }).length; + if (keys && values && keys.length !== values.length) { + throw new Error("Given keys array must have same length as given values array."); + } + if (length === 0) + return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined }); + var req; + var reqs = []; + var failures = []; + var numFailures = 0; + var errorHandler = function (event) { + ++numFailures; + preventDefault(event); + }; + if (type === 'deleteRange') { + if (range.type === 4 ) + return resolve({ numFailures: numFailures, failures: failures, results: [], lastResult: undefined }); + if (range.type === 3 ) + reqs.push(req = store.clear()); + else + reqs.push(req = store.delete(makeIDBKeyRange(range))); + } + else { + var _a = isAddOrPut ? + outbound ? + [values, keys] : + [values, null] : + [keys, null], args1 = _a[0], args2 = _a[1]; + if (isAddOrPut) { + for (var i = 0; i < length; ++i) { + reqs.push(req = (args2 && args2[i] !== undefined ? + store[type](args1[i], args2[i]) : + store[type](args1[i]))); + req.onerror = errorHandler; + } + } + else { + for (var i = 0; i < length; ++i) { + reqs.push(req = store[type](args1[i])); + req.onerror = errorHandler; + } + } + } + var done = function (event) { + var lastResult = event.target.result; + reqs.forEach(function (req, i) { return req.error != null && (failures[i] = req.error); }); + resolve({ + numFailures: numFailures, + failures: failures, + results: type === "delete" ? keys : reqs.map(function (req) { return req.result; }), + lastResult: lastResult + }); + }; + req.onerror = function (event) { + errorHandler(event); + done(event); + }; + req.onsuccess = done; + }); + } + function openCursor(_a) { + var trans = _a.trans, values = _a.values, query = _a.query, reverse = _a.reverse, unique = _a.unique; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var index = query.index, range = query.range; + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? + store : + store.index(index.name); + var direction = reverse ? + unique ? + "prevunique" : + "prev" : + unique ? + "nextunique" : + "next"; + var req = values || !('openKeyCursor' in source) ? + source.openCursor(makeIDBKeyRange(range), direction) : + source.openKeyCursor(makeIDBKeyRange(range), direction); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(function (ev) { + var cursor = req.result; + if (!cursor) { + resolve(null); + return; + } + cursor.___id = ++_id_counter; + cursor.done = false; + var _cursorContinue = cursor.continue.bind(cursor); + var _cursorContinuePrimaryKey = cursor.continuePrimaryKey; + if (_cursorContinuePrimaryKey) + _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); + var _cursorAdvance = cursor.advance.bind(cursor); + var doThrowCursorIsNotStarted = function () { throw new Error("Cursor not started"); }; + var doThrowCursorIsStopped = function () { throw new Error("Cursor not stopped"); }; + cursor.trans = trans; + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; + cursor.fail = wrap(reject); + cursor.next = function () { + var _this = this; + var gotOne = 1; + return this.start(function () { return gotOne-- ? _this.continue() : _this.stop(); }).then(function () { return _this; }); + }; + cursor.start = function (callback) { + var iterationPromise = new Promise(function (resolveIteration, rejectIteration) { + resolveIteration = wrap(resolveIteration); + req.onerror = eventRejectHandler(rejectIteration); + cursor.fail = rejectIteration; + cursor.stop = function (value) { + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; + resolveIteration(value); + }; + }); + var guardedCallback = function () { + if (req.result) { + try { + callback(); + } + catch (err) { + cursor.fail(err); + } + } + else { + cursor.done = true; + cursor.start = function () { throw new Error("Cursor behind last entry"); }; + cursor.stop(); + } + }; + req.onsuccess = wrap(function (ev) { + req.onsuccess = guardedCallback; + guardedCallback(); + }); + cursor.continue = _cursorContinue; + cursor.continuePrimaryKey = _cursorContinuePrimaryKey; + cursor.advance = _cursorAdvance; + guardedCallback(); + return iterationPromise; + }; + resolve(cursor); + }, reject); + }); + } + function query(hasGetAll) { + return function (request) { + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var trans = request.trans, values = request.values, limit = request.limit, query = request.query; + var nonInfinitLimit = limit === Infinity ? undefined : limit; + var index = query.index, range = query.range; + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? store : store.index(index.name); + var idbKeyRange = makeIDBKeyRange(range); + if (limit === 0) + return resolve({ result: [] }); + if (hasGetAll) { + var req = values ? + source.getAll(idbKeyRange, nonInfinitLimit) : + source.getAllKeys(idbKeyRange, nonInfinitLimit); + req.onsuccess = function (event) { return resolve({ result: event.target.result }); }; + req.onerror = eventRejectHandler(reject); + } + else { + var count_1 = 0; + var req_1 = values || !('openKeyCursor' in source) ? + source.openCursor(idbKeyRange) : + source.openKeyCursor(idbKeyRange); + var result_1 = []; + req_1.onsuccess = function (event) { + var cursor = req_1.result; + if (!cursor) + return resolve({ result: result_1 }); + result_1.push(values ? cursor.value : cursor.primaryKey); + if (++count_1 === limit) + return resolve({ result: result_1 }); + cursor.continue(); + }; + req_1.onerror = eventRejectHandler(reject); + } + }); + }; + } + return { + name: tableName, + schema: tableSchema, + mutate: mutate, + getMany: function (_a) { + var trans = _a.trans, keys = _a.keys; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var length = keys.length; + var result = new Array(length); + var keyCount = 0; + var callbackCount = 0; + var req; + var successHandler = function (event) { + var req = event.target; + if ((result[req._pos] = req.result) != null) + ; + if (++callbackCount === keyCount) + resolve(result); + }; + var errorHandler = eventRejectHandler(reject); + for (var i = 0; i < length; ++i) { + var key = keys[i]; + if (key != null) { + req = store.get(keys[i]); + req._pos = i; + req.onsuccess = successHandler; + req.onerror = errorHandler; + ++keyCount; + } + } + if (keyCount === 0) + resolve(result); + }); + }, + get: function (_a) { + var trans = _a.trans, key = _a.key; + return new Promise(function (resolve, reject) { + resolve = wrap(resolve); + var store = trans.objectStore(tableName); + var req = store.get(key); + req.onsuccess = function (event) { return resolve(event.target.result); }; + req.onerror = eventRejectHandler(reject); + }); + }, + query: query(hasGetAll), + openCursor: openCursor, + count: function (_a) { + var query = _a.query, trans = _a.trans; + var index = query.index, range = query.range; + return new Promise(function (resolve, reject) { + var store = trans.objectStore(tableName); + var source = index.isPrimaryKey ? store : store.index(index.name); + var idbKeyRange = makeIDBKeyRange(range); + var req = idbKeyRange ? source.count(idbKeyRange) : source.count(); + req.onsuccess = wrap(function (ev) { return resolve(ev.target.result); }); + req.onerror = eventRejectHandler(reject); + }); + } + }; + } + var _a = extractSchema(db, tmpTrans), schema = _a.schema, hasGetAll = _a.hasGetAll; + var tables = schema.tables.map(function (tableSchema) { return createDbCoreTable(tableSchema); }); + var tableMap = {}; + tables.forEach(function (table) { return tableMap[table.name] = table; }); + return { + stack: "dbcore", + transaction: db.transaction.bind(db), + table: function (name) { + var result = tableMap[name]; + if (!result) + throw new Error("Table '".concat(name, "' not found")); + return tableMap[name]; + }, + MIN_KEY: -Infinity, + MAX_KEY: getMaxKey(IdbKeyRange), + schema: schema + }; +} + +function createMiddlewareStack(stackImpl, middlewares) { + return middlewares.reduce(function (down, _a) { + var create = _a.create; + return (__assign(__assign({}, down), create(down))); + }, stackImpl); +} +function createMiddlewareStacks(middlewares, idbdb, _a, tmpTrans) { + var IDBKeyRange = _a.IDBKeyRange; _a.indexedDB; + var dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); + return { + dbcore: dbcore + }; +} +function generateMiddlewareStacks(db, tmpTrans) { + var idbdb = tmpTrans.db; + var stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans); + db.core = stacks.dbcore; + db.tables.forEach(function (table) { + var tableName = table.name; + if (db.core.schema.tables.some(function (tbl) { return tbl.name === tableName; })) { + table.core = db.core.table(tableName); + if (db[tableName] instanceof db.Table) { + db[tableName].core = table.core; + } + } + }); +} + +function setApiOnPlace(db, objs, tableNames, dbschema) { + tableNames.forEach(function (tableName) { + var schema = dbschema[tableName]; + objs.forEach(function (obj) { + var propDesc = getPropertyDescriptor(obj, tableName); + if (!propDesc || ("value" in propDesc && propDesc.value === undefined)) { + if (obj === db.Transaction.prototype || obj instanceof db.Transaction) { + setProp(obj, tableName, { + get: function () { return this.table(tableName); }, + set: function (value) { + defineProperty(this, tableName, { value: value, writable: true, configurable: true, enumerable: true }); + } + }); + } + else { + obj[tableName] = new db.Table(tableName, schema); + } + } + }); + }); +} +function removeTablesApi(db, objs) { + objs.forEach(function (obj) { + for (var key in obj) { + if (obj[key] instanceof db.Table) + delete obj[key]; + } + }); +} +function lowerVersionFirst(a, b) { + return a._cfg.version - b._cfg.version; +} +function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) { + var globalSchema = db._dbSchema; + if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) { + globalSchema.$meta = createTableSchema("$meta", parseIndexSyntax("")[0], []); + db._storeNames.push('$meta'); + } + var trans = db._createTransaction('readwrite', db._storeNames, globalSchema); + trans.create(idbUpgradeTrans); + trans._completion.catch(reject); + var rejectTransaction = trans._reject.bind(trans); + var transless = PSD.transless || PSD; + newScope(function () { + PSD.trans = trans; + PSD.transless = transless; + if (oldVersion === 0) { + keys(globalSchema).forEach(function (tableName) { + createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + generateMiddlewareStacks(db, idbUpgradeTrans); + DexiePromise.follow(function () { return db.on.populate.fire(trans); }).catch(rejectTransaction); + } + else { + generateMiddlewareStacks(db, idbUpgradeTrans); + return getExistingVersion(db, trans, oldVersion) + .then(function (oldVersion) { return updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans); }) + .catch(rejectTransaction); + } + }); +} +function patchCurrentVersion(db, idbUpgradeTrans) { + createMissingTables(db._dbSchema, idbUpgradeTrans); + if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) { + idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version'); + } + var globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans); + var diff = getSchemaDiff(globalSchema, db._dbSchema); + var _loop_1 = function (tableChange) { + if (tableChange.change.length || tableChange.recreate) { + console.warn("Unable to patch indexes of table ".concat(tableChange.name, " because it has changes on the type of index or primary key.")); + return { value: void 0 }; + } + var store = idbUpgradeTrans.objectStore(tableChange.name); + tableChange.add.forEach(function (idx) { + if (debug) + console.debug("Dexie upgrade patch: Creating missing index ".concat(tableChange.name, ".").concat(idx.src)); + addIndex(store, idx); + }); + }; + for (var _i = 0, _a = diff.change; _i < _a.length; _i++) { + var tableChange = _a[_i]; + var state_1 = _loop_1(tableChange); + if (typeof state_1 === "object") + return state_1.value; + } +} +function getExistingVersion(db, trans, oldVersion) { + if (trans.storeNames.includes('$meta')) { + return trans.table('$meta').get('version').then(function (metaVersion) { + return metaVersion != null ? metaVersion : oldVersion; + }); + } + else { + return DexiePromise.resolve(oldVersion); + } +} +function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) { + var queue = []; + var versions = db._versions; + var globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + var versToRun = versions.filter(function (v) { return v._cfg.version >= oldVersion; }); + if (versToRun.length === 0) { + return DexiePromise.resolve(); + } + versToRun.forEach(function (version) { + queue.push(function () { + var oldSchema = globalSchema; + var newSchema = version._cfg.dbschema; + adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans); + adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans); + globalSchema = db._dbSchema = newSchema; + var diff = getSchemaDiff(oldSchema, newSchema); + diff.add.forEach(function (tuple) { + createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + diff.change.forEach(function (change) { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } + else { + var store_1 = idbUpgradeTrans.objectStore(change.name); + change.add.forEach(function (idx) { return addIndex(store_1, idx); }); + change.change.forEach(function (idx) { + store_1.deleteIndex(idx.name); + addIndex(store_1, idx); + }); + change.del.forEach(function (idxName) { return store_1.deleteIndex(idxName); }); + } + }); + var contentUpgrade = version._cfg.contentUpgrade; + if (contentUpgrade && version._cfg.version > oldVersion) { + generateMiddlewareStacks(db, idbUpgradeTrans); + trans._memoizedTables = {}; + var upgradeSchema_1 = shallowClone(newSchema); + diff.del.forEach(function (table) { + upgradeSchema_1[table] = oldSchema[table]; + }); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema_1), upgradeSchema_1); + trans.schema = upgradeSchema_1; + var contentUpgradeIsAsync_1 = isAsyncFunction(contentUpgrade); + if (contentUpgradeIsAsync_1) { + incrementExpectedAwaits(); + } + var returnValue_1; + var promiseFollowed = DexiePromise.follow(function () { + returnValue_1 = contentUpgrade(trans); + if (returnValue_1) { + if (contentUpgradeIsAsync_1) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue_1.then(decrementor, decrementor); + } + } + }); + return (returnValue_1 && typeof returnValue_1.then === 'function' ? + DexiePromise.resolve(returnValue_1) : promiseFollowed.then(function () { return returnValue_1; })); + } + }); + queue.push(function (idbtrans) { + var newSchema = version._cfg.dbschema; + deleteRemovedTables(newSchema, idbtrans); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema); + trans.schema = db._dbSchema; + }); + queue.push(function (idbtrans) { + if (db.idbdb.objectStoreNames.contains('$meta')) { + if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) { + db.idbdb.deleteObjectStore('$meta'); + delete db._dbSchema.$meta; + db._storeNames = db._storeNames.filter(function (name) { return name !== '$meta'; }); + } + else { + idbtrans.objectStore('$meta').put(version._cfg.version, 'version'); + } + } + }); + }); + function runQueue() { + return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : + DexiePromise.resolve(); + } + return runQueue().then(function () { + createMissingTables(globalSchema, idbUpgradeTrans); + }); +} +function getSchemaDiff(oldSchema, newSchema) { + var diff = { + del: [], + add: [], + change: [] + }; + var table; + for (table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + var oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } + else { + var change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if (( + '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) || + (oldDef.primKey.auto !== newDef.primKey.auto)) { + change.recreate = true; + diff.change.push(change); + } + else { + var oldIndexes = oldDef.idxByName; + var newIndexes = newDef.idxByName; + var idxName = void 0; + for (idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + var oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; +} +function createTable(idbtrans, tableName, primKey, indexes) { + var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? + { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : + { autoIncrement: primKey.auto }); + indexes.forEach(function (idx) { return addIndex(store, idx); }); + return store; +} +function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach(function (tableName) { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + if (debug) + console.debug('Dexie: Creating missing table', tableName); + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); +} +function deleteRemovedTables(newSchema, idbtrans) { + [].slice.call(idbtrans.db.objectStoreNames).forEach(function (storeName) { + return newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName); + }); +} +function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); +} +function buildGlobalSchema(db, idbdb, tmpTrans) { + var globalSchema = {}; + var dbStoreNames = slice(idbdb.objectStoreNames, 0); + dbStoreNames.forEach(function (storeName) { + var store = tmpTrans.objectStore(storeName); + var keyPath = store.keyPath; + var primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", true, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); + var indexes = []; + for (var j = 0; j < store.indexNames.length; ++j) { + var idbindex = store.index(store.indexNames[j]); + keyPath = idbindex.keyPath; + var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); + indexes.push(index); + } + globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); + }); + return globalSchema; +} +function readGlobalSchema(db, idbdb, tmpTrans) { + db.verno = idbdb.version / 10; + var globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans); + db._storeNames = slice(idbdb.objectStoreNames, 0); + setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema); +} +function verifyInstalledSchema(db, tmpTrans) { + var installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans); + var diff = getSchemaDiff(installedSchema, db._dbSchema); + return !(diff.add.length || diff.change.some(function (ch) { return ch.add.length || ch.change.length; })); +} +function adjustToExistingIndexNames(db, schema, idbtrans) { + var storeNames = idbtrans.db.objectStoreNames; + for (var i = 0; i < storeNames.length; ++i) { + var storeName = storeNames[i]; + var store = idbtrans.objectStore(storeName); + db._hasGetAll = 'getAll' in store; + for (var j = 0; j < store.indexNames.length; ++j) { + var indexName = store.indexNames[j]; + var keyPath = store.index(indexName).keyPath; + var dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; + if (schema[storeName]) { + var indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) { + indexSpec.name = indexName; + delete schema[storeName].idxByName[dexieName]; + schema[storeName].idxByName[indexName] = indexSpec; + } + } + } + } + if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + db._hasGetAll = false; + } +} +function parseIndexSyntax(primKeyAndIndexes) { + return primKeyAndIndexes.split(',').map(function (index, indexNum) { + index = index.trim(); + var name = index.replace(/([&*]|\+\+)/g, ""); + var keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; + return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0); + }); +} + +var Version = (function () { + function Version() { + } + Version.prototype._parseStoresSpec = function (stores, outSchema) { + keys(stores).forEach(function (tableName) { + if (stores[tableName] !== null) { + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + primKey.unique = true; + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + indexes.forEach(function (idx) { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + }); + outSchema[tableName] = createTableSchema(tableName, primKey, indexes); + } + }); + }; + Version.prototype.stores = function (stores) { + var db = this.db; + this._cfg.storesSource = this._cfg.storesSource ? + extend(this._cfg.storesSource, stores) : + stores; + var versions = db._versions; + var storesSpec = {}; + var dbschema = {}; + versions.forEach(function (version) { + extend(storesSpec, version._cfg.storesSource); + dbschema = (version._cfg.dbschema = {}); + version._parseStoresSpec(storesSpec, dbschema); + }); + db._dbSchema = dbschema; + removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]); + setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + db._storeNames = keys(dbschema); + return this; + }; + Version.prototype.upgrade = function (upgradeFunction) { + this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); + return this; + }; + return Version; +}()); + +function createVersionConstructor(db) { + return makeClassConstructor(Version.prototype, function Version(versionNumber) { + this.db = db; + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + }); +} + +function getDbNamesTable(indexedDB, IDBKeyRange) { + var dbNamesDB = indexedDB["_dbNamesDB"]; + if (!dbNamesDB) { + dbNamesDB = indexedDB["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { + addons: [], + indexedDB: indexedDB, + IDBKeyRange: IDBKeyRange, + }); + dbNamesDB.version(1).stores({ dbnames: "name" }); + } + return dbNamesDB.table("dbnames"); +} +function hasDatabasesNative(indexedDB) { + return indexedDB && typeof indexedDB.databases === "function"; +} +function getDatabaseNames(_a) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + return hasDatabasesNative(indexedDB) + ? Promise.resolve(indexedDB.databases()).then(function (infos) { + return infos + .map(function (info) { return info.name; }) + .filter(function (name) { return name !== DBNAMES_DB; }); + }) + : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys(); +} +function _onDatabaseCreated(_a, name) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).put({ name: name }).catch(nop); +} +function _onDatabaseDeleted(_a, name) { + var indexedDB = _a.indexedDB, IDBKeyRange = _a.IDBKeyRange; + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop); +} + +function vip(fn) { + return newScope(function () { + PSD.letThrough = true; + return fn(); + }); +} + +function idbReady() { + var isSafari = !navigator.userAgentData && + /Safari\//.test(navigator.userAgent) && + !/Chrom(e|ium)\//.test(navigator.userAgent); + if (!isSafari || !indexedDB.databases) + return Promise.resolve(); + var intervalId; + return new Promise(function (resolve) { + var tryIdb = function () { return indexedDB.databases().finally(resolve); }; + intervalId = setInterval(tryIdb, 100); + tryIdb(); + }).finally(function () { return clearInterval(intervalId); }); +} + +var _a; +function isEmptyRange(node) { + return !("from" in node); +} +var RangeSet = function (fromOrTree, to) { + if (this) { + extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 }); + } + else { + var rv = new RangeSet(); + if (fromOrTree && ("d" in fromOrTree)) { + extend(rv, fromOrTree); + } + return rv; + } +}; +props(RangeSet.prototype, (_a = { + add: function (rangeSet) { + mergeRanges(this, rangeSet); + return this; + }, + addKey: function (key) { + addRange(this, key, key); + return this; + }, + addKeys: function (keys) { + var _this = this; + keys.forEach(function (key) { return addRange(_this, key, key); }); + return this; + } + }, + _a[iteratorSymbol] = function () { + return getRangeSetIterator(this); + }, + _a)); +function addRange(target, from, to) { + var diff = cmp(from, to); + if (isNaN(diff)) + return; + if (diff > 0) + throw RangeError(); + if (isEmptyRange(target)) + return extend(target, { from: from, to: to, d: 1 }); + var left = target.l; + var right = target.r; + if (cmp(to, target.from) < 0) { + left + ? addRange(left, from, to) + : (target.l = { from: from, to: to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.to) > 0) { + right + ? addRange(right, from, to) + : (target.r = { from: from, to: to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.from) < 0) { + target.from = from; + target.l = null; + target.d = right ? right.d + 1 : 1; + } + if (cmp(to, target.to) > 0) { + target.to = to; + target.r = null; + target.d = target.l ? target.l.d + 1 : 1; + } + var rightWasCutOff = !target.r; + if (left && !target.l) { + mergeRanges(target, left); + } + if (right && rightWasCutOff) { + mergeRanges(target, right); + } +} +function mergeRanges(target, newSet) { + function _addRangeSet(target, _a) { + var from = _a.from, to = _a.to, l = _a.l, r = _a.r; + addRange(target, from, to); + if (l) + _addRangeSet(target, l); + if (r) + _addRangeSet(target, r); + } + if (!isEmptyRange(newSet)) + _addRangeSet(target, newSet); +} +function rangesOverlap(rangeSet1, rangeSet2) { + var i1 = getRangeSetIterator(rangeSet2); + var nextResult1 = i1.next(); + if (nextResult1.done) + return false; + var a = nextResult1.value; + var i2 = getRangeSetIterator(rangeSet1); + var nextResult2 = i2.next(a.from); + var b = nextResult2.value; + while (!nextResult1.done && !nextResult2.done) { + if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0) + return true; + cmp(a.from, b.from) < 0 + ? (a = (nextResult1 = i1.next(b.from)).value) + : (b = (nextResult2 = i2.next(a.from)).value); + } + return false; +} +function getRangeSetIterator(node) { + var state = isEmptyRange(node) ? null : { s: 0, n: node }; + return { + next: function (key) { + var keyProvided = arguments.length > 0; + while (state) { + switch (state.s) { + case 0: + state.s = 1; + if (keyProvided) { + while (state.n.l && cmp(key, state.n.from) < 0) + state = { up: state, n: state.n.l, s: 1 }; + } + else { + while (state.n.l) + state = { up: state, n: state.n.l, s: 1 }; + } + case 1: + state.s = 2; + if (!keyProvided || cmp(key, state.n.to) <= 0) + return { value: state.n, done: false }; + case 2: + if (state.n.r) { + state.s = 3; + state = { up: state, n: state.n.r, s: 0 }; + continue; + } + case 3: + state = state.up; + } + } + return { done: true }; + }, + }; +} +function rebalance(target) { + var _a, _b; + var diff = (((_a = target.r) === null || _a === void 0 ? void 0 : _a.d) || 0) - (((_b = target.l) === null || _b === void 0 ? void 0 : _b.d) || 0); + var r = diff > 1 ? "r" : diff < -1 ? "l" : ""; + if (r) { + var l = r === "r" ? "l" : "r"; + var rootClone = __assign({}, target); + var oldRootRight = target[r]; + target.from = oldRootRight.from; + target.to = oldRootRight.to; + target[r] = oldRootRight[r]; + rootClone[r] = oldRootRight[l]; + target[l] = rootClone; + rootClone.d = computeDepth(rootClone); + } + target.d = computeDepth(target); +} +function computeDepth(_a) { + var r = _a.r, l = _a.l; + return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1; +} + +function extendObservabilitySet(target, newSet) { + keys(newSet).forEach(function (part) { + if (target[part]) + mergeRanges(target[part], newSet[part]); + else + target[part] = cloneSimpleObjectTree(newSet[part]); + }); + return target; +} + +function obsSetsOverlap(os1, os2) { + return os1.all || os2.all || Object.keys(os1).some(function (key) { return os2[key] && rangesOverlap(os2[key], os1[key]); }); +} + +var cache = {}; + +var unsignaledParts = {}; +var isTaskEnqueued = false; +function signalSubscribersLazily(part, optimistic) { + extendObservabilitySet(unsignaledParts, part); + if (!isTaskEnqueued) { + isTaskEnqueued = true; + setTimeout(function () { + isTaskEnqueued = false; + var parts = unsignaledParts; + unsignaledParts = {}; + signalSubscribersNow(parts, false); + }, 0); + } +} +function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries) { + if (deleteAffectedCacheEntries === void 0) { deleteAffectedCacheEntries = false; } + var queriesToSignal = new Set(); + if (updatedParts.all) { + for (var _i = 0, _a = Object.values(cache); _i < _a.length; _i++) { + var tblCache = _a[_i]; + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + else { + for (var key in updatedParts) { + var parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key); + if (parts) { + var dbName = parts[1], tableName = parts[2]; + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (tblCache) + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + } + queriesToSignal.forEach(function (requery) { return requery(); }); +} +function collectTableSubscribers(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) { + var updatedEntryLists = []; + for (var _i = 0, _a = Object.entries(tblCache.queries.query); _i < _a.length; _i++) { + var _b = _a[_i], indexName = _b[0], entries = _b[1]; + var filteredEntries = []; + for (var _c = 0, entries_1 = entries; _c < entries_1.length; _c++) { + var entry = entries_1[_c]; + if (obsSetsOverlap(updatedParts, entry.obsSet)) { + entry.subscribers.forEach(function (requery) { return outQueriesToSignal.add(requery); }); + } + else if (deleteAffectedCacheEntries) { + filteredEntries.push(entry); + } + } + if (deleteAffectedCacheEntries) + updatedEntryLists.push([indexName, filteredEntries]); + } + if (deleteAffectedCacheEntries) { + for (var _d = 0, updatedEntryLists_1 = updatedEntryLists; _d < updatedEntryLists_1.length; _d++) { + var _e = updatedEntryLists_1[_d], indexName = _e[0], filteredEntries = _e[1]; + tblCache.queries.query[indexName] = filteredEntries; + } + } +} + +function dexieOpen(db) { + var state = db._state; + var indexedDB = db._deps.indexedDB; + if (state.isBeingOpened || db.idbdb) + return state.dbReadyPromise.then(function () { return state.dbOpenError ? + rejection(state.dbOpenError) : + db; }); + state.isBeingOpened = true; + state.dbOpenError = null; + state.openComplete = false; + var openCanceller = state.openCanceller; + var nativeVerToOpen = Math.round(db.verno * 10); + var schemaPatchMode = false; + function throwIfCancelled() { + if (state.openCanceller !== openCanceller) + throw new exceptions.DatabaseClosed('db.open() was cancelled'); + } + var resolveDbReady = state.dbReadyResolve, + upgradeTransaction = null, wasCreated = false; + var tryOpenDB = function () { return new DexiePromise(function (resolve, reject) { + throwIfCancelled(); + if (!indexedDB) + throw new exceptions.MissingAPI(); + var dbName = db.name; + var req = state.autoSchema || !nativeVerToOpen ? + indexedDB.open(dbName) : + indexedDB.open(dbName, nativeVerToOpen); + if (!req) + throw new exceptions.MissingAPI(); + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(db._fireOnBlocked); + req.onupgradeneeded = wrap(function (e) { + upgradeTransaction = req.transaction; + if (state.autoSchema && !db._options.allowEmptyDB) { + req.onerror = preventDefault; + upgradeTransaction.abort(); + req.result.close(); + var delreq = indexedDB.deleteDatabase(dbName); + delreq.onsuccess = delreq.onerror = wrap(function () { + reject(new exceptions.NoSuchDatabase("Database ".concat(dbName, " doesnt exist"))); + }); + } + else { + upgradeTransaction.onerror = eventRejectHandler(reject); + var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; + wasCreated = oldVer < 1; + db.idbdb = req.result; + if (schemaPatchMode) { + patchCurrentVersion(db, upgradeTransaction); + } + runUpgraders(db, oldVer / 10, upgradeTransaction, reject); + } + }, reject); + req.onsuccess = wrap(function () { + upgradeTransaction = null; + var idbdb = db.idbdb = req.result; + var objectStoreNames = slice(idbdb.objectStoreNames); + if (objectStoreNames.length > 0) + try { + var tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly'); + if (state.autoSchema) + readGlobalSchema(db, idbdb, tmpTrans); + else { + adjustToExistingIndexNames(db, db._dbSchema, tmpTrans); + if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) { + console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this."); + idbdb.close(); + nativeVerToOpen = idbdb.version + 1; + schemaPatchMode = true; + return resolve(tryOpenDB()); + } + } + generateMiddlewareStacks(db, tmpTrans); + } + catch (e) { + } + connections.push(db); + idbdb.onversionchange = wrap(function (ev) { + state.vcFired = true; + db.on("versionchange").fire(ev); + }); + idbdb.onclose = wrap(function (ev) { + db.on("close").fire(ev); + }); + if (wasCreated) + _onDatabaseCreated(db._deps, dbName); + resolve(); + }, reject); + }).catch(function (err) { + switch (err === null || err === void 0 ? void 0 : err.name) { + case "UnknownError": + if (state.PR1398_maxLoop > 0) { + state.PR1398_maxLoop--; + console.warn('Dexie: Workaround for Chrome UnknownError on open()'); + return tryOpenDB(); + } + break; + case "VersionError": + if (nativeVerToOpen > 0) { + nativeVerToOpen = 0; + return tryOpenDB(); + } + break; + } + return DexiePromise.reject(err); + }); }; + return DexiePromise.race([ + openCanceller, + (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(tryOpenDB) + ]).then(function () { + throwIfCancelled(); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(function () { return db.on.ready.fire(db.vip); })).then(function fireRemainders() { + if (state.onReadyBeingFired.length > 0) { + var remainders_1 = state.onReadyBeingFired.reduce(promisableChain, nop); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(function () { return remainders_1(db.vip); })).then(fireRemainders); + } + }); + }).finally(function () { + if (state.openCanceller === openCanceller) { + state.onReadyBeingFired = null; + state.isBeingOpened = false; + } + }).catch(function (err) { + state.dbOpenError = err; + try { + upgradeTransaction && upgradeTransaction.abort(); + } + catch (_a) { } + if (openCanceller === state.openCanceller) { + db._close(); + } + return rejection(err); + }).finally(function () { + state.openComplete = true; + resolveDbReady(); + }).then(function () { + if (wasCreated) { + var everything_1 = {}; + db.tables.forEach(function (table) { + table.schema.indexes.forEach(function (idx) { + if (idx.name) + everything_1["idb://".concat(db.name, "/").concat(table.name, "/").concat(idx.name)] = new RangeSet(-Infinity, [[[]]]); + }); + everything_1["idb://".concat(db.name, "/").concat(table.name, "/")] = everything_1["idb://".concat(db.name, "/").concat(table.name, "/:dels")] = new RangeSet(-Infinity, [[[]]]); + }); + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything_1); + signalSubscribersNow(everything_1, true); + } + return db; + }); +} + +function awaitIterator(iterator) { + var callNext = function (result) { return iterator.next(result); }, doThrow = function (error) { return iterator.throw(error); }, onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return function (val) { + var next = getNext(val), value = next.value; + return next.done ? value : + (!value || typeof value.then !== 'function' ? + isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : + value.then(onSuccess, onError)); + }; + } + return step(callNext)(); +} + +function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + var i = arguments.length; + if (i < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + var args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + scopeFunc = args.pop(); + var tables = flatten(args); + return [mode, tables, scopeFunc]; +} +function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) { + return DexiePromise.resolve().then(function () { + var transless = PSD.transless || PSD; + var trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction); + trans.explicit = true; + var zoneProps = { + trans: trans, + transless: transless + }; + if (parentTransaction) { + trans.idbtrans = parentTransaction.idbtrans; + } + else { + try { + trans.create(); + trans.idbtrans._explicit = true; + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(function () { return enterTransactionScope(db, mode, storeNames, null, scopeFunc); }); + } + return rejection(ex); + } + } + var scopeFuncIsAsync = isAsyncFunction(scopeFunc); + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + var returnValue; + var promiseFollowed = DexiePromise.follow(function () { + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (scopeFuncIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue).then(function (x) { return trans.active ? + x + : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")); }) + : promiseFollowed.then(function () { return returnValue; })).then(function (x) { + if (parentTransaction) + trans._resolve(); + return trans._completion.then(function () { return x; }); + }).catch(function (e) { + trans._reject(e); + return rejection(e); + }); + }); +} + +function pad(a, value, count) { + var result = isArray(a) ? a.slice() : [a]; + for (var i = 0; i < count; ++i) + result.push(value); + return result; +} +function createVirtualIndexMiddleware(down) { + return __assign(__assign({}, down), { table: function (tableName) { + var table = down.table(tableName); + var schema = table.schema; + var indexLookup = {}; + var allVirtualIndexes = []; + function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { + var keyPathAlias = getKeyPathAlias(keyPath); + var indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []); + var keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length; + var isVirtual = keyTail > 0; + var virtualIndex = __assign(__assign({}, lowLevelIndex), { name: isVirtual + ? "".concat(keyPathAlias, "(virtual-from:").concat(lowLevelIndex.name, ")") + : lowLevelIndex.name, lowLevelIndex: lowLevelIndex, isVirtual: isVirtual, keyTail: keyTail, keyLength: keyLength, extractKey: getKeyExtractor(keyPath), unique: !isVirtual && lowLevelIndex.unique }); + indexList.push(virtualIndex); + if (!virtualIndex.isPrimaryKey) { + allVirtualIndexes.push(virtualIndex); + } + if (keyLength > 1) { + var virtualKeyPath = keyLength === 2 ? + keyPath[0] : + keyPath.slice(0, keyLength - 1); + addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); + } + indexList.sort(function (a, b) { return a.keyTail - b.keyTail; }); + return virtualIndex; + } + var primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); + indexLookup[":id"] = [primaryKey]; + for (var _i = 0, _a = schema.indexes; _i < _a.length; _i++) { + var index = _a[_i]; + addVirtualIndexes(index.keyPath, 0, index); + } + function findBestIndex(keyPath) { + var result = indexLookup[getKeyPathAlias(keyPath)]; + return result && result[0]; + } + function translateRange(range, keyTail) { + return { + type: range.type === 1 ? + 2 : + range.type, + lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), + lowerOpen: true, + upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), + upperOpen: true + }; + } + function translateRequest(req) { + var index = req.query.index; + return index.isVirtual ? __assign(__assign({}, req), { query: { + index: index.lowLevelIndex, + range: translateRange(req.query.range, index.keyTail) + } }) : req; + } + var result = __assign(__assign({}, table), { schema: __assign(__assign({}, schema), { primaryKey: primaryKey, indexes: allVirtualIndexes, getIndexByKeyPath: findBestIndex }), count: function (req) { + return table.count(translateRequest(req)); + }, query: function (req) { + return table.query(translateRequest(req)); + }, openCursor: function (req) { + var _a = req.query.index, keyTail = _a.keyTail, isVirtual = _a.isVirtual, keyLength = _a.keyLength; + if (!isVirtual) + return table.openCursor(req); + function createVirtualCursor(cursor) { + function _continue(key) { + key != null ? + cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : + req.unique ? + cursor.continue(cursor.key.slice(0, keyLength) + .concat(req.reverse + ? down.MIN_KEY + : down.MAX_KEY, keyTail)) : + cursor.continue(); + } + var virtualCursor = Object.create(cursor, { + continue: { value: _continue }, + continuePrimaryKey: { + value: function (key, primaryKey) { + cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey); + } + }, + primaryKey: { + get: function () { + return cursor.primaryKey; + } + }, + key: { + get: function () { + var key = cursor.key; + return keyLength === 1 ? + key[0] : + key.slice(0, keyLength); + } + }, + value: { + get: function () { + return cursor.value; + } + } + }); + return virtualCursor; + } + return table.openCursor(translateRequest(req)) + .then(function (cursor) { return cursor && createVirtualCursor(cursor); }); + } }); + return result; + } }); +} +var virtualIndexMiddleware = { + stack: "dbcore", + name: "VirtualIndexMiddleware", + level: 1, + create: createVirtualIndexMiddleware +}; + +function getObjectDiff(a, b, rv, prfx) { + rv = rv || {}; + prfx = prfx || ''; + keys(a).forEach(function (prop) { + if (!hasOwn(b, prop)) { + rv[prfx + prop] = undefined; + } + else { + var ap = a[prop], bp = b[prop]; + if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) { + var apTypeName = toStringTag(ap); + var bpTypeName = toStringTag(bp); + if (apTypeName !== bpTypeName) { + rv[prfx + prop] = b[prop]; + } + else if (apTypeName === 'Object') { + getObjectDiff(ap, bp, rv, prfx + prop + '.'); + } + else if (ap !== bp) { + rv[prfx + prop] = b[prop]; + } + } + else if (ap !== bp) + rv[prfx + prop] = b[prop]; + } + }); + keys(b).forEach(function (prop) { + if (!hasOwn(a, prop)) { + rv[prfx + prop] = b[prop]; + } + }); + return rv; +} + +function getEffectiveKeys(primaryKey, req) { + if (req.type === 'delete') + return req.keys; + return req.keys || req.values.map(primaryKey.extractKey); +} + +var hooksMiddleware = { + stack: "dbcore", + name: "HooksMiddleware", + level: 2, + create: function (downCore) { return (__assign(__assign({}, downCore), { table: function (tableName) { + var downTable = downCore.table(tableName); + var primaryKey = downTable.schema.primaryKey; + var tableMiddleware = __assign(__assign({}, downTable), { mutate: function (req) { + var dxTrans = PSD.trans; + var _a = dxTrans.table(tableName).hook, deleting = _a.deleting, creating = _a.creating, updating = _a.updating; + switch (req.type) { + case 'add': + if (creating.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'put': + if (creating.fire === nop && updating.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'delete': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return addPutOrDelete(req); }, true); + case 'deleteRange': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', function () { return deleteRange(req); }, true); + } + return downTable.mutate(req); + function addPutOrDelete(req) { + var dxTrans = PSD.trans; + var keys = req.keys || getEffectiveKeys(primaryKey, req); + if (!keys) + throw new Error("Keys missing"); + req = req.type === 'add' || req.type === 'put' ? __assign(__assign({}, req), { keys: keys }) : __assign({}, req); + if (req.type !== 'delete') + req.values = __spreadArray([], req.values, true); + if (req.keys) + req.keys = __spreadArray([], req.keys, true); + return getExistingValues(downTable, req, keys).then(function (existingValues) { + var contexts = keys.map(function (key, i) { + var existingValue = existingValues[i]; + var ctx = { onerror: null, onsuccess: null }; + if (req.type === 'delete') { + deleting.fire.call(ctx, key, existingValue, dxTrans); + } + else if (req.type === 'add' || existingValue === undefined) { + var generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans); + if (key == null && generatedPrimaryKey != null) { + key = generatedPrimaryKey; + req.keys[i] = key; + if (!primaryKey.outbound) { + setByKeyPath(req.values[i], primaryKey.keyPath, key); + } + } + } + else { + var objectDiff = getObjectDiff(existingValue, req.values[i]); + var additionalChanges_1 = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans); + if (additionalChanges_1) { + var requestedValue_1 = req.values[i]; + Object.keys(additionalChanges_1).forEach(function (keyPath) { + if (hasOwn(requestedValue_1, keyPath)) { + requestedValue_1[keyPath] = additionalChanges_1[keyPath]; + } + else { + setByKeyPath(requestedValue_1, keyPath, additionalChanges_1[keyPath]); + } + }); + } + } + return ctx; + }); + return downTable.mutate(req).then(function (_a) { + var failures = _a.failures, results = _a.results, numFailures = _a.numFailures, lastResult = _a.lastResult; + for (var i = 0; i < keys.length; ++i) { + var primKey = results ? results[i] : keys[i]; + var ctx = contexts[i]; + if (primKey == null) { + ctx.onerror && ctx.onerror(failures[i]); + } + else { + ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ? + req.values[i] : + primKey + ); + } + } + return { failures: failures, results: results, numFailures: numFailures, lastResult: lastResult }; + }).catch(function (error) { + contexts.forEach(function (ctx) { return ctx.onerror && ctx.onerror(error); }); + return Promise.reject(error); + }); + }); + } + function deleteRange(req) { + return deleteNextChunk(req.trans, req.range, 10000); + } + function deleteNextChunk(trans, range, limit) { + return downTable.query({ trans: trans, values: false, query: { index: primaryKey, range: range }, limit: limit }) + .then(function (_a) { + var result = _a.result; + return addPutOrDelete({ type: 'delete', keys: result, trans: trans }).then(function (res) { + if (res.numFailures > 0) + return Promise.reject(res.failures[0]); + if (result.length < limit) { + return { failures: [], numFailures: 0, lastResult: undefined }; + } + else { + return deleteNextChunk(trans, __assign(__assign({}, range), { lower: result[result.length - 1], lowerOpen: true }), limit); + } + }); + }); + } + } }); + return tableMiddleware; + } })); } +}; +function getExistingValues(table, req, effectiveKeys) { + return req.type === "add" + ? Promise.resolve([]) + : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: "immutable" }); +} + +function getFromTransactionCache(keys, cache, clone) { + try { + if (!cache) + return null; + if (cache.keys.length < keys.length) + return null; + var result = []; + for (var i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) { + if (cmp(cache.keys[i], keys[j]) !== 0) + continue; + result.push(clone ? deepClone(cache.values[i]) : cache.values[i]); + ++j; + } + return result.length === keys.length ? result : null; + } + catch (_a) { + return null; + } +} +var cacheExistingValuesMiddleware = { + stack: "dbcore", + level: -1, + create: function (core) { + return { + table: function (tableName) { + var table = core.table(tableName); + return __assign(__assign({}, table), { getMany: function (req) { + if (!req.cache) { + return table.getMany(req); + } + var cachedResult = getFromTransactionCache(req.keys, req.trans["_cache"], req.cache === "clone"); + if (cachedResult) { + return DexiePromise.resolve(cachedResult); + } + return table.getMany(req).then(function (res) { + req.trans["_cache"] = { + keys: req.keys, + values: req.cache === "clone" ? deepClone(res) : res, + }; + return res; + }); + }, mutate: function (req) { + if (req.type !== "add") + req.trans["_cache"] = null; + return table.mutate(req); + } }); + }, + }; + }, +}; + +function isCachableContext(ctx, table) { + return (ctx.trans.mode === 'readonly' && + !!ctx.subscr && + !ctx.trans.explicit && + ctx.trans.db._options.cache !== 'disabled' && + !table.schema.primaryKey.outbound); +} + +function isCachableRequest(type, req) { + switch (type) { + case 'query': + return req.values && !req.unique; + case 'get': + return false; + case 'getMany': + return false; + case 'count': + return false; + case 'openCursor': + return false; + } +} + +var observabilityMiddleware = { + stack: "dbcore", + level: 0, + name: "Observability", + create: function (core) { + var dbName = core.schema.name; + var FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY); + return __assign(__assign({}, core), { transaction: function (stores, mode, options) { + if (PSD.subscr && mode !== 'readonly') { + throw new exceptions.ReadOnly("Readwrite transaction in liveQuery context. Querier source: ".concat(PSD.querier)); + } + return core.transaction(stores, mode, options); + }, table: function (tableName) { + var table = core.table(tableName); + var schema = table.schema; + var primaryKey = schema.primaryKey, indexes = schema.indexes; + var extractKey = primaryKey.extractKey, outbound = primaryKey.outbound; + var indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(function (index) { return index.compound && index.keyPath.includes(primaryKey.keyPath); }); + var tableClone = __assign(__assign({}, table), { mutate: function (req) { + var trans = req.trans; + var mutatedParts = req.mutatedParts || (req.mutatedParts = {}); + var getRangeSet = function (indexName) { + var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); + return (mutatedParts[part] || + (mutatedParts[part] = new RangeSet())); + }; + var pkRangeSet = getRangeSet(""); + var delsRangeSet = getRangeSet(":dels"); + var type = req.type; + var _a = req.type === "deleteRange" + ? [req.range] + : req.type === "delete" + ? [req.keys] + : req.values.length < 50 + ? [getEffectiveKeys(primaryKey, req).filter(function (id) { return id; }), req.values] + : [], keys = _a[0], newObjs = _a[1]; + var oldCache = req.trans["_cache"]; + if (isArray(keys)) { + pkRangeSet.addKeys(keys); + var oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null; + if (!oldObjs) { + delsRangeSet.addKeys(keys); + } + if (oldObjs || newObjs) { + trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs); + } + } + else if (keys) { + var range = { from: keys.lower, to: keys.upper }; + delsRangeSet.add(range); + pkRangeSet.add(range); + } + else { + pkRangeSet.add(FULL_RANGE); + delsRangeSet.add(FULL_RANGE); + schema.indexes.forEach(function (idx) { return getRangeSet(idx.name).add(FULL_RANGE); }); + } + return table.mutate(req).then(function (res) { + if (keys && (req.type === 'add' || req.type === 'put')) { + pkRangeSet.addKeys(res.results); + if (indexesWithAutoIncPK) { + indexesWithAutoIncPK.forEach(function (idx) { + var idxVals = req.values.map(function (v) { return idx.extractKey(v); }); + var pkPos = idx.keyPath.findIndex(function (prop) { return prop === primaryKey.keyPath; }); + res.results.forEach(function (pk) { return idxVals[pkPos] = pk; }); + getRangeSet(idx.name).addKeys(idxVals); + }); + } + } + trans.mutatedParts = extendObservabilitySet(trans.mutatedParts || {}, mutatedParts); + return res; + }); + } }); + var getRange = function (_a) { + var _b, _c; + var _d = _a.query, index = _d.index, range = _d.range; + return [ + index, + new RangeSet((_b = range.lower) !== null && _b !== void 0 ? _b : core.MIN_KEY, (_c = range.upper) !== null && _c !== void 0 ? _c : core.MAX_KEY), + ]; + }; + var readSubscribers = { + get: function (req) { return [primaryKey, new RangeSet(req.key)]; }, + getMany: function (req) { return [primaryKey, new RangeSet().addKeys(req.keys)]; }, + count: getRange, + query: getRange, + openCursor: getRange, + }; + keys(readSubscribers).forEach(function (method) { + tableClone[method] = function (req) { + var subscr = PSD.subscr; + var isLiveQuery = !!subscr; + var cachable = isCachableContext(PSD, table) && isCachableRequest(method, req); + var obsSet = cachable + ? req.obsSet = {} + : subscr; + if (isLiveQuery) { + var getRangeSet = function (indexName) { + var part = "idb://".concat(dbName, "/").concat(tableName, "/").concat(indexName); + return (obsSet[part] || + (obsSet[part] = new RangeSet())); + }; + var pkRangeSet_1 = getRangeSet(""); + var delsRangeSet_1 = getRangeSet(":dels"); + var _a = readSubscribers[method](req), queriedIndex = _a[0], queriedRanges = _a[1]; + if (method === 'query' && queriedIndex.isPrimaryKey && !req.values) { + delsRangeSet_1.add(queriedRanges); + } + else { + getRangeSet(queriedIndex.name || "").add(queriedRanges); + } + if (!queriedIndex.isPrimaryKey) { + if (method === "count") { + delsRangeSet_1.add(FULL_RANGE); + } + else { + var keysPromise_1 = method === "query" && + outbound && + req.values && + table.query(__assign(__assign({}, req), { values: false })); + return table[method].apply(this, arguments).then(function (res) { + if (method === "query") { + if (outbound && req.values) { + return keysPromise_1.then(function (_a) { + var resultingKeys = _a.result; + pkRangeSet_1.addKeys(resultingKeys); + return res; + }); + } + var pKeys = req.values + ? res.result.map(extractKey) + : res.result; + if (req.values) { + pkRangeSet_1.addKeys(pKeys); + } + else { + delsRangeSet_1.addKeys(pKeys); + } + } + else if (method === "openCursor") { + var cursor_1 = res; + var wantValues_1 = req.values; + return (cursor_1 && + Object.create(cursor_1, { + key: { + get: function () { + delsRangeSet_1.addKey(cursor_1.primaryKey); + return cursor_1.key; + }, + }, + primaryKey: { + get: function () { + var pkey = cursor_1.primaryKey; + delsRangeSet_1.addKey(pkey); + return pkey; + }, + }, + value: { + get: function () { + wantValues_1 && pkRangeSet_1.addKey(cursor_1.primaryKey); + return cursor_1.value; + }, + }, + })); + } + return res; + }); + } + } + } + return table[method].apply(this, arguments); + }; + }); + return tableClone; + } }); + }, +}; +function trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) { + function addAffectedIndex(ix) { + var rangeSet = getRangeSet(ix.name || ""); + function extractKey(obj) { + return obj != null ? ix.extractKey(obj) : null; + } + var addKeyOrKeys = function (key) { return ix.multiEntry && isArray(key) + ? key.forEach(function (key) { return rangeSet.addKey(key); }) + : rangeSet.addKey(key); }; + (oldObjs || newObjs).forEach(function (_, i) { + var oldKey = oldObjs && extractKey(oldObjs[i]); + var newKey = newObjs && extractKey(newObjs[i]); + if (cmp(oldKey, newKey) !== 0) { + if (oldKey != null) + addKeyOrKeys(oldKey); + if (newKey != null) + addKeyOrKeys(newKey); + } + }); + } + schema.indexes.forEach(addAffectedIndex); +} + +function adjustOptimisticFromFailures(tblCache, req, res) { + if (res.numFailures === 0) + return req; + if (req.type === 'deleteRange') { + return null; + } + var numBulkOps = req.keys + ? req.keys.length + : 'values' in req && req.values + ? req.values.length + : 1; + if (res.numFailures === numBulkOps) { + return null; + } + var clone = __assign({}, req); + if (isArray(clone.keys)) { + clone.keys = clone.keys.filter(function (_, i) { return !(i in res.failures); }); + } + if ('values' in clone && isArray(clone.values)) { + clone.values = clone.values.filter(function (_, i) { return !(i in res.failures); }); + } + return clone; +} + +function isAboveLower(key, range) { + return range.lower === undefined + ? true + : range.lowerOpen + ? cmp(key, range.lower) > 0 + : cmp(key, range.lower) >= 0; +} +function isBelowUpper(key, range) { + return range.upper === undefined + ? true + : range.upperOpen + ? cmp(key, range.upper) < 0 + : cmp(key, range.upper) <= 0; +} +function isWithinRange(key, range) { + return isAboveLower(key, range) && isBelowUpper(key, range); +} + +function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) { + if (!ops || ops.length === 0) + return result; + var index = req.query.index; + var multiEntry = index.multiEntry; + var queryRange = req.query.range; + var primaryKey = table.schema.primaryKey; + var extractPrimKey = primaryKey.extractKey; + var extractIndex = index.extractKey; + var extractLowLevelIndex = (index.lowLevelIndex || index).extractKey; + var finalResult = ops.reduce(function (result, op) { + var modifedResult = result; + var includedValues = op.type === 'add' || op.type === 'put' + ? op.values.filter(function (v) { + var key = extractIndex(v); + return multiEntry && isArray(key) + ? key.some(function (k) { return isWithinRange(k, queryRange); }) + : isWithinRange(key, queryRange); + }).map(function (v) { + v = deepClone(v); + if (immutable) + Object.freeze(v); + return v; + }) + : []; + switch (op.type) { + case 'add': + modifedResult = result.concat(req.values + ? includedValues + : includedValues.map(function (v) { return extractPrimKey(v); })); + break; + case 'put': + var keySet_1 = new RangeSet().addKeys(op.values.map(function (v) { return extractPrimKey(v); })); + modifedResult = result + .filter(function (item) { + var key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keySet_1); + }) + .concat(req.values + ? includedValues + : includedValues.map(function (v) { return extractPrimKey(v); })); + break; + case 'delete': + var keysToDelete_1 = new RangeSet().addKeys(op.keys); + modifedResult = result.filter(function (item) { + var key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keysToDelete_1); + }); + break; + case 'deleteRange': + var range_1 = op.range; + modifedResult = result.filter(function (item) { return !isWithinRange(extractPrimKey(item), range_1); }); + break; + } + return modifedResult; + }, result); + if (finalResult === result) + return result; + finalResult.sort(function (a, b) { + return cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) || + cmp(extractPrimKey(a), extractPrimKey(b)); + }); + if (req.limit && req.limit < Infinity) { + if (finalResult.length > req.limit) { + finalResult.length = req.limit; + } + else if (result.length === req.limit && finalResult.length < req.limit) { + cacheEntry.dirty = true; + } + } + return immutable ? Object.freeze(finalResult) : finalResult; +} + +function areRangesEqual(r1, r2) { + return (cmp(r1.lower, r2.lower) === 0 && + cmp(r1.upper, r2.upper) === 0 && + !!r1.lowerOpen === !!r2.lowerOpen && + !!r1.upperOpen === !!r2.upperOpen); +} + +function compareLowers(lower1, lower2, lowerOpen1, lowerOpen2) { + if (lower1 === undefined) + return lower2 !== undefined ? -1 : 0; + if (lower2 === undefined) + return 1; + var c = cmp(lower1, lower2); + if (c === 0) { + if (lowerOpen1 && lowerOpen2) + return 0; + if (lowerOpen1) + return 1; + if (lowerOpen2) + return -1; + } + return c; +} +function compareUppers(upper1, upper2, upperOpen1, upperOpen2) { + if (upper1 === undefined) + return upper2 !== undefined ? 1 : 0; + if (upper2 === undefined) + return -1; + var c = cmp(upper1, upper2); + if (c === 0) { + if (upperOpen1 && upperOpen2) + return 0; + if (upperOpen1) + return -1; + if (upperOpen2) + return 1; + } + return c; +} +function isSuperRange(r1, r2) { + return (compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 && + compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0); +} + +function findCompatibleQuery(dbName, tableName, type, req) { + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (!tblCache) + return []; + var queries = tblCache.queries[type]; + if (!queries) + return [null, false, tblCache, null]; + var indexName = req.query ? req.query.index.name : null; + var entries = queries[indexName || '']; + if (!entries) + return [null, false, tblCache, null]; + switch (type) { + case 'query': + var equalEntry = entries.find(function (entry) { + return entry.req.limit === req.limit && + entry.req.values === req.values && + areRangesEqual(entry.req.query.range, req.query.range); + }); + if (equalEntry) + return [ + equalEntry, + true, + tblCache, + entries, + ]; + var superEntry = entries.find(function (entry) { + var limit = 'limit' in entry.req ? entry.req.limit : Infinity; + return (limit >= req.limit && + (req.values ? entry.req.values : true) && + isSuperRange(entry.req.query.range, req.query.range)); + }); + return [superEntry, false, tblCache, entries]; + case 'count': + var countQuery = entries.find(function (entry) { + return areRangesEqual(entry.req.query.range, req.query.range); + }); + return [countQuery, !!countQuery, tblCache, entries]; + } +} + +function subscribeToCacheEntry(cacheEntry, container, requery, signal) { + cacheEntry.subscribers.add(requery); + signal.addEventListener("abort", function () { + cacheEntry.subscribers.delete(requery); + if (cacheEntry.subscribers.size === 0) { + enqueForDeletion(cacheEntry, container); + } + }); +} +function enqueForDeletion(cacheEntry, container) { + setTimeout(function () { + if (cacheEntry.subscribers.size === 0) { + delArrayItem(container, cacheEntry); + } + }, 3000); +} + +var cacheMiddleware = { + stack: 'dbcore', + level: 0, + name: 'Cache', + create: function (core) { + var dbName = core.schema.name; + var coreMW = __assign(__assign({}, core), { transaction: function (stores, mode, options) { + var idbtrans = core.transaction(stores, mode, options); + if (mode === 'readwrite') { + var ac_1 = new AbortController(); + var signal = ac_1.signal; + var endTransaction = function (wasCommitted) { return function () { + ac_1.abort(); + if (mode === 'readwrite') { + var affectedSubscribers_1 = new Set(); + for (var _i = 0, stores_1 = stores; _i < stores_1.length; _i++) { + var storeName = stores_1[_i]; + var tblCache = cache["idb://".concat(dbName, "/").concat(storeName)]; + if (tblCache) { + var table = core.table(storeName); + var ops = tblCache.optimisticOps.filter(function (op) { return op.trans === idbtrans; }); + if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) { + for (var _a = 0, _b = Object.values(tblCache.queries.query); _a < _b.length; _a++) { + var entries = _b[_a]; + for (var _c = 0, _d = entries.slice(); _c < _d.length; _c++) { + var entry = _d[_c]; + if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) { + delArrayItem(entries, entry); + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + } + } + } + else if (ops.length > 0) { + tblCache.optimisticOps = tblCache.optimisticOps.filter(function (op) { return op.trans !== idbtrans; }); + for (var _e = 0, _f = Object.values(tblCache.queries.query); _e < _f.length; _e++) { + var entries = _f[_e]; + for (var _g = 0, _h = entries.slice(); _g < _h.length; _g++) { + var entry = _h[_g]; + if (entry.res != null && + idbtrans.mutatedParts +) { + if (wasCommitted && !entry.dirty) { + var freezeResults = Object.isFrozen(entry.res); + var modRes = applyOptimisticOps(entry.res, entry.req, ops, table, entry, freezeResults); + if (entry.dirty) { + delArrayItem(entries, entry); + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + else if (modRes !== entry.res) { + entry.res = modRes; + entry.promise = DexiePromise.resolve({ result: modRes }); + } + } + else { + if (entry.dirty) { + delArrayItem(entries, entry); + } + entry.subscribers.forEach(function (requery) { return affectedSubscribers_1.add(requery); }); + } + } + } + } + } + } + } + affectedSubscribers_1.forEach(function (requery) { return requery(); }); + } + }; }; + idbtrans.addEventListener('abort', endTransaction(false), { + signal: signal, + }); + idbtrans.addEventListener('error', endTransaction(false), { + signal: signal, + }); + idbtrans.addEventListener('complete', endTransaction(true), { + signal: signal, + }); + } + return idbtrans; + }, table: function (tableName) { + var downTable = core.table(tableName); + var primKey = downTable.schema.primaryKey; + var tableMW = __assign(__assign({}, downTable), { mutate: function (req) { + var trans = PSD.trans; + if (primKey.outbound || + trans.db._options.cache === 'disabled' || + trans.explicit + ) { + return downTable.mutate(req); + } + var tblCache = cache["idb://".concat(dbName, "/").concat(tableName)]; + if (!tblCache) + return downTable.mutate(req); + var promise = downTable.mutate(req); + if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(function (key) { return key == null; }))) { + promise.then(function (res) { + var reqWithResolvedKeys = __assign(__assign({}, req), { values: req.values.map(function (value, i) { + var _a; + var valueWithKey = ((_a = primKey.keyPath) === null || _a === void 0 ? void 0 : _a.includes('.')) + ? deepClone(value) + : __assign({}, value); + setByKeyPath(valueWithKey, primKey.keyPath, res.results[i]); + return valueWithKey; + }) }); + var adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res); + tblCache.optimisticOps.push(adjustedReq); + queueMicrotask(function () { return req.mutatedParts && signalSubscribersLazily(req.mutatedParts); }); + }); + } + else { + tblCache.optimisticOps.push(req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + promise.then(function (res) { + if (res.numFailures > 0) { + delArrayItem(tblCache.optimisticOps, req); + var adjustedReq = adjustOptimisticFromFailures(tblCache, req, res); + if (adjustedReq) { + tblCache.optimisticOps.push(adjustedReq); + } + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + } + }); + promise.catch(function () { + delArrayItem(tblCache.optimisticOps, req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + }); + } + return promise; + }, query: function (req) { + var _a; + if (!isCachableContext(PSD, downTable) || !isCachableRequest("query", req)) + return downTable.query(req); + var freezeResults = ((_a = PSD.trans) === null || _a === void 0 ? void 0 : _a.db._options.cache) === 'immutable'; + var _b = PSD, requery = _b.requery, signal = _b.signal; + var _c = findCompatibleQuery(dbName, tableName, 'query', req), cacheEntry = _c[0], exactMatch = _c[1], tblCache = _c[2], container = _c[3]; + if (cacheEntry && exactMatch) { + cacheEntry.obsSet = req.obsSet; + } + else { + var promise = downTable.query(req).then(function (res) { + var result = res.result; + if (cacheEntry) + cacheEntry.res = result; + if (freezeResults) { + for (var i = 0, l = result.length; i < l; ++i) { + Object.freeze(result[i]); + } + Object.freeze(result); + } + else { + res.result = deepClone(result); + } + return res; + }).catch(function (error) { + if (container && cacheEntry) + delArrayItem(container, cacheEntry); + return Promise.reject(error); + }); + cacheEntry = { + obsSet: req.obsSet, + promise: promise, + subscribers: new Set(), + type: 'query', + req: req, + dirty: false, + }; + if (container) { + container.push(cacheEntry); + } + else { + container = [cacheEntry]; + if (!tblCache) { + tblCache = cache["idb://".concat(dbName, "/").concat(tableName)] = { + queries: { + query: {}, + count: {}, + }, + objs: new Map(), + optimisticOps: [], + unsignaledParts: {} + }; + } + tblCache.queries.query[req.query.index.name || ''] = container; + } + } + subscribeToCacheEntry(cacheEntry, container, requery, signal); + return cacheEntry.promise.then(function (res) { + return { + result: applyOptimisticOps(res.result, req, tblCache === null || tblCache === void 0 ? void 0 : tblCache.optimisticOps, downTable, cacheEntry, freezeResults), + }; + }); + } }); + return tableMW; + } }); + return coreMW; + }, +}; + +function vipify(target, vipDb) { + return new Proxy(target, { + get: function (target, prop, receiver) { + if (prop === 'db') + return vipDb; + return Reflect.get(target, prop, receiver); + } + }); +} + +var Dexie$1 = (function () { + function Dexie(name, options) { + var _this = this; + this._middlewares = {}; + this.verno = 0; + var deps = Dexie.dependencies; + this._options = options = __assign({ + addons: Dexie.addons, autoOpen: true, + indexedDB: deps.indexedDB, IDBKeyRange: deps.IDBKeyRange, cache: 'cloned' }, options); + this._deps = { + indexedDB: options.indexedDB, + IDBKeyRange: options.IDBKeyRange + }; + var addons = options.addons; + this._dbSchema = {}; + this._versions = []; + this._storeNames = []; + this._allTables = {}; + this.idbdb = null; + this._novip = this; + var state = { + dbOpenError: null, + isBeingOpened: false, + onReadyBeingFired: null, + openComplete: false, + dbReadyResolve: nop, + dbReadyPromise: null, + cancelOpen: nop, + openCanceller: null, + autoSchema: true, + PR1398_maxLoop: 3, + autoOpen: options.autoOpen, + }; + state.dbReadyPromise = new DexiePromise(function (resolve) { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise(function (_, reject) { + state.cancelOpen = reject; + }); + this._state = state; + this.name = name; + this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) { + return function (subscriber, bSticky) { + Dexie.vip(function () { + var state = _this._state; + if (state.openComplete) { + if (!state.dbOpenError) + DexiePromise.resolve().then(subscriber); + if (bSticky) + subscribe(subscriber); + } + else if (state.onReadyBeingFired) { + state.onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } + else { + subscribe(subscriber); + var db_1 = _this; + if (!bSticky) + subscribe(function unsubscribe() { + db_1.on.ready.unsubscribe(subscriber); + db_1.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.Collection = createCollectionConstructor(this); + this.Table = createTableConstructor(this); + this.Transaction = createTransactionConstructor(this); + this.Version = createVersionConstructor(this); + this.WhereClause = createWhereClauseConstructor(this); + this.on("versionchange", function (ev) { + if (ev.newVersion > 0) + console.warn("Another connection wants to upgrade database '".concat(_this.name, "'. Closing db now to resume the upgrade.")); + else + console.warn("Another connection wants to delete database '".concat(_this.name, "'. Closing db now to resume the delete request.")); + _this.close({ disableAutoOpen: false }); + }); + this.on("blocked", function (ev) { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn("Dexie.delete('".concat(_this.name, "') was blocked")); + else + console.warn("Upgrade '".concat(_this.name, "' blocked by other connection holding version ").concat(ev.oldVersion / 10)); + }); + this._maxKey = getMaxKey(options.IDBKeyRange); + this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) { return new _this.Transaction(mode, storeNames, dbschema, _this._options.chromeTransactionDurability, parentTransaction); }; + this._fireOnBlocked = function (ev) { + _this.on("blocked").fire(ev); + connections + .filter(function (c) { return c.name === _this.name && c !== _this && !c._state.vcFired; }) + .map(function (c) { return c.on("versionchange").fire(ev); }); + }; + this.use(cacheExistingValuesMiddleware); + this.use(cacheMiddleware); + this.use(observabilityMiddleware); + this.use(virtualIndexMiddleware); + this.use(hooksMiddleware); + var vipDB = new Proxy(this, { + get: function (_, prop, receiver) { + if (prop === '_vip') + return true; + if (prop === 'table') + return function (tableName) { return vipify(_this.table(tableName), vipDB); }; + var rv = Reflect.get(_, prop, receiver); + if (rv instanceof Table) + return vipify(rv, vipDB); + if (prop === 'tables') + return rv.map(function (t) { return vipify(t, vipDB); }); + if (prop === '_createTransaction') + return function () { + var tx = rv.apply(this, arguments); + return vipify(tx, vipDB); + }; + return rv; + } + }); + this.vip = vipDB; + addons.forEach(function (addon) { return addon(_this); }); + } + Dexie.prototype.version = function (versionNumber) { + if (isNaN(versionNumber) || versionNumber < 0.1) + throw new exceptions.Type("Given version is not a positive number"); + versionNumber = Math.round(versionNumber * 10) / 10; + if (this.idbdb || this._state.isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + var versions = this._versions; + var versionInstance = versions.filter(function (v) { return v._cfg.version === versionNumber; })[0]; + if (versionInstance) + return versionInstance; + versionInstance = new this.Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + versionInstance.stores({}); + this._state.autoSchema = false; + return versionInstance; + }; + Dexie.prototype._whenReady = function (fn) { + var _this = this; + return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise(function (resolve, reject) { + if (_this._state.openComplete) { + return reject(new exceptions.DatabaseClosed(_this._state.dbOpenError)); + } + if (!_this._state.isBeingOpened) { + if (!_this._state.autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + _this.open().catch(nop); + } + _this._state.dbReadyPromise.then(resolve, reject); + }).then(fn); + }; + Dexie.prototype.use = function (_a) { + var stack = _a.stack, create = _a.create, level = _a.level, name = _a.name; + if (name) + this.unuse({ stack: stack, name: name }); + var middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); + middlewares.push({ stack: stack, create: create, level: level == null ? 10 : level, name: name }); + middlewares.sort(function (a, b) { return a.level - b.level; }); + return this; + }; + Dexie.prototype.unuse = function (_a) { + var stack = _a.stack, name = _a.name, create = _a.create; + if (stack && this._middlewares[stack]) { + this._middlewares[stack] = this._middlewares[stack].filter(function (mw) { + return create ? mw.create !== create : + name ? mw.name !== name : + false; + }); + } + return this; + }; + Dexie.prototype.open = function () { + var _this = this; + return usePSD(globalPSD, + function () { return dexieOpen(_this); }); + }; + Dexie.prototype._close = function () { + var state = this._state; + var idx = connections.indexOf(this); + if (idx >= 0) + connections.splice(idx, 1); + if (this.idbdb) { + try { + this.idbdb.close(); + } + catch (e) { } + this.idbdb = null; + } + if (!state.isBeingOpened) { + state.dbReadyPromise = new DexiePromise(function (resolve) { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise(function (_, reject) { + state.cancelOpen = reject; + }); + } + }; + Dexie.prototype.close = function (_a) { + var _b = _a === void 0 ? { disableAutoOpen: true } : _a, disableAutoOpen = _b.disableAutoOpen; + var state = this._state; + if (disableAutoOpen) { + if (state.isBeingOpened) { + state.cancelOpen(new exceptions.DatabaseClosed()); + } + this._close(); + state.autoOpen = false; + state.dbOpenError = new exceptions.DatabaseClosed(); + } + else { + this._close(); + state.autoOpen = this._options.autoOpen || + state.isBeingOpened; + state.openComplete = false; + state.dbOpenError = null; + } + }; + Dexie.prototype.delete = function (closeOptions) { + var _this = this; + if (closeOptions === void 0) { closeOptions = { disableAutoOpen: true }; } + var hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; + var state = this._state; + return new DexiePromise(function (resolve, reject) { + var doDelete = function () { + _this.close(closeOptions); + var req = _this._deps.indexedDB.deleteDatabase(_this.name); + req.onsuccess = wrap(function () { + _onDatabaseDeleted(_this._deps, _this.name); + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = _this._fireOnBlocked; + }; + if (hasInvalidArguments) + throw new exceptions.InvalidArgument("Invalid closeOptions argument to db.delete()"); + if (state.isBeingOpened) { + state.dbReadyPromise.then(doDelete); + } + else { + doDelete(); + } + }); + }; + Dexie.prototype.backendDB = function () { + return this.idbdb; + }; + Dexie.prototype.isOpen = function () { + return this.idbdb !== null; + }; + Dexie.prototype.hasBeenClosed = function () { + var dbOpenError = this._state.dbOpenError; + return dbOpenError && (dbOpenError.name === 'DatabaseClosed'); + }; + Dexie.prototype.hasFailed = function () { + return this._state.dbOpenError !== null; + }; + Dexie.prototype.dynamicallyOpened = function () { + return this._state.autoSchema; + }; + Object.defineProperty(Dexie.prototype, "tables", { + get: function () { + var _this = this; + return keys(this._allTables).map(function (name) { return _this._allTables[name]; }); + }, + enumerable: false, + configurable: true + }); + Dexie.prototype.transaction = function () { + var args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + }; + Dexie.prototype._transaction = function (mode, tables, scopeFunc) { + var _this = this; + var parentTransaction = PSD.trans; + if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) + parentTransaction = null; + var onlyIfCompatible = mode.indexOf('?') !== -1; + mode = mode.replace('!', '').replace('?', ''); + var idbMode, storeNames; + try { + storeNames = tables.map(function (table) { + var storeName = table instanceof _this.Table ? table.name : table; + if (typeof storeName !== 'string') + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + if (mode == "r" || mode === READONLY) + idbMode = READONLY; + else if (mode == "rw" || mode == READWRITE) + idbMode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + if (parentTransaction.mode === READONLY && idbMode === READWRITE) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach(function (storeName) { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Table " + storeName + + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + parentTransaction = null; + } + } + } + catch (e) { + return parentTransaction ? + parentTransaction._promise(null, function (_, reject) { reject(e); }) : + rejection(e); + } + var enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); + return (parentTransaction ? + parentTransaction._promise(idbMode, enterTransaction, "lock") : + PSD.trans ? + usePSD(PSD.transless, function () { return _this._whenReady(enterTransaction); }) : + this._whenReady(enterTransaction)); + }; + Dexie.prototype.table = function (tableName) { + if (!hasOwn(this._allTables, tableName)) { + throw new exceptions.InvalidTable("Table ".concat(tableName, " does not exist")); + } + return this._allTables[tableName]; + }; + return Dexie; +}()); + +var symbolObservable = typeof Symbol !== "undefined" && "observable" in Symbol + ? Symbol.observable + : "@@observable"; +var Observable = (function () { + function Observable(subscribe) { + this._subscribe = subscribe; + } + Observable.prototype.subscribe = function (x, error, complete) { + return this._subscribe(!x || typeof x === "function" ? { next: x, error: error, complete: complete } : x); + }; + Observable.prototype[symbolObservable] = function () { + return this; + }; + return Observable; +}()); + +var domDeps; +try { + domDeps = { + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; +} +catch (e) { + domDeps = { indexedDB: null, IDBKeyRange: null }; +} + +function liveQuery(querier) { + var hasValue = false; + var currentValue; + var observable = new Observable(function (observer) { + var scopeFuncIsAsync = isAsyncFunction(querier); + function execute(ctx) { + var wasRootExec = beginMicroTickScope(); + try { + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + var rv = newScope(querier, ctx); + if (scopeFuncIsAsync) { + rv = rv.finally(decrementExpectedAwaits); + } + return rv; + } + finally { + wasRootExec && endMicroTickScope(); + } + } + var closed = false; + var abortController; + var accumMuts = {}; + var currentObs = {}; + var subscription = { + get closed() { + return closed; + }, + unsubscribe: function () { + if (closed) + return; + closed = true; + if (abortController) + abortController.abort(); + if (startedListening) + globalEvents.storagemutated.unsubscribe(mutationListener); + }, + }; + observer.start && observer.start(subscription); + var startedListening = false; + var doQuery = function () { return execInGlobalContext(_doQuery); }; + function shouldNotify() { + return obsSetsOverlap(currentObs, accumMuts); + } + var mutationListener = function (parts) { + extendObservabilitySet(accumMuts, parts); + if (shouldNotify()) { + doQuery(); + } + }; + var _doQuery = function () { + if (closed || + !domDeps.indexedDB) + { + return; + } + accumMuts = {}; + var subscr = {}; + if (abortController) + abortController.abort(); + abortController = new AbortController(); + var ctx = { + subscr: subscr, + signal: abortController.signal, + requery: doQuery, + querier: querier, + trans: null + }; + var ret = execute(ctx); + Promise.resolve(ret).then(function (result) { + hasValue = true; + currentValue = result; + if (closed || ctx.signal.aborted) { + return; + } + accumMuts = {}; + currentObs = subscr; + if (!objectIsEmpty(currentObs) && !startedListening) { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener); + startedListening = true; + } + execInGlobalContext(function () { return !closed && observer.next && observer.next(result); }); + }, function (err) { + hasValue = false; + if (!['DatabaseClosedError', 'AbortError'].includes(err === null || err === void 0 ? void 0 : err.name)) { + if (!closed) + execInGlobalContext(function () { + if (closed) + return; + observer.error && observer.error(err); + }); + } + }); + }; + setTimeout(doQuery, 0); + return subscription; + }); + observable.hasValue = function () { return hasValue; }; + observable.getValue = function () { return currentValue; }; + return observable; +} + +var Dexie = Dexie$1; +props(Dexie, __assign(__assign({}, fullNameExceptions), { + delete: function (databaseName) { + var db = new Dexie(databaseName, { addons: [] }); + return db.delete(); + }, + exists: function (name) { + return new Dexie(name, { addons: [] }).open().then(function (db) { + db.close(); + return true; + }).catch('NoSuchDatabaseError', function () { return false; }); + }, + getDatabaseNames: function (cb) { + try { + return getDatabaseNames(Dexie.dependencies).then(cb); + } + catch (_a) { + return rejection(new exceptions.MissingAPI()); + } + }, + defineClass: function () { + function Class(content) { + extend(this, content); + } + return Class; + }, ignoreTransaction: function (scopeFunc) { + return PSD.trans ? + usePSD(PSD.transless, scopeFunc) : + scopeFunc(); + }, vip: vip, async: function (generatorFn) { + return function () { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }; + }, spawn: function (generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }, + currentTransaction: { + get: function () { return PSD.trans || null; } + }, waitFor: function (promiseOrFunction, optionalTimeout) { + var promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ? + Dexie.ignoreTransaction(promiseOrFunction) : + promiseOrFunction) + .timeout(optionalTimeout || 60000); + return PSD.trans ? + PSD.trans.waitFor(promise) : + promise; + }, + Promise: DexiePromise, + debug: { + get: function () { return debug; }, + set: function (value) { + setDebug(value); + } + }, + derive: derive, extend: extend, props: props, override: override, + Events: Events, on: globalEvents, liveQuery: liveQuery, extendObservabilitySet: extendObservabilitySet, + getByKeyPath: getByKeyPath, setByKeyPath: setByKeyPath, delByKeyPath: delByKeyPath, shallowClone: shallowClone, deepClone: deepClone, getObjectDiff: getObjectDiff, cmp: cmp, asap: asap$1, + minKey: minKey, + addons: [], + connections: connections, + errnames: errnames, + dependencies: domDeps, cache: cache, + semVer: DEXIE_VERSION, version: DEXIE_VERSION.split('.') + .map(function (n) { return parseInt(n); }) + .reduce(function (p, c, i) { return p + (c / Math.pow(10, i * 2)); }) })); +Dexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange); + +if (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function (updatedParts) { + if (!propagatingLocally) { + var event_1; + event_1 = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, { + detail: updatedParts + }); + propagatingLocally = true; + dispatchEvent(event_1); + propagatingLocally = false; + } + }); + addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, function (_a) { + var detail = _a.detail; + if (!propagatingLocally) { + propagateLocally(detail); + } + }); +} +function propagateLocally(updateParts) { + var wasMe = propagatingLocally; + try { + propagatingLocally = true; + globalEvents.storagemutated.fire(updateParts); + signalSubscribersNow(updateParts, true); + } + finally { + propagatingLocally = wasMe; + } +} +var propagatingLocally = false; + +var bc; +var createBC = function () { }; +if (typeof BroadcastChannel !== 'undefined') { + createBC = function () { + bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME); + bc.onmessage = function (ev) { return ev.data && propagateLocally(ev.data); }; + }; + createBC(); + if (typeof bc.unref === 'function') { + bc.unref(); + } + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, function (changedParts) { + if (!propagatingLocally) { + bc.postMessage(changedParts); + } + }); +} + +if (typeof addEventListener !== 'undefined') { + addEventListener('pagehide', function (event) { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pagehide'); + bc === null || bc === void 0 ? void 0 : bc.close(); + for (var _i = 0, connections_1 = connections; _i < connections_1.length; _i++) { + var db = connections_1[_i]; + db.close({ disableAutoOpen: false }); + } + } + }); + addEventListener('pageshow', function (event) { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pageshow'); + createBC(); + propagateLocally({ all: new RangeSet(-Infinity, [[]]) }); + } + }); +} + +function add(value) { + return new PropModification({ add: value }); +} + +function remove(value) { + return new PropModification({ remove: value }); +} + +function replacePrefix(a, b) { + return new PropModification({ replacePrefix: [a, b] }); +} + +DexiePromise.rejectionMapper = mapError; +setDebug(debug); + +export { Dexie$1 as Dexie, Entity, PropModSymbol, PropModification, RangeSet, add, cmp, Dexie$1 as default, liveQuery, mergeRanges, rangesOverlap, remove, replacePrefix }; +//# sourceMappingURL=dexie.mjs.map diff --git a/src/dexie/dist/dexie.mjs.map b/src/dexie/dist/dexie.mjs.map new file mode 100644 index 000000000..ad2b2acf2 --- /dev/null +++ b/src/dexie/dist/dexie.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"dexie.mjs","sources":["../node_modules/.pnpm/tslib@2.3.1/node_modules/tslib/tslib.es6.js","../src/globals/global.ts","../src/functions/utils.ts","../src/errors/errors.js","../src/functions/chaining-functions.js","../src/helpers/debug.ts","../src/helpers/promise.js","../src/functions/temp-transaction.ts","../src/globals/constants.ts","../src/functions/combine.ts","../src/dbcore/keyrange.ts","../src/functions/workaround-undefined-primkey.ts","../src/classes/entity/Entity.ts","../src/functions/cmp.ts","../src/classes/table/table.ts","../src/helpers/Events.js","../src/functions/make-class-constructor.ts","../src/classes/table/table-constructor.ts","../src/classes/collection/collection-helpers.ts","../src/helpers/prop-modification.ts","../src/classes/collection/collection.ts","../src/classes/collection/collection-constructor.ts","../src/functions/compare-functions.ts","../src/classes/where-clause/where-clause-helpers.ts","../src/classes/where-clause/where-clause.ts","../src/classes/where-clause/where-clause-constructor.ts","../src/functions/event-wrappers.ts","../src/globals/global-events.ts","../src/classes/transaction/transaction.ts","../src/classes/transaction/transaction-constructor.ts","../src/helpers/index-spec.ts","../src/helpers/table-schema.ts","../src/functions/quirks.ts","../src/dbcore/get-key-extractor.ts","../src/dbcore/dbcore-indexeddb.ts","../src/classes/dexie/generate-middleware-stacks.ts","../src/classes/version/schema-helpers.ts","../src/classes/version/version.ts","../src/classes/version/version-constructor.ts","../src/helpers/database-enumerator.ts","../src/classes/dexie/vip.ts","../node_modules/.pnpm/safari-14-idb-fix@3.0.0/node_modules/safari-14-idb-fix/dist/index.js","../src/helpers/rangeset.ts","../src/live-query/extend-observability-set.ts","../src/live-query/obs-sets-overlap.ts","../src/live-query/cache/cache.ts","../src/live-query/cache/signalSubscribers.ts","../src/classes/dexie/dexie-open.ts","../src/helpers/yield-support.ts","../src/classes/dexie/transaction-helpers.ts","../src/dbcore/virtual-index-middleware.ts","../src/functions/get-object-diff.ts","../src/dbcore/get-effective-keys.ts","../src/hooks/hooks-middleware.ts","../src/dbcore/cache-existing-values-middleware.ts","../src/live-query/cache/is-cachable-context.ts","../src/live-query/cache/is-cachable-request.ts","../src/live-query/observability-middleware.ts","../src/live-query/cache/adjust-optimistic-request-from-failures.ts","../src/live-query/cache/is-within-range.ts","../src/live-query/cache/apply-optimistic-ops.ts","../src/live-query/cache/are-ranges-equal.ts","../src/live-query/cache/is-super-range.ts","../src/live-query/cache/find-compatible-query.ts","../src/live-query/cache/subscribe-cachentry.ts","../src/live-query/cache/cache-middleware.ts","../src/helpers/vipify.ts","../src/classes/dexie/dexie.ts","../src/classes/observable/observable.ts","../src/classes/dexie/dexie-dom-dependencies.ts","../src/live-query/live-query.ts","../src/classes/dexie/dexie-static-props.ts","../src/live-query/propagate-locally.ts","../src/live-query/enable-broadcast.ts","../src/support-bfcache.ts","../src/functions/propmods/add.ts","../src/functions/propmods/remove.ts","../src/functions/propmods/replace-prefix.ts","../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n if (typeof b !== \"function\" && b !== null)\r\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });\r\n}) : (function(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n});\r\n\r\nexport function __exportStar(m, o) {\r\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\n/** @deprecated */\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n}\r\n\r\nexport function __spreadArray(to, from, pack) {\r\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\r\n if (ar || !(i in from)) {\r\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\r\n ar[i] = from[i];\r\n }\r\n }\r\n return to.concat(ar || Array.prototype.slice.call(from));\r\n}\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nvar __setModuleDefault = Object.create ? (function(o, v) {\r\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\r\n}) : function(o, v) {\r\n o[\"default\"] = v;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (k !== \"default\" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);\r\n __setModuleDefault(result, mod);\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\r\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\r\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\r\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\r\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\r\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\r\n}\r\n","declare var global;\nexport const _global: any =\n typeof globalThis !== 'undefined' ? globalThis :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window :\n global;\n","import { _global } from \"../globals/global\";\nexport const keys = Object.keys;\nexport const isArray = Array.isArray;\nif (typeof Promise !== 'undefined' && !_global.Promise){\n // In jsdom, this it can be the case that Promise is not put on the global object.\n // If so, we need to patch the global object for the rest of the code to work as expected.\n // Other dexie code expects Promise to be on the global object (like normal browser environments)\n _global.Promise = Promise;\n}\nexport { _global }\n\nexport function extend(obj: T, extension: X): T & X {\n if (typeof extension !== 'object') return obj as T & X;\n keys(extension).forEach(function (key) {\n obj[key] = extension[key];\n });\n return obj as T & X;\n}\n\nexport const getProto = Object.getPrototypeOf;\nexport const _hasOwn = {}.hasOwnProperty;\nexport function hasOwn(obj, prop) {\n return _hasOwn.call(obj, prop);\n}\n\nexport function props (proto, extension) {\n if (typeof extension === 'function') extension = extension(getProto(proto));\n (typeof Reflect === \"undefined\" ? keys : Reflect.ownKeys)(extension).forEach(key => {\n setProp(proto, key, extension[key]);\n });\n}\n\nexport const defineProperty = Object.defineProperty;\n\nexport function setProp(obj, prop, functionOrGetSet, options?) {\n defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ?\n {get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true} :\n {value: functionOrGetSet, configurable: true, writable: true}, options));\n}\n\nexport function derive(Child) {\n return {\n from: function (Parent) {\n Child.prototype = Object.create(Parent.prototype);\n setProp(Child.prototype, \"constructor\", Child);\n return {\n extend: props.bind(null, Child.prototype)\n };\n }\n };\n}\n\nexport const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nexport function getPropertyDescriptor(obj, prop) {\n const pd = getOwnPropertyDescriptor(obj, prop);\n let proto;\n return pd || (proto = getProto(obj)) && getPropertyDescriptor (proto, prop);\n}\n\nconst _slice = [].slice;\nexport function slice(args, start?, end?) {\n return _slice.call(args, start, end);\n}\n\nexport function override(origFunc, overridedFactory) {\n return overridedFactory(origFunc);\n}\n\nexport function assert (b) {\n if (!b) throw new Error(\"Assertion Failed\");\n}\n\nexport function asap(fn) {\n // @ts-ignore\n if (_global.setImmediate) setImmediate(fn); else setTimeout(fn, 0);\n}\n\nexport function getUniqueArray(a) {\n return a.filter((value, index, self) => self.indexOf(value) === index);\n}\n\n/** Generate an object (hash map) based on given array.\n * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to\n * instert on the resulting object for each item in the array. If this function returns a falsy value, the\n * current item wont affect the resulting object.\n */\nexport function arrayToObject (array: T[], extractor: (x:T, idx: number)=>[string, R]): {[name: string]: R} {\n return array.reduce((result, item, i) => {\n var nameAndValue = extractor(item, i);\n if (nameAndValue) result[nameAndValue[0]] = nameAndValue[1];\n return result;\n }, {});\n}\n\nexport function trycatcher(fn, reject) {\n return function () {\n try {\n fn.apply(this, arguments);\n } catch (e) {\n reject(e);\n }\n };\n}\n\nexport function tryCatch(fn: (...args: any[])=>void, onerror, args?) : void {\n try {\n fn.apply(null, args);\n } catch (ex) {\n onerror && onerror(ex);\n }\n}\n\nexport function getByKeyPath(obj, keyPath) {\n // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path\n if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) return obj[keyPath]; // This line is moved from last to first for optimization purpose.\n if (!keyPath) return obj;\n if (typeof keyPath !== 'string') {\n var rv = [];\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n var val = getByKeyPath(obj, keyPath[i]);\n rv.push(val);\n }\n return rv;\n }\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var innerObj = obj[keyPath.substr(0, period)];\n return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n }\n return undefined;\n}\n\nexport function setByKeyPath(obj, keyPath, value) {\n if (!obj || keyPath === undefined) return;\n if ('isFrozen' in Object && Object.isFrozen(obj)) return;\n if (typeof keyPath !== 'string' && 'length' in keyPath) {\n assert(typeof value !== 'string' && 'length' in value);\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n setByKeyPath(obj, keyPath[i], value[i]);\n }\n } else {\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var currentKeyPath = keyPath.substr(0, period);\n var remainingKeyPath = keyPath.substr(period + 1);\n if (remainingKeyPath === \"\")\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) obj.splice(currentKeyPath, 1);\n else delete obj[currentKeyPath];\n } else obj[currentKeyPath] = value;\n else {\n var innerObj = obj[currentKeyPath];\n if (!innerObj || !hasOwn(obj, currentKeyPath)) innerObj = (obj[currentKeyPath] = {});\n setByKeyPath(innerObj, remainingKeyPath, value);\n }\n } else {\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(keyPath))) obj.splice(keyPath, 1);\n else delete obj[keyPath];\n } else obj[keyPath] = value;\n }\n }\n}\n\nexport function delByKeyPath(obj, keyPath) {\n if (typeof keyPath === 'string')\n setByKeyPath(obj, keyPath, undefined);\n else if ('length' in keyPath)\n [].map.call(keyPath, function(kp) {\n setByKeyPath(obj, kp, undefined);\n });\n}\n\nexport function shallowClone(obj) {\n var rv = {};\n for (var m in obj) {\n if (hasOwn(obj, m)) rv[m] = obj[m];\n }\n return rv;\n}\n\nconst concat = [].concat;\nexport function flatten (a: (T | T[])[]) : T[] {\n return concat.apply([], a);\n}\n\n//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\nconst intrinsicTypeNames =\n \"BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey\"\n .split(',').concat(\n flatten([8,16,32,64].map(num=>[\"Int\",\"Uint\",\"Float\"].map(t=>t+num+\"Array\")))\n ).filter(t=>_global[t]);\nconst intrinsicTypes = new Set(intrinsicTypeNames.map(t=>_global[t]));\n\n/** Deep clone a simple object tree.\n * \n * Copies object tree deeply, but does not deep-copy arrays,\n * typed arrays, Dates or other intrinsic types.\n * \n * Does not check for cyclic references.\n * \n * This function is 6 times faster than structuredClone() on chromium 111.\n * \n * This function can safely be used for cloning ObservabilitySets and RangeSets.\n * \n * @param o Object to clone\n * @returns Cloned object\n */\nexport function cloneSimpleObjectTree(o: T): T {\n const rv = {} as T;\n for (const k in o) if (hasOwn(o, k)) {\n const v = o[k];\n rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v);\n }\n return rv;\n}\n\nexport function objectIsEmpty(o: object) {\n for (const k in o) if (hasOwn(o, k)) return false;\n return true;\n}\n\nlet circularRefs: null | WeakMap = null;\n\n/** Deep clone an object or array.\n * \n * \n * @param any \n * @returns \n */\nexport function deepClone(any: T): T {\n circularRefs = new WeakMap();\n const rv = innerDeepClone(any);\n circularRefs = null;\n return rv;\n}\n\nfunction innerDeepClone(x: T): T {\n if (!x || typeof x !== 'object') return x;\n let rv = circularRefs.get(x); // Resolve circular references\n if (rv) return rv;\n if (isArray(x)) {\n rv = [];\n circularRefs.set(x, rv);\n for (var i = 0, l = x.length; i < l; ++i) {\n rv.push(innerDeepClone(x[i]));\n }\n } else if (intrinsicTypes.has(x.constructor)) {\n // For performance, we're less strict than structuredClone - we're only\n // cloning arrays and custom objects.\n // Typed arrays, Dates etc are not cloned.\n rv = x;\n } else {\n // We're nicer to custom classes than what structuredClone() is -\n // we preserve the proto of each object.\n const proto = getProto(x);\n rv = proto === Object.prototype ? {} : Object.create(proto);\n circularRefs.set(x, rv);\n for (var prop in x) {\n if (hasOwn(x, prop)) {\n rv[prop] = innerDeepClone(x[prop]);\n }\n }\n }\n return rv;\n}\n\nconst {toString} = {};\nexport function toStringTag(o: Object) {\n return toString.call(o).slice(8, -1);\n}\n\n// If first argument is iterable or array-like, return it as an array\nexport const iteratorSymbol = typeof Symbol !== 'undefined' ?\n Symbol.iterator :\n '@@iterator';\nexport const getIteratorOf = typeof iteratorSymbol === \"symbol\" ? function(x) {\n var i;\n return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nexport const asyncIteratorSymbol = typeof Symbol !== 'undefined'\n ? Symbol.asyncIterator || Symbol.for(\"Symbol.asyncIterator\")\n : '@asyncIterator';\n\nexport function delArrayItem(a: any[], x: any) {\n const i = a.indexOf(x);\n if (i >= 0) a.splice(i, 1);\n return i >= 0;\n}\n\nexport const NO_CHAR_ARRAY = {};\n// Takes one or several arguments and returns an array based on the following criteras:\n// * If several arguments provided, return arguments converted to an array in a way that\n// still allows javascript engine to optimize the code.\n// * If single argument is an array, return a clone of it.\n// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special\n// case to the two bullets below.\n// * If single argument is an iterable, convert it to an array and return the resulting array.\n// * If single argument is array-like (has length of type number), convert it to an array.\nexport function getArrayOf (arrayLike) {\n var i, a, x, it;\n if (arguments.length === 1) {\n if (isArray(arrayLike)) return arrayLike.slice();\n if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') return [arrayLike];\n if ((it = getIteratorOf(arrayLike))) {\n a = [];\n while ((x = it.next()), !x.done) a.push(x.value);\n return a;\n }\n if (arrayLike == null) return [arrayLike];\n i = arrayLike.length;\n if (typeof i === 'number') {\n a = new Array(i);\n while (i--) a[i] = arrayLike[i];\n return a;\n }\n return [arrayLike];\n }\n i = arguments.length;\n a = new Array(i);\n while (i--) a[i] = arguments[i];\n return a;\n}\nexport const isAsyncFunction = typeof Symbol !== 'undefined'\n ? (fn: Function) => fn[Symbol.toStringTag] === 'AsyncFunction'\n : ()=>false;\n","import { derive, setProp } from '../functions/utils';\n\nvar dexieErrorNames = [\n 'Modify',\n 'Bulk',\n 'OpenFailed',\n 'VersionChange',\n 'Schema',\n 'Upgrade',\n 'InvalidTable',\n 'MissingAPI',\n 'NoSuchDatabase',\n 'InvalidArgument',\n 'SubTransaction',\n 'Unsupported',\n 'Internal',\n 'DatabaseClosed',\n 'PrematureCommit',\n 'ForeignAwait'\n];\n\nvar idbDomErrorNames = [\n 'Unknown',\n 'Constraint',\n 'Data',\n 'TransactionInactive',\n 'ReadOnly',\n 'Version',\n 'NotFound',\n 'InvalidState',\n 'InvalidAccess',\n 'Abort',\n 'Timeout',\n 'QuotaExceeded',\n 'Syntax',\n 'DataClone'\n];\n\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\n\nvar defaultTexts = {\n VersionChanged: \"Database version changed by other database connection\",\n DatabaseClosed: \"Database has been closed\",\n Abort: \"Transaction aborted\",\n TransactionInactive: \"Transaction has already completed or failed\",\n MissingAPI: \"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb\"\n};\n\n//\n// DexieError - base class of all out exceptions.\n//\nexport function DexieError (name, msg) {\n // Reason we don't use ES6 classes is because:\n // 1. It bloats transpiled code and increases size of minified code.\n // 2. It doesn't give us much in this case.\n // 3. It would require sub classes to call super(), which\n // is not needed when deriving from Error.\n this.name = name;\n this.message = msg;\n}\n\nderive(DexieError).from(Error).extend({\n toString: function(){ return this.name + \": \" + this.message; }\n});\n\nfunction getMultiErrorMessage (msg, failures) {\n return msg + \". Errors: \" + Object.keys(failures)\n .map(key=>failures[key].toString())\n .filter((v,i,s)=>s.indexOf(v) === i) // Only unique error strings\n .join('\\n');\n}\n\n//\n// ModifyError - thrown in Collection.modify()\n// Specific constructor because it contains members failures and failedKeys.\n//\nexport function ModifyError (msg, failures, successCount, failedKeys) {\n this.failures = failures;\n this.failedKeys = failedKeys;\n this.successCount = successCount;\n this.message = getMultiErrorMessage(msg, failures);\n}\nderive(ModifyError).from(DexieError);\n\nexport function BulkError (msg, failures) {\n this.name = \"BulkError\";\n this.failures = Object.keys(failures).map(pos => failures[pos]);\n this.failuresByPos = failures;\n this.message = getMultiErrorMessage(msg, this.failures);\n}\nderive(BulkError).from(DexieError);\n\n//\n//\n// Dynamically generate error names and exception classes based\n// on the names in errorList.\n//\n//\n\n// Map of {ErrorName -> ErrorName + \"Error\"}\nexport var errnames = errorList.reduce((obj,name)=>(obj[name]=name+\"Error\",obj),{});\n\n// Need an alias for DexieError because we're gonna create subclasses with the same name.\nconst BaseException = DexieError;\n// Map of {ErrorName -> exception constructor}\nexport var exceptions = errorList.reduce((obj,name)=>{\n // Let the name be \"DexieError\" because this name may\n // be shown in call stack and when debugging. DexieError is\n // the most true name because it derives from DexieError,\n // and we cannot change Function.name programatically without\n // dynamically create a Function object, which would be considered\n // 'eval-evil'.\n var fullName = name + \"Error\";\n function DexieError (msgOrInner, inner){\n this.name = fullName;\n if (!msgOrInner) {\n this.message = defaultTexts[name] || fullName;\n this.inner = null;\n } else if (typeof msgOrInner === 'string') {\n this.message = `${msgOrInner}${!inner ? '' : '\\n ' + inner}`;\n this.inner = inner || null;\n } else if (typeof msgOrInner === 'object') {\n this.message = `${msgOrInner.name} ${msgOrInner.message}`;\n this.inner = msgOrInner;\n }\n }\n derive(DexieError).from(BaseException);\n obj[name]=DexieError;\n return obj;\n},{});\n\n// Use ECMASCRIPT standard exceptions where applicable:\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\n\nexport var exceptionMap = idbDomErrorNames.reduce((obj, name)=>{\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nexport function mapError (domError, message) {\n if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])\n return domError;\n var rv = new exceptionMap[domError.name](message || domError.message, domError);\n if (\"stack\" in domError) {\n // Derive stack from inner exception if it has a stack\n setProp(rv, \"stack\", {get: function(){\n return this.inner.stack;\n }});\n }\n return rv;\n}\n\nexport var fullNameExceptions = errorList.reduce((obj, name)=>{\n if ([\"Syntax\",\"Type\",\"Range\"].indexOf(name) === -1)\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n","import {extend} from './utils';\n\nexport function nop() { }\nexport function mirror(val) { return val; }\nexport function pureFunctionChain(f1, f2) {\n // Enables chained events that takes ONE argument and returns it to the next function in chain.\n // This pattern is used in the hook(\"reading\") event.\n if (f1 == null || f1 === mirror) return f2;\n return function (val) {\n return f2(f1(val));\n };\n}\n\nexport function callBoth(on1, on2) {\n return function () {\n on1.apply(this, arguments);\n on2.apply(this, arguments);\n };\n}\n\nexport function hookCreatingChain(f1, f2) {\n // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance.\n // This pattern is used in the hook(\"creating\") event.\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res !== undefined) arguments[0] = res;\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res2 !== undefined ? res2 : res;\n };\n}\n\nexport function hookDeletingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = this.onerror = null;\n f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n };\n}\n\nexport function hookUpdatingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function (modifications) {\n var res = f1.apply(this, arguments);\n extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain.\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res === undefined ?\n (res2 === undefined ? undefined : res2) :\n (extend(res, res2));\n };\n}\n\nexport function reverseStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n if (f2.apply(this, arguments) === false) return false;\n return f1.apply(this, arguments);\n };\n}\n\nexport function nonStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n f2.apply(this, arguments);\n };\n}\n\nexport function promisableChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res && typeof res.then === 'function') {\n var thiz = this,\n i = arguments.length,\n args = new Array(i);\n while (i--) args[i] = arguments[i];\n return res.then(function () {\n return f2.apply(thiz, args);\n });\n }\n return f2.apply(this, arguments);\n };\n}\n","// By default, debug will be true only if platform is a web platform and its page is served from localhost.\n// When debug = true, error's stacks will contain asyncronic long stacks.\nexport var debug = typeof location !== 'undefined' &&\n // By default, use debug mode if served from localhost.\n /^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\n\nexport function setDebug(value, filter) {\n debug = value;\n}\n\nexport function deprecated (what: string, fn: (...args)=>T) {\n return function () {\n console.warn(`${what} is deprecated. See https://dexie.org/docs/Deprecations}`);\n return fn.apply(this, arguments);\n } as (...args)=>T\n}\n","/*\n * Copyright (c) 2014-2017 David Fahlander\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n */\nimport { _global } from '../globals/global';\nimport {tryCatch, props, setProp,\n getPropertyDescriptor, getArrayOf, extend, getProto} from '../functions/utils';\nimport {nop, callBoth, mirror} from '../functions/chaining-functions';\nimport {debug} from './debug';\nimport {exceptions} from '../errors';\n\n//\n// Promise and Zone (PSD) for Dexie library\n//\n// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by\n// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation.\n//\n// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another\n// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use\n// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task\n// engine that is indexedDB compliant across all browsers.\n// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible.\n//\n// Specific non-standard features of this Promise class:\n// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as\n// native async / await.\n// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame\n// and below + all promises that those promises creates or awaits.\n// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). \n//\n// David Fahlander, https://github.com/dfahlander\n//\n\n// Just a pointer that only this module knows about.\n// Used in Promise constructor to emulate a private constructor.\nvar INTERNAL = {};\n\nconst\n ZONE_ECHO_LIMIT = 100,\n [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ?\n [] :\n (()=>{\n let globalP = Promise.resolve();\n if (typeof crypto === 'undefined' || !crypto.subtle)\n return [globalP, getProto(globalP), globalP];\n // Generate a native promise (as window.Promise may have been patched)\n const nativeP = crypto.subtle.digest(\"SHA-512\", new Uint8Array([0]));\n return [\n nativeP,\n getProto(nativeP),\n globalP\n ];\n })(),\n nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\n\nexport const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nconst patchGlobalPromise = !!resolvedGlobalPromise;\n\n/* The default function used only for the very first promise in a promise chain.\n As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks\n emulated in this module. For indexedDB compatibility, this means that every method needs to \n execute at least one promise before doing an indexedDB operation. Dexie will always call \n db.ready().then() for every operation to make sure the indexedDB event is started in an\n indexedDB-compatible emulated micro task loop.\n*/\nfunction schedulePhysicalTick() {\n queueMicrotask(physicalTick);\n}\n\n// Configurable through Promise.scheduler.\n// Don't export because it would be unsafe to let unknown\n// code call it unless they do try..catch within their callback.\n// This function can be retrieved through getter of Promise.scheduler though,\n// but users must not do Promise.scheduler = myFuncThatThrowsException\nvar asap = function (callback, args) {\n microtickQueue.push([callback, args]);\n if (needsNewPhysicalTick) {\n schedulePhysicalTick();\n needsNewPhysicalTick = false;\n }\n};\n\nvar isOutsideMicroTick = true, // True when NOT in a virtual microTick.\n needsNewPhysicalTick = true, // True when a push to microtickQueue must also schedulePhysicalTick()\n unhandledErrors = [], // Rejected promises that has occured. Used for triggering 'unhandledrejection'.\n rejectingErrors = [], // Tracks if errors are being re-rejected during onRejected callback.\n rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions\n \nexport var globalPSD = {\n id: 'global',\n global: true,\n ref: 0,\n unhandleds: [],\n onunhandled: nop,\n pgp: false,\n env: {},\n finalize: nop\n};\n\nexport var PSD = globalPSD;\n\nexport var microtickQueue = []; // Callbacks to call in this or next physical tick.\nexport var numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick.\nexport var tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick.\n\nexport default function DexiePromise(fn) {\n if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); \n this._listeners = [];\n \n // A library may set `promise._lib = true;` after promise is created to make resolve() or reject()\n // execute the microtask engine implicitely within the call to resolve() or reject().\n // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack\n // only contains library code when calling resolve() or reject().\n // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from\n // global scope (event handler, timer etc)!\n this._lib = false;\n // Current async scope\n var psd = (this._PSD = PSD);\n \n if (typeof fn !== 'function') {\n if (fn !== INTERNAL) throw new TypeError('Not a function');\n // Private constructor (INTERNAL, state, value).\n // Used internally by Promise.resolve() and Promise.reject().\n this._state = arguments[1];\n this._value = arguments[2];\n if (this._state === false)\n handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError().\n return;\n }\n \n this._state = null; // null (=pending), false (=rejected) or true (=resolved)\n this._value = null; // error or result\n ++psd.ref; // Refcounting current scope\n executePromiseTask(this, fn);\n}\n\n// Prepare a property descriptor to put onto Promise.prototype.then\nconst thenProp = {\n get: function() {\n var psd = PSD, microTaskId = totalEchoes;\n\n function then (onFulfilled, onRejected) {\n var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n const cleanup = possibleAwait && !decrementExpectedAwaits();\n var rv = new DexiePromise((resolve, reject) => {\n propagateToListener(this, new Listener(\n nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup),\n nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup),\n resolve,\n reject,\n psd));\n });\n if (this._consoleTask) rv._consoleTask = this._consoleTask;\n return rv;\n }\n\n then.prototype = INTERNAL; // For idempotense, see setter below.\n\n return then;\n },\n // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then\n // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor.\n set: function (value) {\n setProp (this, 'then', value && value.prototype === INTERNAL ?\n thenProp : // Restore to original property descriptor.\n {\n get: function(){\n return value; // Getter returning provided value (behaves like value is just changed)\n },\n set: thenProp.set // Keep a setter that is prepared to restore original.\n }\n );\n }\n};\n\nprops(DexiePromise.prototype, {\n then: thenProp, // Defined above.\n _then: function (onFulfilled, onRejected) {\n // A little tinier version of then() that don't have to create a resulting promise.\n propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); \n },\n\n catch: function (onRejected) {\n if (arguments.length === 1) return this.then(null, onRejected);\n // First argument is the Error type to catch\n var type = arguments[0],\n handler = arguments[1];\n return typeof type === 'function' ? this.then(null, err =>\n // Catching errors by its constructor type (similar to java / c++ / c#)\n // Sample: promise.catch(TypeError, function (e) { ... });\n err instanceof type ? handler(err) : PromiseReject(err))\n : this.then(null, err =>\n // Catching errors by the error.name property. Makes sense for indexedDB where error type\n // is always DOMError but where e.name tells the actual error type.\n // Sample: promise.catch('ConstraintError', function (e) { ... });\n err && err.name === type ? handler(err) : PromiseReject(err));\n },\n\n finally: function (onFinally) {\n return this.then(value => {\n return DexiePromise.resolve(onFinally()).then(()=>value);\n }, err => {\n return DexiePromise.resolve(onFinally()).then(()=>PromiseReject(err));\n });\n },\n \n timeout: function (ms, msg) {\n return ms < Infinity ?\n new DexiePromise((resolve, reject) => {\n var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms);\n this.then(resolve, reject).finally(clearTimeout.bind(null, handle));\n }) : this;\n }\n});\n\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag)\n setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise');\n\n// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env.\n// Environment globals snapshotted on leaving global zone\nglobalPSD.env = snapShot();\n\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n this.psd = zone;\n}\n\n// Promise Static Properties\nprops (DexiePromise, {\n all: function () {\n var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like.\n .map(onPossibleParallellAsync); // Handle parallell async/awaits \n return new DexiePromise(function (resolve, reject) {\n if (values.length === 0) resolve([]);\n var remaining = values.length;\n values.forEach((a,i) => DexiePromise.resolve(a).then(x => {\n values[i] = x;\n if (!--remaining) resolve(values);\n }, reject));\n });\n },\n \n resolve: value => {\n if (value instanceof DexiePromise) return value;\n if (value && typeof value.then === 'function') return new DexiePromise((resolve, reject)=>{\n value.then(resolve, reject);\n });\n var rv = new DexiePromise(INTERNAL, true, value);\n return rv;\n },\n \n reject: PromiseReject,\n \n race: function () {\n var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n values.map(value => DexiePromise.resolve(value).then(resolve, reject));\n });\n },\n\n PSD: {\n get: ()=>PSD,\n set: value => PSD = value\n },\n\n totalEchoes: {get: ()=>totalEchoes},\n\n //task: {get: ()=>task},\n \n newPSD: newScope,\n \n usePSD: usePSD,\n \n scheduler: {\n get: () => asap,\n set: value => {asap = value}\n },\n \n rejectionMapper: {\n get: () => rejectionMapper,\n set: value => {rejectionMapper = value;} // Map reject failures\n },\n \n follow: (fn, zoneProps) => {\n return new DexiePromise((resolve, reject) => {\n return newScope((resolve, reject) => {\n var psd = PSD;\n psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize()\n psd.onunhandled = reject; // Triggered directly on unhandled promises of this library.\n psd.finalize = callBoth(function () {\n // Unhandled standard or 3rd part promises are put in PSD.unhandleds and\n // examined upon scope completion while unhandled rejections in this Promise\n // will trigger directly through psd.onunhandled\n run_at_end_of_this_or_next_physical_tick(()=>{\n this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]);\n });\n }, psd.finalize);\n fn();\n }, zoneProps, resolve, reject);\n });\n }\n});\n\nif (NativePromise) {\n if (NativePromise.allSettled) setProp (DexiePromise, \"allSettled\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise(resolve => {\n if (possiblePromises.length === 0) resolve([]);\n let remaining = possiblePromises.length;\n const results = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => results[i] = {status: \"fulfilled\", value},\n reason => results[i] = {status: \"rejected\", reason})\n .then(()=>--remaining || resolve(results)));\n });\n });\n if (NativePromise.any && typeof AggregateError !== 'undefined') setProp(DexiePromise, \"any\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n if (possiblePromises.length === 0) reject(new AggregateError([]));\n let remaining = possiblePromises.length;\n const failures = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => resolve(value),\n failure => {\n failures[i] = failure;\n if (!--remaining) reject(new AggregateError(failures));\n }));\n });\n });\n}\n\n/**\n* Take a potentially misbehaving resolver function and make sure\n* onFulfilled and onRejected are only called once.\n*\n* Makes no guarantees about asynchrony.\n*/\nfunction executePromiseTask (promise, fn) {\n // Promise Resolution Procedure:\n // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n try {\n fn(value => {\n if (promise._state !== null) return; // Already settled\n if (value === promise) throw new TypeError('A promise cannot be resolved with itself.');\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n if (value && typeof value.then === 'function') {\n executePromiseTask(promise, (resolve, reject) => {\n value instanceof DexiePromise ?\n value._then(resolve, reject) :\n value.then(resolve, reject);\n });\n } else {\n promise._state = true;\n promise._value = value;\n propagateAllListeners(promise);\n }\n if (shouldExecuteTick) endMicroTickScope();\n }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below\n } catch (ex) {\n handleRejection(promise, ex);\n }\n}\n\nfunction handleRejection (promise, reason) {\n rejectingErrors.push(reason);\n if (promise._state !== null) return;\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n reason = rejectionMapper(reason);\n promise._state = false;\n promise._value = reason;\n // Add the failure to a list of possibly uncaught errors\n addPossiblyUnhandledError(promise);\n propagateAllListeners(promise);\n if (shouldExecuteTick) endMicroTickScope();\n}\n\nfunction propagateAllListeners (promise) {\n //debug && linkToPreviousPromise(promise);\n var listeners = promise._listeners;\n promise._listeners = [];\n for (var i = 0, len = listeners.length; i < len; ++i) {\n propagateToListener(promise, listeners[i]);\n }\n var psd = promise._PSD;\n --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize();\n if (numScheduledCalls === 0) {\n // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call,\n // and that no deferreds where listening to this rejection or success.\n // Since there is a risk that our stack can contain application code that may\n // do stuff after this code is finished that may generate new calls, we cannot\n // call finalizers here.\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick(); // Will detect unhandled errors\n }, []);\n }\n}\n\nfunction propagateToListener(promise, listener) {\n if (promise._state === null) {\n promise._listeners.push(listener);\n return;\n }\n\n var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n if (cb === null) {\n // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch()\n return (promise._state ? listener.resolve : listener.reject) (promise._value);\n }\n ++listener.psd.ref;\n ++numScheduledCalls;\n asap (callListener, [cb, promise, listener]);\n}\n\nfunction callListener (cb, promise, listener) {\n try {\n // Call callback and resolve our listener with it's return value.\n var ret, value = promise._value;\n \n if (!promise._state && rejectingErrors.length) rejectingErrors = [];\n // cb is onResolved\n ret = debug && promise._consoleTask ? promise._consoleTask.run(()=>cb (value)) : cb (value);\n if (!promise._state && rejectingErrors.indexOf(value) === -1) {\n markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise.\n }\n listener.resolve(ret);\n } catch (e) {\n // Exception thrown in callback. Reject our listener.\n listener.reject(e);\n } finally {\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n --listener.psd.ref || listener.psd.finalize();\n }\n}\n\n/* The callback to schedule with queueMicrotask().\n It runs a virtual microtick and executes any callback registered in microtickQueue.\n */\nfunction physicalTick() {\n usePSD(globalPSD, ()=>{\n // Make sure to reset the async context to globalPSD before\n // executing any of the microtick subscribers.\n beginMicroTickScope() && endMicroTickScope();\n });\n}\n\nexport function beginMicroTickScope() {\n var wasRootExec = isOutsideMicroTick;\n isOutsideMicroTick = false;\n needsNewPhysicalTick = false;\n return wasRootExec;\n}\n\n/* Executes micro-ticks without doing try..catch.\n This can be possible because we only use this internally and\n the registered functions are exception-safe (they do try..catch\n internally before calling any external method). If registering\n functions in the microtickQueue that are not exception-safe, this\n would destroy the framework and make it instable. So we don't export\n our asap method.\n*/\nexport function endMicroTickScope() {\n var callbacks, i, l;\n do {\n while (microtickQueue.length > 0) {\n callbacks = microtickQueue;\n microtickQueue = [];\n l = callbacks.length;\n for (i = 0; i < l; ++i) {\n var item = callbacks[i];\n item[0].apply(null, item[1]);\n }\n }\n } while (microtickQueue.length > 0);\n isOutsideMicroTick = true;\n needsNewPhysicalTick = true;\n}\n\nfunction finalizePhysicalTick() {\n var unhandledErrs = unhandledErrors;\n unhandledErrors = [];\n unhandledErrs.forEach(p => {\n p._PSD.onunhandled.call(null, p._value, p);\n });\n var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list.\n var i = finalizers.length;\n while (i) finalizers[--i](); \n}\n\nfunction run_at_end_of_this_or_next_physical_tick (fn) {\n function finalizer() {\n fn();\n tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n }\n tickFinalizers.push(finalizer);\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n }, []);\n}\n\nfunction addPossiblyUnhandledError(promise) {\n // Only add to unhandledErrors if not already there. The first one to add to this list\n // will be upon the first rejection so that the root cause (first promise in the\n // rejection chain) is the one listed.\n if (!unhandledErrors.some(p => p._value === promise._value))\n unhandledErrors.push(promise);\n}\n\nfunction markErrorAsHandled(promise) {\n // Called when a reject handled is actually being called.\n // Search in unhandledErrors for any promise whos _value is this promise_value (list\n // contains only rejected promises, and only one item per error)\n var i = unhandledErrors.length;\n while (i) if (unhandledErrors[--i]._value === promise._value) {\n // Found a promise that failed with this same error object pointer,\n // Remove that since there is a listener that actually takes care of it.\n unhandledErrors.splice(i, 1);\n return;\n }\n}\n\nfunction PromiseReject (reason) {\n return new DexiePromise(INTERNAL, false, reason);\n}\n\nexport function wrap (fn, errorCatcher) {\n var psd = PSD;\n return function() {\n var wasRootExec = beginMicroTickScope(),\n outerScope = PSD;\n\n try {\n switchToZone(psd, true);\n return fn.apply(this, arguments);\n } catch (e) {\n errorCatcher && errorCatcher(e);\n } finally {\n switchToZone(outerScope, false);\n if (wasRootExec) endMicroTickScope();\n }\n };\n}\n\n\n//\n// variables used for native await support\n//\nconst task = { awaits: 0, echoes: 0, id: 0}; // The ongoing macro-task when using zone-echoing.\nvar taskCounter = 0; // ID counter for macro tasks.\nvar zoneStack = []; // Stack of left zones to restore asynchronically.\nvar zoneEchoes = 0; // When > 0, zoneLeaveEcho is queued. When 0 and task.echoes is also 0, nothing is queued.\nvar totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then.\n\n\nvar zone_id_counter = 0;\nexport function newScope (fn, props, a1, a2) {\n var parent = PSD,\n psd = Object.create(parent);\n psd.parent = parent;\n psd.ref = 0;\n psd.global = false;\n psd.id = ++zone_id_counter;\n // Prepare for promise patching (done in usePSD):\n var globalEnv = globalPSD.env;\n psd.env = patchGlobalPromise ? {\n Promise: DexiePromise, // Changing window.Promise could be omitted for Chrome and Edge, where IDB+Promise plays well!\n PromiseProp: {value: DexiePromise, configurable: true, writable: true},\n all: DexiePromise.all,\n race: DexiePromise.race,\n allSettled: DexiePromise.allSettled,\n any: DexiePromise.any,\n resolve: DexiePromise.resolve,\n reject: DexiePromise.reject,\n } : {};\n if (props) extend(psd, props);\n \n // unhandleds and onunhandled should not be specifically set here.\n // Leave them on parent prototype.\n // unhandleds.push(err) will push to parent's prototype\n // onunhandled() will call parents onunhandled (with this scope's this-pointer though!)\n ++parent.ref;\n psd.finalize = function () {\n --this.parent.ref || this.parent.finalize();\n }\n var rv = usePSD (psd, fn, a1, a2);\n if (psd.ref === 0) psd.finalize();\n return rv;\n}\n\n// Function to call if scopeFunc returns NativePromise\n// Also for each NativePromise in the arguments to Promise.all()\nexport function incrementExpectedAwaits() {\n if (!task.id) task.id = ++taskCounter;\n ++task.awaits;\n task.echoes += ZONE_ECHO_LIMIT;\n return task.id;\n}\n\n// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called.\n// Also call this when a native await calls then method on a promise. In that case, don't supply\n// sourceTaskId because we already know it refers to current task.\nexport function decrementExpectedAwaits() {\n if (!task.awaits) return false;\n if (--task.awaits === 0) task.id = 0;\n task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0.\n return true;\n}\n\nif ((''+nativePromiseThen).indexOf('[native code]') === -1) {\n // If the native promise' prototype is patched, we cannot rely on zone echoing.\n // Disable that here:\n incrementExpectedAwaits = decrementExpectedAwaits = nop;\n}\n\n// Call from Promise.all() and Promise.race()\nexport function onPossibleParallellAsync (possiblePromise) {\n if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n incrementExpectedAwaits(); \n return possiblePromise.then(x => {\n decrementExpectedAwaits();\n return x;\n }, e => {\n decrementExpectedAwaits();\n return rejection(e);\n });\n }\n return possiblePromise;\n}\n\nfunction zoneEnterEcho(targetZone) {\n ++totalEchoes;\n //console.log(\"Total echoes \", totalEchoes);\n //if (task.echoes === 1) console.warn(\"Cancelling echoing of async context.\");\n if (!task.echoes || --task.echoes === 0) {\n task.echoes = task.awaits = task.id = 0; // Cancel echoing.\n }\n\n zoneStack.push(PSD);\n switchToZone(targetZone, true);\n}\n\nfunction zoneLeaveEcho() {\n var zone = zoneStack[zoneStack.length-1];\n zoneStack.pop();\n switchToZone(zone, false);\n}\n\nfunction switchToZone (targetZone, bEnteringZone) {\n var currentZone = PSD;\n if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {\n // Enter or leave zone asynchronically as well, so that tasks initiated during current tick\n // will be surrounded by the zone when they are invoked.\n queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n }\n if (targetZone === PSD) return;\n\n PSD = targetZone; // The actual zone switch occurs at this line.\n\n // Snapshot on every leave from global zone.\n if (currentZone === globalPSD) globalPSD.env = snapShot();\n\n if (patchGlobalPromise) {\n // Let's patch the global and native Promises (may be same or may be different)\n var GlobalPromise = globalPSD.env.Promise;\n // Swich environments (may be PSD-zone or the global zone. Both apply.)\n var targetEnv = targetZone.env;\n\n if (currentZone.global || targetZone.global) {\n // Leaving or entering global zone. It's time to patch / restore global Promise.\n\n // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular.\n Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);\n\n // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might\n // not be accessing global.Promise but a local reference to it)\n GlobalPromise.all = targetEnv.all;\n GlobalPromise.race = targetEnv.race;\n GlobalPromise.resolve = targetEnv.resolve;\n GlobalPromise.reject = targetEnv.reject;\n if (targetEnv.allSettled) GlobalPromise.allSettled = targetEnv.allSettled;\n if (targetEnv.any) GlobalPromise.any = targetEnv.any;\n }\n }\n}\n\nfunction snapShot () {\n var GlobalPromise = _global.Promise;\n return patchGlobalPromise ? {\n Promise: GlobalPromise,\n PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n all: GlobalPromise.all,\n race: GlobalPromise.race,\n allSettled: GlobalPromise.allSettled,\n any: GlobalPromise.any,\n resolve: GlobalPromise.resolve,\n reject: GlobalPromise.reject,\n } : {};\n}\n\nexport function usePSD (psd, fn, a1, a2, a3) {\n var outerScope = PSD;\n try {\n switchToZone(psd, true);\n return fn(a1, a2, a3);\n } finally {\n switchToZone(outerScope, false);\n }\n}\n\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) {\n return typeof fn !== 'function' ? fn : function () {\n var outerZone = PSD;\n if (possibleAwait) incrementExpectedAwaits();\n switchToZone(zone, true);\n try {\n return fn.apply(this, arguments);\n } finally {\n switchToZone(outerZone, false);\n if (cleanup) queueMicrotask(decrementExpectedAwaits);\n }\n };\n}\n\n/** Execute callback in global context */\nexport function execInGlobalContext(cb) {\n if (Promise === NativePromise && task.echoes === 0) {\n if (zoneEchoes === 0) {\n cb();\n } else {\n enqueueNativeMicroTask(cb);\n }\n } else {\n setTimeout(cb, 0);\n }\n}\n\nexport var rejection = DexiePromise.reject;\n\nexport {DexiePromise};\n","import { PSD, rejection, newScope } from \"../helpers/promise\";\nimport { DexieOptions } from \"../public/types/dexie-constructor\";\nimport { errnames, exceptions } from \"../errors\";\nimport { nop } from \"./chaining-functions\";\nimport { Transaction } from \"../classes/transaction\";\nimport { Dexie } from '../classes/dexie';\n\n/* Generate a temporary transaction when db operations are done outside a transaction scope.\n*/\nexport function tempTransaction (\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n fn: (resolve, reject, trans: Transaction) => any)\n // Last argument is \"writeLocked\". But this doesnt apply to oneshot direct db operations, so we ignore it.\n{\n if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) {\n if (db._state.openComplete) {\n // db.idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError));\n }\n if (!db._state.isBeingOpened) {\n if (!db._state.autoOpen)\n return rejection(new exceptions.DatabaseClosed());\n db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn));\n } else {\n var trans = db._createTransaction(mode, storeNames, db._dbSchema);\n try {\n trans.create();\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(()=>tempTransaction(db, mode, storeNames, fn));\n }\n return rejection(ex);\n }\n return trans._promise(mode, (resolve, reject) => {\n return newScope(() => { // OPTIMIZATION POSSIBLE? newScope() not needed because it's already done in _promise.\n PSD.trans = trans;\n return fn(resolve, reject, trans);\n });\n }).then(result => {\n // Instead of resolving value directly, wait with resolving it until transaction has completed.\n // Otherwise the data would not be in the DB if requesting it in the then() operation.\n // Specifically, to ensure that the following expression will work:\n //\n // db.friends.put({name: \"Arne\"}).then(function () {\n // db.friends.where(\"name\").equals(\"Arne\").count(function(count) {\n // assert (count === 1);\n // });\n // });\n //\n if (mode === 'readwrite') try {trans.idbtrans.commit();} catch {}\n return mode === 'readonly' ? result : trans._completion.then(() => result);\n });/*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major.\n trans._reject(err);\n return rejection(err);\n });*/\n }\n}\n","import { Dexie } from \"../classes/dexie\";\n\nexport const DEXIE_VERSION = '{version}'; // Replaced by build-script.\nexport const maxString = String.fromCharCode(65535);\nexport const minKey = -Infinity; // minKey can be constant. maxKey must be a prop of Dexie (_maxKey)\nexport const INVALID_KEY_ARGUMENT =\n \"Invalid key provided. Keys must be of type string, number, Date or Array.\";\nexport const STRING_EXPECTED = \"String expected.\";\nexport const connections: Dexie[] = [];\nexport const dexieStackFrameFilter = frame => !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\nexport const DBNAMES_DB = '__dbnames';\nexport const READONLY = 'readonly';\nexport const READWRITE = 'readwrite';\n","export function combine(filter1, filter2) {\n return filter1 ?\n filter2 ?\n function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :\n filter1 :\n filter2;\n}\n","import { DBCoreKeyRange, DBCoreRangeType } from '../public/types/dbcore';\n\nexport const AnyRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Any,\n lower: -Infinity,\n lowerOpen: false,\n upper: [[]],\n upperOpen: false\n}\n\nexport const NeverRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Never,\n lower: -Infinity,\n lowerOpen: true,\n upper: -Infinity,\n upperOpen: true\n}\n","import { deepClone, delByKeyPath, getByKeyPath } from './utils';\n\n// This workaround is needed since obj could be a custom-class instance with an\n// uninitialized keyPath. See the following comment for more context:\n// https://github.com/dfahlander/Dexie.js/issues/1280#issuecomment-823557881\nexport function workaroundForUndefinedPrimKey(keyPath: string | ArrayLike) {\n // Workaround only needed for plain non-dotted keyPaths\n return typeof keyPath === \"string\" && !/\\./.test(keyPath) \n ? (obj: object) => {\n if (obj[keyPath] === undefined && (keyPath in obj)) {\n // property exists but is undefined. This will not be liked by Indexeddb.\n // Need to remove the property before adding it but we need to clone it before\n // doing that to not be intrusive.\n obj = deepClone(obj);\n delete obj[keyPath];\n }\n return obj;\n }\n : (obj: object) => obj;\n}","import { exceptions } from \"../../errors\";\n\nexport function Entity(){\n throw exceptions.Type();\n}\n","// Implementation of https://www.w3.org/TR/IndexedDB-3/#compare-two-keys\n\nimport { toStringTag } from './utils';\n\n// ... with the adjustment to return NaN instead of throwing.\nexport function cmp(a: any, b: any): number {\n try {\n const ta = type(a);\n const tb = type(b);\n if (ta !== tb) {\n if (ta === 'Array') return 1;\n if (tb === 'Array') return -1;\n if (ta === 'binary') return 1;\n if (tb === 'binary') return -1;\n if (ta === 'string') return 1;\n if (tb === 'string') return -1;\n if (ta === 'Date') return 1;\n if (tb !== 'Date') return NaN;\n return -1;\n }\n switch (ta) {\n case 'number':\n case 'Date':\n case 'string':\n return a > b ? 1 : a < b ? -1 : 0;\n case 'binary': {\n return compareUint8Arrays(getUint8Array(a), getUint8Array(b));\n }\n case 'Array':\n return compareArrays(a, b);\n }\n } catch {}\n return NaN; // Return value if any given args are valid keys.\n}\n\nexport function compareArrays(a: any[], b: any[]): number {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n const res = cmp(a[i], b[i]);\n if (res !== 0) return res;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\nexport function compareUint8Arrays(\n a: Uint8Array,\n b: Uint8Array\n) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n if (a[i] !== b[i]) return a[i] < b[i] ? -1 : 1;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\n// Implementation of https://www.w3.org/TR/IndexedDB-3/#key-type\nfunction type(x: any) {\n const t = typeof x;\n if (t !== 'object') return t;\n if (ArrayBuffer.isView(x)) return 'binary';\n const tsTag = toStringTag(x); // Cannot use instanceof in Safari\n return tsTag === 'ArrayBuffer' ? 'binary' : (tsTag as 'Array' | 'Date');\n}\n\ntype BinaryType =\n | ArrayBuffer\n | DataView\n | Uint8ClampedArray\n | ArrayBufferView\n | Uint8Array\n | Int8Array\n | Uint16Array\n | Int16Array\n | Uint32Array\n | Int32Array\n | Float32Array\n | Float64Array\n | BigInt64Array \n | BigUint64Array;\n\nfunction getUint8Array(a: BinaryType): Uint8Array {\n if (a instanceof Uint8Array) return a;\n if (ArrayBuffer.isView(a))\n // TypedArray or DataView\n return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return new Uint8Array(a); // ArrayBuffer\n}\n","import { BulkError, exceptions } from '../../errors';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { DexiePromise as Promise, PSD, newScope, rejection, beginMicroTickScope, endMicroTickScope } from '../../helpers/promise';\nimport { Transaction } from '../transaction';\nimport { Dexie } from '../dexie';\nimport { tempTransaction } from '../../functions/temp-transaction';\nimport { Collection } from '../collection';\nimport { isArray, keys, getByKeyPath, setByKeyPath, extend, getProto } from '../../functions/utils';\nimport { maxString } from '../../globals/constants';\nimport { combine } from '../../functions/combine';\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { IndexableType } from '../../public/types/indexable-type';\nimport { debug } from '../../helpers/debug';\nimport { DBCoreTable } from '../../public/types/dbcore';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { workaroundForUndefinedPrimKey } from '../../functions/workaround-undefined-primkey';\nimport { Entity } from '../entity/Entity';\nimport { UpdateSpec } from '../../public';\nimport { cmp } from '../../functions/cmp';\n\n/** class Table\n * \n * https://dexie.org/docs/Table/Table\n */\nexport class Table implements ITable {\n db: Dexie;\n _tx?: Transaction;\n name: string;\n schema: TableSchema;\n hook: TableHooks;\n core: DBCoreTable;\n\n _trans(\n mode: IDBTransactionMode,\n fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike | void,\n writeLocked?: boolean | string) : PromiseExtended\n {\n const trans: Transaction = this._tx || PSD.trans;\n const tableName = this.name;\n // @ts-ignore: Use Chrome's Async Stack Tagging API to allow tracing and simplify debugging for dexie users.\n const task = debug && typeof console !== 'undefined' && console.createTask && console.createTask(`Dexie: ${mode === 'readonly' ? 'read' : 'write' } ${this.name}`);\n \n function checkTableInTransaction(resolve, reject, trans: Transaction) {\n if (!trans.schema[tableName])\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n return fn(trans.idbtrans, trans) as Promise;\n }\n // Surround all in a microtick scope.\n // Reason: Browsers (modern Safari + older others)\n // still as of 2018-10-10 has problems keeping a transaction\n // alive between micro ticks. Safari because if transaction\n // is created but not used in same microtick, it will go\n // away. That specific issue could be solved in DBCore\n // by opening the transaction just before using it instead.\n // But older Firefoxes and IE11 (with Promise polyfills)\n // will still have probs.\n // The beginMicrotickScope()/endMicrotickScope() works\n // in cooperation with Dexie.Promise to orchestrate\n // the micro-ticks in endMicrotickScope() rather than\n // in native engine.\n const wasRootExec = beginMicroTickScope();\n try {\n let p = trans && trans.db._novip === this.db._novip ?\n trans === PSD.trans ?\n trans._promise(mode, checkTableInTransaction, writeLocked) :\n newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) :\n tempTransaction(this.db, mode, [this.name], checkTableInTransaction);\n if (task) { // Dexie.debug = true so we trace errors\n p._consoleTask = task;\n p = p.catch(err => {\n console.trace(err);\n return rejection(err);\n });\n }\n return p; \n } finally {\n if (wasRootExec) endMicroTickScope();\n }\n }\n\n /** Table.get()\n * \n * https://dexie.org/docs/Table/Table.get()\n * \n **/\n get(keyOrCrit, cb?) {\n if (keyOrCrit && keyOrCrit.constructor === Object)\n return this.where(keyOrCrit as { [key: string]: IndexableType }).first(cb);\n if (keyOrCrit == null) return rejection(new exceptions.Type(`Invalid argument to Table.get()`));\n\n return this._trans('readonly', (trans) => {\n return this.core.get({trans, key: keyOrCrit})\n .then(res => this.hook.reading.fire(res));\n }).then(cb);\n }\n\n /** Table.where()\n * \n * https://dexie.org/docs/Table/Table.where()\n * \n **/\n where(indexOrCrit: string | string[] | { [key: string]: IndexableType }) {\n if (typeof indexOrCrit === 'string')\n return new this.db.WhereClause(this, indexOrCrit);\n if (isArray(indexOrCrit))\n return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`);\n // indexOrCrit is an object map of {[keyPath]:value} \n const keyPaths = keys(indexOrCrit);\n if (keyPaths.length === 1)\n // Only one critera. This was the easy case:\n return this\n .where(keyPaths[0])\n .equals(indexOrCrit[keyPaths[0]]);\n\n // Multiple criterias.\n // Let's try finding a compound index that matches all keyPaths in\n // arbritary order:\n const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => {\n if (\n ix.compound &&\n keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0)) {\n for (let i=0; i a.keyPath.length - b.keyPath.length)[0];\n \n if (compoundIndex && this.db._maxKey !== maxString) {\n // Cool! We found such compound index\n // and this browser supports compound indexes (maxKey !== maxString)!\n const keyPathsInValidOrder = (compoundIndex.keyPath as string[]).slice(0, keyPaths.length);\n return this\n .where(keyPathsInValidOrder)\n .equals(keyPathsInValidOrder.map(kp => indexOrCrit[kp]));\n }\n\n if (!compoundIndex && debug) console.warn(\n `The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit from a ` +\n `compound index [${keyPaths.join('+')}]`);\n\n // Ok, now let's fallback to finding at least one matching index\n // and filter the rest.\n const { idxByName } = this.schema;\n const idb = this.db._deps.indexedDB;\n\n function equals (a, b) {\n return idb.cmp(a,b) === 0; // Works with all indexable types including binary keys.\n }\n\n const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => {\n const index = idxByName[keyPath];\n const value = indexOrCrit[keyPath];\n return [\n prevIndex || index, // idx::=Pick index of first matching keypath\n prevIndex || !index ? // filter::=null if not needed, otherwise combine function filter\n combine(\n prevFilterFn,\n index && index.multi ?\n x => {\n const prop = getByKeyPath(x, keyPath);\n return isArray(prop) && prop.some(item => equals(value, item));\n } : x => equals(value, getByKeyPath(x, keyPath)))\n : prevFilterFn\n ];\n }, [null, null]);\n\n return idx ?\n this.where(idx.name).equals(indexOrCrit[idx.keyPath])\n .filter(filterFunction) :\n compoundIndex ?\n this.filter(filterFunction) : // Has compound but browser bad. Allow filter.\n this.where(keyPaths).equals(''); // No index at all. Fail lazily with \"[a+b+c] is not indexed\"\n }\n\n /** Table.filter()\n * \n * https://dexie.org/docs/Table/Table.filter()\n * \n **/\n filter(filterFunction: (obj: any) => boolean) {\n return this.toCollection().and(filterFunction);\n }\n\n /** Table.count()\n * \n * https://dexie.org/docs/Table/Table.count()\n * \n **/\n count(thenShortcut?: any) {\n return this.toCollection().count(thenShortcut);\n }\n\n /** Table.offset()\n * \n * https://dexie.org/docs/Table/Table.offset()\n * \n **/\n offset(offset: number) {\n return this.toCollection().offset(offset);\n }\n\n /** Table.limit()\n * \n * https://dexie.org/docs/Table/Table.limit()\n * \n **/\n limit(numRows: number) {\n return this.toCollection().limit(numRows);\n }\n\n /** Table.each()\n * \n * https://dexie.org/docs/Table/Table.each()\n * \n **/\n each(callback: (obj: any, cursor: { key: IndexableType, primaryKey: IndexableType }) => any) {\n return this.toCollection().each(callback);\n }\n\n /** Table.toArray()\n * \n * https://dexie.org/docs/Table/Table.toArray()\n * \n **/\n toArray(thenShortcut?: any) {\n return this.toCollection().toArray(thenShortcut);\n }\n\n /** Table.toCollection()\n * \n * https://dexie.org/docs/Table/Table.toCollection()\n * \n **/\n toCollection() {\n return new this.db.Collection(new this.db.WhereClause(this));\n }\n\n /** Table.orderBy()\n * \n * https://dexie.org/docs/Table/Table.orderBy()\n * \n **/\n orderBy(index: string | string[]) {\n return new this.db.Collection(\n new this.db.WhereClause(this, isArray(index) ?\n `[${index.join('+')}]` :\n index));\n }\n\n /** Table.reverse()\n * \n * https://dexie.org/docs/Table/Table.reverse()\n * \n **/\n reverse(): Collection {\n return this.toCollection().reverse();\n }\n\n /** Table.mapToClass()\n * \n * https://dexie.org/docs/Table/Table.mapToClass()\n * \n **/\n mapToClass(constructor: Function) {\n const {db, name: tableName} = this;\n this.schema.mappedClass = constructor;\n if (constructor.prototype instanceof Entity) {\n constructor = class extends (constructor as any) {\n get db () { return db; }\n table() { return tableName; }\n }\n }\n // Collect all inherited property names (including method names) by\n // walking the prototype chain. This is to avoid overwriting them from\n // database data - so application code can rely on inherited props never\n // becoming shadowed by database object props.\n const inheritedProps = new Set();\n for (let proto = constructor.prototype; proto; proto = getProto(proto)) {\n Object.getOwnPropertyNames(proto).forEach(propName => inheritedProps.add(propName));\n }\n \n // Now, subscribe to the when(\"reading\") event to make all objects that come out from this table inherit from given class\n // no matter which method to use for reading (Table.get() or Table.where(...)... )\n const readHook = (obj: Object) => {\n if (!obj) return obj; // No valid object. (Value is null or undefined). Return as is.\n // Create a new object that derives from constructor:\n const res = Object.create(constructor.prototype);\n // Clone members (but never those that collide with a property in the prototype\n // hierchary (MUST BE ABLE TO RELY ON Entity methods and props!)):\n for (let m in obj) if (!inheritedProps.has(m)) try { res[m] = obj[m]; } catch (_) { }\n return res;\n };\n\n if (this.schema.readHook) {\n this.hook.reading.unsubscribe(this.schema.readHook);\n }\n this.schema.readHook = readHook;\n this.hook(\"reading\", readHook);\n return constructor;\n }\n\n /** @deprecated */\n defineClass() {\n function Class (content){\n extend(this, content);\n };\n return this.mapToClass(Class);\n }\n\n /** Table.add()\n * \n * https://dexie.org/docs/Table/Table.add()\n * \n **/\n add(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd]});\n }).then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.update()\n * \n * https://dexie.org/docs/Table/Table.update()\n * \n **/\n update(keyOrObject, modifications: { [keyPath: string]: any; } | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n if (key === undefined) return rejection(new exceptions.InvalidArgument(\n \"Given object does not contain its primary key\"));\n /*// object to modify. Also modify given object with the modifications:\n // This part should be here for backward compatibility.\n // If ever feeling too bad about mutating given object, please wait to a new major before removing it,\n // and document the change thoroughly. TODO: Document this change!\n if (!Object.isFrozen(keyOrObject)) try {\n if (typeof modifications !== \"function\") {\n keys(modifications).forEach(keyPath => {\n setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n });\n } else {\n // Now since we support function argument, we should have a similar behavior here as well\n // (as long as we do this mutability stuff on the given object)\n modifications(keyOrObject, {value: keyOrObject, primKey: key});\n }\n } catch {\n // Maybe given object was frozen.\n // This part is not essential. Just move on as nothing happened...\n }*/\n return this.where(\":id\").equals(key).modify(modifications);\n } else {\n // key to modify\n return this.where(\":id\").equals(keyOrObject).modify(modifications);\n }\n }\n\n /** Table.put()\n * \n * https://dexie.org/docs/Table/Table.put()\n * \n **/\n put(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans(\n 'readwrite',\n trans => this.core.mutate({trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.delete()\n * \n * https://dexie.org/docs/Table/Table.delete()\n * \n **/\n delete(key: IndexableType): PromiseExtended {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'delete', keys: [key]}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.clear()\n * \n * https://dexie.org/docs/Table/Table.clear()\n * \n **/\n clear() {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'deleteRange', range: AnyRange}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.bulkGet()\n * \n * https://dexie.org/docs/Table/Table.bulkGet()\n * \n * @param keys \n */\n bulkGet(keys: IndexableType[]) {\n return this._trans('readonly', trans => {\n return this.core.getMany({\n keys,\n trans\n }).then(result => result.map(res => this.hook.reading.fire(res)));\n });\n }\n\n /** Table.bulkAdd()\n * \n * https://dexie.org/docs/Table/Table.bulkAdd()\n * \n **/\n bulkAdd(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToAdd = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate(\n {trans, type: 'add', keys: keys as IndexableType[], values: objectsToAdd, wantResults}\n )\n .then(({numFailures, results,lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkPut()\n * \n * https://dexie.org/docs/Table/Table.bulkPut()\n * \n **/\n bulkPut(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToPut = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n\n return this.core.mutate(\n {trans, type: 'put', keys: keys as IndexableType[], values: objectsToPut, wantResults}\n )\n .then(({numFailures, results, lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkUpdate()\n *\n * https://dexie.org/docs/Table.Table.bulkUpdate()\n */\n bulkUpdate(\n keysAndChanges: readonly { key: any; changes: UpdateSpec }[]\n ): PromiseExtended {\n const coreTable = this.core;\n const keys = keysAndChanges.map((entry) => entry.key);\n const changeSpecs = keysAndChanges.map((entry) => entry.changes);\n const offsetMap: number[] = [];\n return this._trans('readwrite', (trans) => {\n return coreTable.getMany({ trans, keys, cache: 'clone' }).then((objs) => {\n const resultKeys: any[] = [];\n const resultObjs: any[] = [];\n keysAndChanges.forEach(({ key, changes }, idx) => {\n const obj = objs[idx];\n if (obj) {\n for (const keyPath of Object.keys(changes)) {\n const value = changes[keyPath];\n if (keyPath === this.schema.primKey.keyPath) {\n if (cmp(value, key) !== 0) {\n throw new exceptions.Constraint(\n `Cannot update primary key in bulkUpdate()`\n );\n }\n } else {\n setByKeyPath(obj, keyPath, value);\n }\n }\n offsetMap.push(idx);\n resultKeys.push(key);\n resultObjs.push(obj);\n }\n });\n const numEntries = resultKeys.length;\n return coreTable\n .mutate({\n trans,\n type: 'put',\n keys: resultKeys,\n values: resultObjs,\n updates: {\n keys,\n changeSpecs\n }\n })\n .then(({ numFailures, failures }) => {\n if (numFailures === 0) return numEntries;\n // Failure. bulkPut() may have a subset of keys\n // so we must translate returned 'failutes' into the offsets of given argument:\n for (const offset of Object.keys(failures)) {\n const mappedOffset = offsetMap[Number(offset)];\n if (mappedOffset != null) {\n const failure = failures[offset];\n delete failures[offset];\n failures[mappedOffset] = failure;\n }\n }\n throw new BulkError(\n `${this.name}.bulkUpdate(): ${numFailures} of ${numEntries} operations failed`,\n failures\n );\n });\n });\n });\n }\n\n /** Table.bulkDelete()\n * \n * https://dexie.org/docs/Table/Table.bulkDelete()\n * \n **/\n bulkDelete(keys: ReadonlyArray): PromiseExtended {\n const numKeys = keys.length;\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'delete', keys: keys as IndexableType[]});\n }).then(({numFailures, lastResult, failures}) => {\n if (numFailures === 0) return lastResult;\n throw new BulkError(\n `${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures);\n });\n }\n}\n","import {keys, isArray, asap} from '../functions/utils';\nimport {nop, mirror, reverseStoppableEventChain} from '../functions/chaining-functions';\nimport {exceptions} from '../errors';\n\nexport default function Events(ctx) {\n var evs = {};\n var rv = function (eventName, subscriber) {\n if (subscriber) {\n // Subscribe. If additional arguments than just the subscriber was provided, forward them as well.\n var i = arguments.length, args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n evs[eventName].subscribe.apply(null, args);\n return ctx;\n } else if (typeof (eventName) === 'string') {\n // Return interface allowing to fire or unsubscribe from event\n return evs[eventName];\n }\n };\n rv.addEventType = add;\n \n for (var i = 1, l = arguments.length; i < l; ++i) {\n add(arguments[i]);\n }\n \n return rv;\n\n function add(eventName, chainFunction, defaultFunction) {\n if (typeof eventName === 'object') return addConfiguredEvents(eventName);\n if (!chainFunction) chainFunction = reverseStoppableEventChain;\n if (!defaultFunction) defaultFunction = nop;\n\n var context = {\n subscribers: [],\n fire: defaultFunction,\n subscribe: function (cb) {\n if (context.subscribers.indexOf(cb) === -1) {\n context.subscribers.push(cb);\n context.fire = chainFunction(context.fire, cb);\n }\n },\n unsubscribe: function (cb) {\n context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });\n context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n }\n };\n evs[eventName] = rv[eventName] = context;\n return context;\n }\n\n function addConfiguredEvents(cfg) {\n // events(this, {reading: [functionChain, nop]});\n keys(cfg).forEach(function (eventName) {\n var args = cfg[eventName];\n if (isArray(args)) {\n add(eventName, cfg[eventName][0], cfg[eventName][1]);\n } else if (args === 'asap') {\n // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack\n // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten.\n var context = add(eventName, mirror, function fire() {\n // Optimazation-safe cloning of arguments into args.\n var i = arguments.length, args = new Array(i);\n while (i--) args[i] = arguments[i];\n // All each subscriber:\n context.subscribers.forEach(function (fn) {\n asap(function fireEvent() {\n fn.apply(null, args);\n });\n });\n });\n } else throw new exceptions.InvalidArgument(\"Invalid event config\");\n });\n }\n}\n","import { arrayToObject, derive } from './utils';\n\n\nexport function makeClassConstructor (prototype: Object, constructor: Function) {\n /*const propertyDescriptorMap = arrayToObject(\n Object.getOwnPropertyNames(prototype),\n propKey => [propKey, Object.getOwnPropertyDescriptor(prototype, propKey)]);\n\n // Both derive and clone the prototype.\n // derive: So that x instanceof T returns true when T is the class template.\n // clone: Optimizes method access a bit (but actually not nescessary)\n const derivedPrototypeClone = Object.create(prototype, propertyDescriptorMap);\n derivedPrototypeClone.constructor = constructor;\n constructor.prototype = derivedPrototypeClone;\n return constructor as any as TConstructor;*/\n\n // Keep the above code in case we want to clone AND derive the parent prototype.\n // Reason would be optimization of property access.\n // The code below will only create a prototypal inheritance from given constructor function\n // to given prototype.\n derive(constructor).from({prototype});\n return constructor as any as TConstructor; \n}\n","import { Dexie } from '../dexie';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { Transaction } from '../transaction/transaction';\nimport { hookCreatingChain, pureFunctionChain, nop, mirror, hookUpdatingChain, hookDeletingChain } from '../../functions/chaining-functions';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { Table } from './table';\nimport Events from '../../helpers/Events';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\n\nexport interface TableConstructor {\n new (name: string, tableSchema: TableSchema, optionalTrans?: Transaction) : Table;\n prototype: Table;\n}\n\n/** Generates a Table constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTableConstructor (db: Dexie) {\n return makeClassConstructor(\n Table.prototype,\n\n function Table (this: Table, name: string, tableSchema: TableSchema, trans?: Transaction) {\n this.db = db;\n this._tx = trans;\n this.name = name;\n this.schema = tableSchema;\n this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {\n \"creating\": [hookCreatingChain, nop],\n \"reading\": [pureFunctionChain, mirror],\n \"updating\": [hookUpdatingChain, nop],\n \"deleting\": [hookDeletingChain, nop]\n }) as TableHooks;\n }\n\n );\n}\n","import { combine } from \"../../functions/combine\";\nimport { exceptions } from \"../../errors\";\nimport { hasOwn } from \"../../functions/utils\";\nimport { wrap } from \"../../helpers/promise\";\nimport { Collection } from './';\nimport { DBCoreCursor, DBCoreTable, DBCoreTransaction, DBCoreTableSchema, DBCoreRangeType } from '../../public/types/dbcore';\nimport { nop } from '../../functions/chaining-functions';\n\ntype CollectionContext = Collection[\"_ctx\"];\n\nexport function isPlainKeyRange (ctx: CollectionContext, ignoreLimitFilter?: boolean) {\n return !(ctx.filter || ctx.algorithm || ctx.or) &&\n (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n} \n\nexport function addFilter(ctx: CollectionContext, fn: Function) {\n ctx.filter = combine(ctx.filter, fn);\n}\n\nexport function addReplayFilter (ctx: CollectionContext, factory, isLimitFilter?) {\n var curr = ctx.replayFilter;\n ctx.replayFilter = curr ? ()=>combine(curr(), factory()) : factory;\n ctx.justLimit = isLimitFilter && !curr;\n}\n\nexport function addMatchFilter(ctx: CollectionContext, fn) {\n ctx.isMatch = combine(ctx.isMatch, fn);\n}\n\nexport function getIndexOrStore(ctx: CollectionContext, coreSchema: DBCoreTableSchema) {\n // TODO: Rewrite this. No need to know ctx.isPrimKey. ctx.index should hold the keypath.\n // Still, throw if not found!\n if (ctx.isPrimKey) return coreSchema.primaryKey;\n const index = coreSchema.getIndexByKeyPath(ctx.index);\n if (!index) throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + coreSchema.name + \" is not indexed\");\n return index;\n}\n\nexport function openCursor(ctx: CollectionContext, coreTable: DBCoreTable, trans: DBCoreTransaction) {\n const index = getIndexOrStore(ctx, coreTable.schema);\n return coreTable.openCursor({\n trans,\n values: !ctx.keysOnly,\n reverse: ctx.dir === 'prev',\n unique: !!ctx.unique,\n query: {\n index, \n range: ctx.range\n }\n });\n}\n\nexport function iter (\n ctx: CollectionContext, \n fn: (item, cursor: DBCoreCursor, advance: Function)=>void,\n coreTrans: DBCoreTransaction,\n coreTable: DBCoreTable): Promise\n{\n const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n if (!ctx.or) {\n return iterate(\n openCursor(ctx, coreTable, coreTrans),\n combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);\n } else {\n const set = {};\n\n const union = (item: any, cursor: DBCoreCursor, advance) => {\n if (!filter || filter(cursor, advance, result=>cursor.stop(result), err => cursor.fail(err))) {\n var primaryKey = cursor.primaryKey;\n var key = '' + primaryKey;\n if (key === '[object ArrayBuffer]') key = '' + new Uint8Array(primaryKey);\n if (!hasOwn(set, key)) {\n set[key] = true;\n fn(item, cursor, advance);\n }\n }\n }\n\n return Promise.all([\n ctx.or._iterate(union, coreTrans),\n iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)\n ]);\n }\n}\n\nfunction iterate(cursorPromise: Promise, filter, fn, valueMapper): Promise {\n \n // Apply valueMapper (hook('reading') or mappped class)\n var mappedFn = valueMapper ? (x,c,a) => fn(valueMapper(x),c,a) : fn;\n // Wrap fn with PSD and microtick stuff from Promise.\n var wrappedFn = wrap(mappedFn);\n \n return cursorPromise.then(cursor => {\n if (cursor) {\n return cursor.start(()=>{\n var c = ()=>cursor.continue();\n if (!filter || filter(cursor, advancer => c = advancer, val=>{cursor.stop(val);c=nop}, e => {cursor.fail(e);c = nop;}))\n wrappedFn(cursor.value, cursor, advancer => c = advancer);\n c();\n });\n }\n });\n}\n","import { isArray } from \"../functions/utils\";\nimport { PropModSpec } from \"../public/types/prop-modification\";\n\nexport const PropModSymbol: unique symbol = Symbol();\n\n/** Consistent change propagation across offline synced data.\n * \n * This class is executed client- and server side on sync, making\n * an operation consistent across sync for full consistency and accuracy.\n * \n * Example: An object represents a bank account with a balance.\n * One offline user adds $ 1.00 to the balance.\n * Another user (online) adds $ 2.00 to the balance.\n * When first user syncs, the balance becomes the sum of every operation (3.00).\n * \n * -- initial: balance is 0\n * 1. db.bankAccounts.update(1, { balance: new ProdModification({add: 100})}) // user 1 (offline)\n * 2. db.bankAccounts.update(1, { balance: new ProdModification({add: 200})}) // user 2 (online)\n * -- before user 1 syncs, balance is 200 (representing money with integers * 100 to avoid rounding issues)\n * \n * -- balance is 300\n * \n * When new operations are added, they need to be added to:\n * 1. PropModSpec interface\n * 2. Here in PropModification with the logic they represent\n * 3. (Optionally) a sugar function for it, such as const mathAdd = (amount: number | BigInt) => new PropModification({mathAdd: amount})\n */\nexport class PropModification implements PropModSpec {\n [PropModSymbol]?: true;\n replacePrefix?: [string, string];\n add?: number | BigInt | Array;\n remove?: number | BigInt | Array;\n\n execute(value: any): any {\n // add (mathematical or set-wise)\n if (this.add !== undefined) {\n const term = this.add;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(term)) {\n return [...(isArray(value) ? value : []), ...term].sort();\n }\n // Mathematical addition:\n if (typeof term === 'number') return (Number(value) || 0) + term; // if value is not convertible to number, return 0 + term\n if (typeof term === 'bigint') {\n try {\n return BigInt(value) + term;\n } catch {\n return BigInt(0) + term; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid term ${term}`);\n }\n\n // remove (mathematical or set-wise)\n if (this.remove !== undefined) {\n const subtrahend = this.remove;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(subtrahend)) {\n return isArray(value) ? value.filter(item => !subtrahend.includes(item)).sort() : [];\n } \n // Mathematical addition:\n if (typeof subtrahend === 'number') return Number(value) - subtrahend;\n if (typeof subtrahend === 'bigint') {\n try {\n return BigInt(value) - subtrahend;\n } catch {\n return BigInt(0) - subtrahend; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid subtrahend ${subtrahend}`);\n }\n\n // Replace a prefix:\n const prefixToReplace = this.replacePrefix?.[0];\n if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) {\n return this.replacePrefix[1] + value.substring(prefixToReplace.length);\n }\n return value;\n }\n\n constructor(spec: PropModSpec) {\n Object.assign(this, spec);\n }\n}\n","import { Collection as ICollection } from \"../../public/types/collection\";\nimport { Dexie } from \"../dexie\";\nimport { Table } from \"../table\";\nimport { IndexableType, IndexableTypeArrayReadonly } from \"../../public/types/indexable-type\";\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { iter, isPlainKeyRange, getIndexOrStore, addReplayFilter, addFilter, addMatchFilter } from \"./collection-helpers\";\nimport { rejection } from \"../../helpers/promise\";\nimport { combine } from \"../../functions/combine\";\nimport { extend, hasOwn, deepClone, keys, setByKeyPath, getByKeyPath } from \"../../functions/utils\";\nimport { ModifyError } from \"../../errors\";\nimport { ThenShortcut } from \"../../public/types/then-shortcut\";\nimport { Transaction } from '../transaction';\nimport { DBCoreCursor, DBCoreTransaction, DBCoreRangeType, DBCoreMutateResponse, DBCoreKeyRange } from '../../public/types/dbcore';\nimport { cmp } from \"../../functions/cmp\";\nimport { PropModification } from \"../../helpers/prop-modification\";\nimport { UpdateSpec } from \"../../public/types/update-spec\";\n\n/** class Collection\n * \n * https://dexie.org/docs/Collection/Collection\n */\nexport class Collection implements ICollection {\n db: Dexie;\n _ctx: {\n table: Table;\n index?: string | null;\n isPrimKey?: boolean;\n range: DBCoreKeyRange;\n keysOnly: boolean;\n dir: \"next\" | \"prev\";\n unique: \"\" | \"unique\";\n algorithm?: Function | null;\n filter?: Function | null;\n replayFilter: Function | null;\n justLimit: boolean; // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: Function | null;\n offset: number,\n limit: number,\n error: any, // If set, any promise must be rejected with this error\n or: Collection,\n valueMapper: (any) => any\n }\n \n _ondirectionchange?: Function;\n\n _read(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike, cb?): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readonly', fn).then(cb);\n }\n\n _write(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readwrite', fn, \"locked\"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued.\n }\n\n _addAlgorithm(fn) {\n var ctx = this._ctx;\n ctx.algorithm = combine(ctx.algorithm, fn);\n }\n\n _iterate(\n fn: (item, cursor: DBCoreCursor, advance: Function) => void,\n coreTrans: DBCoreTransaction) : Promise\n {\n return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n }\n\n /** Collection.clone()\n * \n * https://dexie.org/docs/Collection/Collection.clone()\n * \n **/\n clone(props?): this {\n var rv = Object.create(this.constructor.prototype),\n ctx = Object.create(this._ctx);\n if (props) extend(ctx, props);\n rv._ctx = ctx;\n return rv;\n }\n\n /** Collection.raw()\n * \n * https://dexie.org/docs/Collection/Collection.raw()\n * \n **/\n raw(): this {\n this._ctx.valueMapper = null;\n return this;\n }\n\n /** Collection.each()\n * \n * https://dexie.org/docs/Collection/Collection.each()\n * \n **/\n each(fn: (obj, cursor: DBCoreCursor) => any): PromiseExtended {\n var ctx = this._ctx;\n\n return this._read(trans => iter(ctx, fn, trans, ctx.table.core));\n }\n\n /** Collection.count()\n * \n * https://dexie.org/docs/Collection/Collection.count()\n * \n **/\n count(cb?) {\n return this._read(trans => {\n const ctx = this._ctx;\n const coreTable = ctx.table.core;\n if (isPlainKeyRange(ctx, true)) {\n // This is a plain key range. We can use the count() method if the index.\n return coreTable.count({\n trans,\n query: {\n index: getIndexOrStore(ctx, coreTable.schema),\n range: ctx.range\n }\n }).then(count => Math.min(count, ctx.limit));\n } else {\n // Algorithms, filters or expressions are applied. Need to count manually.\n var count = 0;\n return iter(ctx, () => { ++count; return false; }, trans, coreTable)\n .then(()=>count);\n }\n }).then(cb);\n }\n\n /** Collection.sortBy()\n * \n * https://dexie.org/docs/Collection/Collection.sortBy()\n * \n **/\n sortBy(keyPath: string): PromiseExtended;\n sortBy(keyPath: string, thenShortcut: ThenShortcut) : PromiseExtended;\n sortBy(keyPath: string, cb?: ThenShortcut) {\n const parts = keyPath.split('.').reverse(),\n lastPart = parts[0],\n lastIndex = parts.length - 1;\n function getval(obj, i) {\n if (i) return getval(obj[parts[i]], i - 1);\n return obj[lastPart];\n }\n var order = this._ctx.dir === \"next\" ? 1 : -1;\n\n function sorter(a, b) {\n var aVal = getval(a, lastIndex),\n bVal = getval(b, lastIndex);\n return aVal < bVal ? -order : aVal > bVal ? order : 0;\n }\n return this.toArray(function (a) {\n return a.sort(sorter);\n }).then(cb);\n }\n\n /** Collection.toArray()\n * \n * https://dexie.org/docs/Collection/Collection.toArray()\n * \n **/\n toArray(cb?): PromiseExtended {\n return this._read(trans => {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAll() or\n // IDBKeyRange.getAll():\n const {valueMapper} = ctx;\n const index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n limit: ctx.limit,\n values: true,\n query: {\n index,\n range: ctx.range\n }\n }).then(({result}) => valueMapper ? result.map(valueMapper) : result);\n } else {\n // Getting array through a cursor.\n const a = [];\n return iter(ctx, item => a.push(item), trans, ctx.table.core).then(()=>a);\n }\n }, cb);\n }\n\n /** Collection.offset()\n * \n * https://dexie.org/docs/Collection/Collection.offset()\n * \n **/\n offset(offset: number) : Collection{\n var ctx = this._ctx;\n if (offset <= 0) return this;\n ctx.offset += offset; // For count()\n if (isPlainKeyRange(ctx)) {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return (cursor, advance) => {\n if (offsetLeft === 0) return true;\n if (offsetLeft === 1) { --offsetLeft; return false; }\n advance(() => {\n cursor.advance(offsetLeft);\n offsetLeft = 0;\n });\n return false;\n };\n });\n } else {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return () => (--offsetLeft < 0);\n });\n }\n return this;\n }\n\n /** Collection.limit()\n * \n * https://dexie.org/docs/Collection/Collection.limit()\n * \n **/\n limit(numRows: number) : Collection {\n this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count()\n addReplayFilter(this._ctx, () => {\n var rowsLeft = numRows;\n return function (cursor, advance, resolve) {\n if (--rowsLeft <= 0) advance(resolve); // Stop after this item has been included\n return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here.\n };\n }, true);\n return this;\n }\n\n /** Collection.until()\n * \n * https://dexie.org/docs/Collection/Collection.until()\n * \n **/\n until(filterFunction: (x) => boolean, bIncludeStopEntry?) {\n addFilter(this._ctx, function (cursor, advance, resolve) {\n if (filterFunction(cursor.value)) {\n advance(resolve);\n return bIncludeStopEntry;\n } else {\n return true;\n }\n });\n return this;\n }\n\n /** Collection.first()\n * \n * https://dexie.org/docs/Collection/Collection.first()\n * \n **/\n first(cb?) {\n return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.last()\n * \n * https://dexie.org/docs/Collection/Collection.last()\n * \n **/\n last(cb?) {\n return this.reverse().first(cb);\n }\n\n /** Collection.filter()\n * \n * https://dexie.org/docs/Collection/Collection.filter()\n * \n **/\n filter(filterFunction: (x) => boolean): Collection {\n /// function(val){return true/false}\n addFilter(this._ctx, function (cursor) {\n return filterFunction(cursor.value);\n });\n // match filters not used in Dexie.js but can be used by 3rd part libraries to test a\n // collection for a match without querying DB. Used by Dexie.Observable.\n addMatchFilter(this._ctx, filterFunction);\n return this;\n }\n\n /** Collection.and()\n * \n * https://dexie.org/docs/Collection/Collection.and()\n * \n **/\n and(filter: (x) => boolean) {\n return this.filter(filter);\n }\n\n /** Collection.or()\n * \n * https://dexie.org/docs/Collection/Collection.or()\n * \n **/\n or(indexName: string) {\n return new this.db.WhereClause(this._ctx.table, indexName, this);\n }\n\n /** Collection.reverse()\n * \n * https://dexie.org/docs/Collection/Collection.reverse()\n * \n **/\n reverse() {\n this._ctx.dir = (this._ctx.dir === \"prev\" ? \"next\" : \"prev\");\n if (this._ondirectionchange) this._ondirectionchange(this._ctx.dir);\n return this;\n }\n\n /** Collection.desc()\n * \n * https://dexie.org/docs/Collection/Collection.desc()\n * \n **/\n desc() {\n return this.reverse();\n }\n\n /** Collection.eachKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachKey()\n * \n **/\n eachKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n }\n\n /** Collection.eachUniqueKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachUniqueKey()\n * \n **/\n eachUniqueKey(cb?) {\n this._ctx.unique = \"unique\";\n return this.eachKey(cb);\n }\n\n /** Collection.eachPrimaryKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachPrimaryKey()\n * \n **/\n eachPrimaryKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n }\n\n /** Collection.keys()\n * \n * https://dexie.org/docs/Collection/Collection.keys()\n * \n **/\n keys(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.key);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.primaryKeys()\n * \n * https://dexie.org/docs/Collection/Collection.primaryKeys()\n * \n **/\n primaryKeys(cb?) : PromiseExtended {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAllKeys() or\n // IDBKeyRange.getAllKeys():\n return this._read(trans => {\n var index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n values: false,\n limit: ctx.limit,\n query: {\n index,\n range: ctx.range\n }});\n }).then(({result})=>result).then(cb);\n }\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.primaryKey);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.uniqueKeys()\n * \n * https://dexie.org/docs/Collection/Collection.uniqueKeys()\n * \n **/\n uniqueKeys(cb?) {\n this._ctx.unique = \"unique\";\n return this.keys(cb);\n }\n\n /** Collection.firstKey()\n * \n * https://dexie.org/docs/Collection/Collection.firstKey()\n * \n **/\n firstKey(cb?) {\n return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.lastKey()\n * \n * https://dexie.org/docs/Collection/Collection.lastKey()\n * \n **/\n lastKey(cb?) {\n return this.reverse().firstKey(cb);\n }\n\n /** Collection.distinct()\n * \n * https://dexie.org/docs/Collection/Collection.distinct()\n * \n **/\n distinct() {\n var ctx = this._ctx,\n idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n if (!idx || !idx.multi) return this; // distinct() only makes differencies on multiEntry indexes.\n var set = {};\n addFilter(this._ctx, function (cursor: DBCoreCursor) {\n var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string\n var found = hasOwn(set, strKey);\n set[strKey] = true;\n return !found;\n });\n return this;\n }\n\n //\n // Methods that mutate storage\n //\n\n /** Collection.modify()\n * \n * https://dexie.org/docs/Collection/Collection.modify()\n * \n **/\n modify(changes: UpdateSpec | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n var ctx = this._ctx;\n return this._write(trans => {\n var modifyer: (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean\n if (typeof changes === 'function') {\n // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item)\n modifyer = changes as (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean;\n } else {\n // changes is a set of {keyPath: value} and no one is listening to the updating hook.\n var keyPaths = keys(changes);\n var numKeys = keyPaths.length;\n modifyer = function (item) {\n let anythingModified = false;\n for (let i = 0; i < numKeys; ++i) {\n let keyPath = keyPaths[i];\n let val = changes[keyPath];\n let origVal = getByKeyPath(item, keyPath);\n\n if (val instanceof PropModification) {\n setByKeyPath(item, keyPath, val.execute(origVal));\n anythingModified = true;\n } else if (origVal !== val) {\n setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n anythingModified = true;\n }\n }\n return anythingModified;\n };\n }\n\n const coreTable = ctx.table.core;\n const {outbound, extractKey} = coreTable.schema.primaryKey;\n const limit = this.db._options.modifyChunkSize || 200;\n const totalFailures = [];\n let successCount = 0;\n const failedKeys: IndexableType[] = [];\n const applyMutateResult = (expectedCount: number, res: DBCoreMutateResponse) => {\n const {failures, numFailures} = res;\n successCount += expectedCount - numFailures;\n for (let pos of keys(failures)) {\n totalFailures.push(failures[pos]);\n }\n }\n return this.clone().primaryKeys().then(keys => {\n const criteria = isPlainKeyRange(ctx) &&\n ctx.limit === Infinity &&\n (typeof changes !== 'function' || changes === deleteCallback) && {\n index: ctx.index,\n range: ctx.range\n };\n\n const nextChunk = (offset: number) => {\n const count = Math.min(limit, keys.length - offset);\n return coreTable.getMany({\n trans,\n keys: keys.slice(offset, offset + count),\n cache: \"immutable\" // Optimize for 2 things:\n // 1) observability-middleware can track changes better.\n // 2) hooks middleware don't have to query the existing values again when tracking changes.\n // We can use \"immutable\" because we promise to not touch the values we retrieve here!\n }).then(values => {\n const addValues = [];\n const putValues = [];\n const putKeys = outbound ? [] : null;\n const deleteKeys = [];\n for (let i=0; i 0 &&\n coreTable.mutate({trans, type: 'add', values: addValues})\n .then(res => {\n for (let pos in res.failures) {\n // Remove from deleteKeys the key of the object that failed to change its primary key\n deleteKeys.splice(parseInt(pos), 1);\n }\n applyMutateResult(addValues.length, res);\n })\n ).then(()=>(putValues.length > 0 || (criteria && typeof changes === 'object')) &&\n coreTable.mutate({\n trans,\n type: 'put',\n keys: putKeys,\n values: putValues,\n criteria,\n changeSpec: typeof changes !== 'function'\n && changes,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(putValues.length, res))\n ).then(()=>(deleteKeys.length > 0 || (criteria && changes === deleteCallback)) &&\n coreTable.mutate({\n trans,\n type: 'delete',\n keys: deleteKeys,\n criteria,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(deleteKeys.length, res))\n ).then(()=>{\n return keys.length > offset + count && nextChunk(offset + limit);\n });\n });\n }\n\n return nextChunk(0).then(()=>{\n if (totalFailures.length > 0)\n throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys as IndexableTypeArrayReadonly);\n\n return keys.length;\n });\n });\n\n });\n }\n\n /** Collection.delete()\n * \n * https://dexie.org/docs/Collection/Collection.delete()\n * \n **/\n delete() : PromiseExtended {\n var ctx = this._ctx,\n range = ctx.range;\n //deletingHook = ctx.table.hook.deleting.fire,\n //hasDeleteHook = deletingHook !== nop;\n if (isPlainKeyRange(ctx) &&\n (ctx.isPrimKey || range.type === DBCoreRangeType.Any)) // if no range, we'll use clear().\n {\n // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208)\n // For chromium, this is the way most optimized version.\n // For IE/Edge, this could hang the indexedDB engine and make operating system instable\n // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7)\n return this._write(trans => {\n // Our API contract is to return a count of deleted items, so we have to count() before delete().\n const {primaryKey} = ctx.table.core.schema;\n const coreRange = range;\n return ctx.table.core.count({trans, query: {index: primaryKey, range: coreRange}}).then(count => {\n return ctx.table.core.mutate({trans, type: 'deleteRange', range: coreRange})\n .then(({failures, lastResult, results, numFailures}) => {\n if (numFailures) throw new ModifyError(\"Could not delete some values\",\n Object.keys(failures).map(pos => failures[pos]),\n count - numFailures);\n return count - numFailures;\n });\n });\n });\n }\n\n return this.modify(deleteCallback);\n }\n}\n\nconst deleteCallback = (value, ctx) => ctx.value = null;\n","import { Dexie } from '../../classes/dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Collection } from './collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\nimport { mirror } from '../../functions/chaining-functions';\n\n/** Constructs a Collection instance. */\nexport interface CollectionConstructor {\n new(whereClause?: WhereClause | null, keyRangeGenerator?: () => DBCoreKeyRange): Collection;\n prototype: Collection;\n}\n\n/** Generates a Collection constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createCollectionConstructor(db: Dexie) {\n return makeClassConstructor(\n Collection.prototype,\n\n function Collection(\n this: Collection,\n whereClause?: WhereClause | null,\n keyRangeGenerator?: () => DBCoreKeyRange)\n {\n this.db = db;\n let keyRange = AnyRange, error = null;\n if (keyRangeGenerator) try {\n keyRange = keyRangeGenerator();\n } catch (ex) {\n error = ex;\n }\n\n const whereCtx = whereClause._ctx;\n const table = whereCtx.table;\n const readingHook = table.hook.reading.fire;\n this._ctx = {\n table: table,\n index: whereCtx.index,\n isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),\n range: keyRange,\n keysOnly: false,\n dir: \"next\",\n unique: \"\",\n algorithm: null,\n filter: null,\n replayFilter: null,\n justLimit: true, // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: null,\n offset: 0,\n limit: Infinity,\n error: error, // If set, any promise must be rejected with this error\n or: whereCtx.or,\n valueMapper: readingHook !== mirror ? readingHook : null\n };\n }\n );\n}\n","import { IndexableType } from '../public/types/indexable-type';\n\nexport function simpleCompare(a, b) {\n return a < b ? -1 : a === b ? 0 : 1;\n}\n\nexport function simpleCompareReverse(a, b) {\n return a > b ? -1 : a === b ? 0 : 1;\n}\n","import { WhereClause } from './where-clause';\nimport { Collection } from '../collection';\nimport { STRING_EXPECTED } from '../../globals/constants';\nimport { simpleCompare, simpleCompareReverse } from '../../functions/compare-functions';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange, DBCoreRangeType } from '../../public/types/dbcore';\n\nexport function fail(collectionOrWhereClause: Collection | WhereClause, err, T?) {\n var collection = collectionOrWhereClause instanceof WhereClause ?\n new collectionOrWhereClause.Collection (collectionOrWhereClause) :\n collectionOrWhereClause;\n \n collection._ctx.error = T ? new T(err) : new TypeError(err);\n return collection;\n}\n\nexport function emptyCollection(whereClause: WhereClause) {\n return new whereClause.Collection (whereClause, () => rangeEqual(\"\")).limit(0);\n}\n\nexport function upperFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toUpperCase() :\n (s: string) => s.toLowerCase();\n}\n\nexport function lowerFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toLowerCase() :\n (s: string) => s.toUpperCase();\n}\n\nexport function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n var length = Math.min(key.length, lowerNeedle.length);\n var llp = -1;\n for (var i = 0; i < length; ++i) {\n var lwrKeyChar = lowerKey[i];\n if (lwrKeyChar !== lowerNeedle[i]) {\n if (cmp(key[i], upperNeedle[i]) < 0) return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n if (cmp(key[i], lowerNeedle[i]) < 0) return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n if (llp >= 0) return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n return null;\n }\n if (cmp(key[i], lwrKeyChar) < 0) llp = i;\n }\n if (length < lowerNeedle.length && dir === \"next\") return key + upperNeedle.substr(key.length);\n if (length < key.length && dir === \"prev\") return key.substr(0, upperNeedle.length);\n return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));\n}\n\nexport function addIgnoreCaseAlgorithm(whereClause: WhereClause, match, needles, suffix) {\n /// \n var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix,\n needlesLen = needles.length;\n if (!needles.every(s => typeof s === 'string')) {\n return fail(whereClause, STRING_EXPECTED);\n }\n function initDirection(dir) {\n upper = upperFactory(dir);\n lower = lowerFactory(dir);\n compare = (dir === \"next\" ? simpleCompare : simpleCompareReverse);\n var needleBounds = needles.map(function (needle){\n return {lower: lower(needle), upper: upper(needle)};\n }).sort(function(a,b) {\n return compare(a.lower, b.lower);\n });\n upperNeedles = needleBounds.map(function (nb){ return nb.upper; });\n lowerNeedles = needleBounds.map(function (nb){ return nb.lower; });\n direction = dir;\n nextKeySuffix = (dir === \"next\" ? \"\" : suffix);\n }\n initDirection(\"next\");\n\n var c = new whereClause.Collection (\n whereClause,\n ()=>createRange(upperNeedles[0], lowerNeedles[needlesLen-1] + suffix)\n );\n\n c._ondirectionchange = function (direction) {\n // This event onlys occur before filter is called the first time.\n initDirection(direction);\n };\n\n var firstPossibleNeedle = 0;\n\n c._addAlgorithm(function (cursor, advance, resolve) {\n /// \n /// \n /// \n var key = cursor.key;\n if (typeof key !== 'string') return false;\n var lowerKey = lower(key);\n if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n return true;\n } else {\n var lowestPossibleCasing = null;\n for (var i=firstPossibleNeedle; i 0) {\n lowestPossibleCasing = casing;\n }\n }\n if (lowestPossibleCasing !== null) {\n advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });\n } else {\n advance(resolve);\n }\n return false;\n }\n });\n return c;\n}\n\nexport function createRange (lower: IndexableType, upper: IndexableType, lowerOpen?: boolean, upperOpen?: boolean): DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Range,\n lower,\n upper,\n lowerOpen,\n upperOpen\n };\n}\n\nexport function rangeEqual (value: IndexableType) : DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Equal,\n lower: value,\n upper: value\n };\n}\n","import { WhereClause as IWhereClause } from \"../../public/types/where-clause\";\nimport { Collection } from \"../collection\";\nimport { Table } from \"../table\";\nimport { IndexableType } from \"../../public/types/indexable-type\";\nimport { emptyCollection, fail, addIgnoreCaseAlgorithm, createRange, rangeEqual } from './where-clause-helpers';\nimport { INVALID_KEY_ARGUMENT, STRING_EXPECTED, maxString, minKey } from '../../globals/constants';\nimport { getArrayOf, NO_CHAR_ARRAY } from '../../functions/utils';\nimport { exceptions } from '../../errors';\nimport { Dexie } from '../dexie';\nimport { Collection as ICollection} from \"../../public/types/collection\";\n\n/** class WhereClause\n * \n * https://dexie.org/docs/WhereClause/WhereClause\n */\nexport class WhereClause implements IWhereClause {\n db: Dexie;\n _IDBKeyRange: typeof IDBKeyRange;\n _ctx: {\n table: Table;\n index: string;\n or: Collection;\n }\n _cmp: (a: IndexableType, b: IndexableType) => number;\n _ascending: (a: IndexableType, b: IndexableType) => number;\n _descending: (a: IndexableType, b: IndexableType) => number;\n _min: (a: IndexableType, b: IndexableType) => IndexableType;\n _max: (a: IndexableType, b: IndexableType) => IndexableType;\n\n get Collection() {\n return this._ctx.table.db.Collection;\n }\n\n /** WhereClause.between()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.between()\n * \n **/\n between(lower: IndexableType, upper: IndexableType, includeLower?: boolean, includeUpper?: boolean) {\n includeLower = includeLower !== false; // Default to true\n includeUpper = includeUpper === true; // Default to false\n try {\n if ((this._cmp(lower, upper) > 0) ||\n (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))\n return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection.\n return new this.Collection(this, ()=>createRange(lower, upper, !includeLower, !includeUpper));\n } catch (e) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n }\n\n /** WhereClause.equals()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equals()\n * \n **/\n equals(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => rangeEqual(value)) as ICollection;\n }\n\n /** WhereClause.above()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.above()\n * \n **/\n above(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, true));\n }\n\n /** WhereClause.aboveOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.aboveOrEqual()\n * \n **/\n aboveOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, false));\n }\n\n /** WhereClause.below()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.below()\n * \n **/\n below(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value, false, true));\n }\n\n /** WhereClause.belowOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.belowOrEqual()\n * \n **/\n belowOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value));\n }\n\n /** WhereClause.startsWith()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWith()\n * \n **/\n startsWith(str: string) {\n if (typeof str !== 'string') return fail(this, STRING_EXPECTED);\n return this.between(str, str + maxString, true, true);\n }\n\n /** WhereClause.startsWithIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithIgnoreCase()\n * \n **/\n startsWithIgnoreCase(str: string) {\n if (str === \"\") return this.startsWith(str);\n return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString);\n }\n\n /** WhereClause.equalsIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equalsIgnoreCase()\n * \n **/\n equalsIgnoreCase(str: string) {\n return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], \"\");\n }\n\n /** WhereClause.anyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOfIgnoreCase()\n * \n **/\n anyOfIgnoreCase(...values: string[]): Collection;\n anyOfIgnoreCase(values: string[]): Collection;\n anyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, \"\");\n }\n\n /** WhereClause.startsWithAnyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOfIgnoreCase()\n * \n **/\n startsWithAnyOfIgnoreCase(...values: string[]): Collection;\n startsWithAnyOfIgnoreCase(values: string[]): Collection;\n startsWithAnyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString);\n }\n\n /** WhereClause.anyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOf()\n * \n **/\n anyOf(...values: string[]): Collection;\n anyOf(values: string[]): Collection;\n anyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n let compare = this._cmp;\n try { set.sort(compare); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n if (set.length === 0) return emptyCollection(this);\n const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1]));\n\n c._ondirectionchange = direction => {\n compare = (direction === \"next\" ?\n this._ascending :\n this._descending);\n set.sort(compare);\n };\n\n let i = 0;\n c._addAlgorithm((cursor, advance, resolve) => {\n const key = cursor.key;\n while (compare(key, set[i]) > 0) {\n // The cursor has passed beyond this key. Check next.\n ++i;\n if (i === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (compare(key, set[i]) === 0) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => { cursor.continue(set[i]); });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.notEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.notEqual()\n * \n **/\n notEqual(value: IndexableType) {\n return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.noneOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.noneOf()\n * \n **/\n noneOf(...values: string[]): Collection;\n noneOf(values: string[]): Collection;\n noneOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return new this.Collection(this); // Return entire collection.\n try { set.sort(this._ascending); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n // Transform [\"a\",\"b\",\"c\"] to a set of ranges for between/above/below: [[minKey,\"a\"], [\"a\",\"b\"], [\"b\",\"c\"], [\"c\",maxKey]]\n const ranges = set.reduce(\n (res, val) => res ?\n res.concat([[res[res.length - 1][1], val]]) :\n [[minKey, val]],\n null);\n ranges.push([set[set.length - 1], this.db._maxKey]);\n return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.inAnyRange()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.inAnyRange()\n * \n **/\n inAnyRange(\n ranges: ReadonlyArray<{ 0: IndexableType, 1: IndexableType }>,\n options?: { includeLowers?: boolean, includeUppers?: boolean })\n {\n const cmp = this._cmp,\n ascending = this._ascending,\n descending = this._descending,\n min = this._min,\n max = this._max;\n\n if (ranges.length === 0) return emptyCollection(this);\n if (!ranges.every(range =>\n range[0] !== undefined &&\n range[1] !== undefined &&\n ascending(range[0], range[1]) <= 0)) {\n return fail(\n this,\n \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\",\n exceptions.InvalidArgument);\n }\n const includeLowers = !options || options.includeLowers !== false; // Default to true\n const includeUppers = options && options.includeUppers === true; // Default to false\n\n function addRange(ranges, newRange) {\n let i = 0, l = ranges.length;\n for (; i < l; ++i) {\n const range = ranges[i];\n if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n range[0] = min(range[0], newRange[0]);\n range[1] = max(range[1], newRange[1]);\n break;\n }\n }\n if (i === l)\n ranges.push(newRange);\n return ranges;\n }\n\n let sortDirection = ascending;\n function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n\n // Join overlapping ranges\n let set;\n try {\n set = ranges.reduce(addRange, []);\n set.sort(rangeSorter);\n } catch (ex) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n\n let rangePos = 0;\n const keyIsBeyondCurrentEntry = includeUppers ?\n key => ascending(key, set[rangePos][1]) > 0 :\n key => ascending(key, set[rangePos][1]) >= 0;\n\n const keyIsBeforeCurrentEntry = includeLowers ?\n key => descending(key, set[rangePos][0]) > 0 :\n key => descending(key, set[rangePos][0]) >= 0;\n\n function keyWithinCurrentRange(key) {\n return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n }\n\n let checkKey = keyIsBeyondCurrentEntry;\n\n const c = new this.Collection(\n this,\n () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers));\n\n c._ondirectionchange = direction => {\n if (direction === \"next\") {\n checkKey = keyIsBeyondCurrentEntry;\n sortDirection = ascending;\n } else {\n checkKey = keyIsBeforeCurrentEntry;\n sortDirection = descending;\n }\n set.sort(rangeSorter);\n };\n\n c._addAlgorithm((cursor, advance, resolve) => {\n var key = cursor.key;\n while (checkKey(key)) {\n // The cursor has passed beyond this key. Check next.\n ++rangePos;\n if (rangePos === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (keyWithinCurrentRange(key)) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) {\n // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border.\n // Continue to next key but don't include this one.\n return false;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => {\n if (sortDirection === ascending) cursor.continue(set[rangePos][0]);\n else cursor.continue(set[rangePos][1]);\n });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.startsWithAnyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOf()\n * \n **/\n startsWithAnyOf(...prefixes: string[]): Collection;\n startsWithAnyOf(prefixes: string[]): Collection;\n startsWithAnyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n\n if (!set.every(s => typeof s === 'string')) {\n return fail(this, \"startsWithAnyOf() only works with strings\");\n }\n if (set.length === 0) return emptyCollection(this);\n\n return this.inAnyRange(set.map((str: string) => [str, str + maxString]));\n }\n\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { WhereClause } from './where-clause';\nimport { Table } from '../table';\nimport { Collection } from '../collection';\nimport { exceptions } from '../../errors';\nimport { cmp } from '../../functions/cmp';\n\nexport interface WhereClauseConstructor {\n new(table: Table, index?: string, orCollection?: Collection): WhereClause;\n prototype: WhereClause;\n}\n\n/** Generates a WhereClause constructor.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createWhereClauseConstructor(db: Dexie) {\n return makeClassConstructor(\n WhereClause.prototype,\n\n function WhereClause(this: WhereClause, table: Table, index?: string, orCollection?: Collection) {\n this.db = db;\n this._ctx = {\n table: table,\n index: index === \":id\" ? null : index,\n or: orCollection\n };\n this._cmp = this._ascending = cmp;\n this._descending = (a, b) => cmp(b, a);\n this._max = (a, b) => cmp(a,b) > 0 ? a : b;\n this._min = (a, b) => cmp(a,b) < 0 ? a : b;\n this._IDBKeyRange = db._deps.IDBKeyRange;\n if (!this._IDBKeyRange) throw new exceptions.MissingAPI();\n }\n );\n}\n","import { wrap } from \"../helpers/promise\";\n\nexport function eventRejectHandler(reject) {\n return wrap(function (event) {\n preventDefault(event);\n reject (event.target.error);\n return false;\n });\n}\n\nexport function eventSuccessHandler (resolve) {\n return wrap(function (event){\n resolve(event.target.result);\n });\n}\n\nexport function hookedEventRejectHandler (reject) {\n return wrap(function (event) {\n // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks.\n \n var req = event.target,\n err = req.error,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n hookErrorHandler = ctx && ctx.onerror;\n hookErrorHandler && hookErrorHandler(err);\n preventDefault(event);\n reject (err);\n return false;\n });\n}\n\nexport function hookedEventSuccessHandler(resolve) {\n // wrap() is needed when calling hooks because the rare scenario of:\n // * hook does a db operation that fails immediately (IDB throws exception)\n // For calling db operations on correct transaction, wrap makes sure to set PSD correctly.\n // wrap() will also execute in a virtual tick.\n // * If not wrapped in a virtual tick, direct exception will launch a new physical tick.\n // * If this was the last event in the bulk, the promise will resolve after a physical tick\n // and the transaction will have committed already.\n // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise,\n // because it is always marked with _lib = true when created using Transaction._promise().\n return wrap(function(event) {\n var req = event.target,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key.\n hookSuccessHandler = ctx && ctx.onsuccess;\n hookSuccessHandler && hookSuccessHandler(result);\n resolve && resolve(result);\n }, resolve);\n}\n\n\nexport function preventDefault(event) {\n if (event.stopPropagation) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.stopPropagation();\n if (event.preventDefault) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.preventDefault();\n}\n\nexport function BulkErrorHandlerCatchAll(errorList, done?, supportHooks?) {\n return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(e => {\n errorList.push(e);\n done && done();\n });\n}\n\n","import Events from '../helpers/Events';\nimport { GlobalDexieEvents } from '../public/types/db-events';\n\nexport const DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated' as 'storagemutated';\n\n// Name of the global event fired using DOM dispatchEvent (if not in node).\n// Reason for propagating this as a DOM event is for getting reactivity across\n// multiple versions of Dexie within the same app (as long as they are\n// compatible with regards to the event data).\n// If the ObservabilitySet protocol change in a way that would not be backward\n// compatible, make sure also update the event name to a new number at the end\n// so that two Dexie instances of different versions continue to work together\n// - maybe not able to communicate but won't fail due to unexpected data in\n// the detail property of the CustomEvent. If so, also make sure to udpate\n// docs and explain at which Dexie version the new name and format of the event\n// is being used.\nexport const STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1';\n\nexport const globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME) as GlobalDexieEvents;\n","import { Transaction as ITransaction } from '../../public/types/transaction';\nimport { DexiePromise, wrap, rejection } from \"../../helpers/promise\";\nimport { DbSchema } from '../../public/types/db-schema';\nimport { assert, hasOwn } from '../../functions/utils';\nimport { PSD, usePSD } from '../../helpers/promise';\nimport { Dexie } from '../dexie';\nimport { exceptions } from '../../errors';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { preventDefault } from '../../functions/event-wrappers';\nimport { newScope } from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { Table } from '../table';\nimport { globalEvents } from '../../globals/global-events';\n\n/** Transaction\n * \n * https://dexie.org/docs/Transaction/Transaction\n * \n **/\nexport class Transaction implements ITransaction {\n db: Dexie;\n active: boolean;\n mode: IDBTransactionMode;\n chromeTransactionDurability: ChromeTransactionDurability;\n idbtrans: IDBTransaction;\n storeNames: string[];\n explicit?: boolean;\n on: any;\n parent?: Transaction;\n schema: DbSchema;\n _memoizedTables: {[tableName: string]: Table};\n\n _reculock: number;\n _blockedFuncs: { 0: () => any, 1: any }[];\n _resolve: () => void;\n _reject: (Error) => void;\n _waitingFor: DexiePromise; // for waitFor()\n _waitingQueue: Function[]; // for waitFor()\n _spinCount: number; // Just for debugging waitFor()\n _completion: DexiePromise;\n\n //\n // Transaction internal methods (not required by API users, but needed internally and eventually by dexie extensions)\n //\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _lock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n // Temporary set all requests into a pending queue if they are called before database is ready.\n ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage)\n if (this._reculock === 1 && !PSD.global) PSD.lockOwnerFor = this;\n return this;\n }\n\n /** Transaction._unlock()\n * \n * Internal method.\n */\n _unlock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n if (--this._reculock === 0) {\n if (!PSD.global) PSD.lockOwnerFor = null;\n while (this._blockedFuncs.length > 0 && !this._locked()) {\n var fnAndPSD = this._blockedFuncs.shift();\n try { usePSD(fnAndPSD[1], fnAndPSD[0]); } catch (e) { }\n }\n }\n return this;\n }\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _locked() {\n // Checks if any write-lock is applied on this transaction.\n // To simplify the Dexie API for extension implementations, we support recursive locks.\n // This is accomplished by using \"Promise Specific Data\" (PSD).\n // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ).\n // PSD is local to code executing on top of the call stacks of any of any code executed by Promise():\n // * callback given to the Promise() constructor (function (resolve, reject){...})\n // * callbacks given to then()/catch()/finally() methods (function (value){...})\n // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise.\n // Derivation is done so that the inner PSD __proto__ points to the outer PSD.\n // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock.\n return this._reculock && PSD.lockOwnerFor !== this;\n }\n\n /** Transaction.create()\n * \n * Internal method.\n * \n */\n create(idbtrans?: IDBTransaction & {[prop: string]: any}) {\n if (!this.mode) return this;\n const idbdb = this.db.idbdb;\n const dbOpenError = this.db._state.dbOpenError;\n assert(!this.idbtrans);\n if (!idbtrans && !idbdb) {\n switch (dbOpenError && dbOpenError.name) {\n case \"DatabaseClosedError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.DatabaseClosed(dbOpenError);\n case \"MissingAPIError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n default:\n // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()!\n throw new exceptions.OpenFailed(dbOpenError);\n }\n }\n if (!this.active) throw new exceptions.TransactionInactive();\n assert(this._completion._state === null); // Completion Promise must still be pending.\n\n idbtrans = this.idbtrans = idbtrans ||\n (this.db.core \n ? this.db.core.transaction(this.storeNames, this.mode as 'readwrite' | 'readonly', { durability: this.chromeTransactionDurability })\n : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })\n ) as IDBTransaction;\n\n idbtrans.onerror = wrap(ev => {\n preventDefault(ev);// Prohibit default bubbling to window.error\n this._reject(idbtrans.error);\n });\n idbtrans.onabort = wrap(ev => {\n preventDefault(ev);\n this.active && this._reject(new exceptions.Abort(idbtrans.error));\n this.active = false;\n this.on(\"abort\").fire(ev);\n });\n idbtrans.oncomplete = wrap(() => {\n this.active = false;\n this._resolve();\n if ('mutatedParts' in idbtrans) {\n globalEvents.storagemutated.fire(idbtrans[\"mutatedParts\"]);\n }\n });\n return this;\n }\n\n /** Transaction._promise()\n * \n * Internal method.\n */\n _promise(\n mode: IDBTransactionMode,\n fn: (resolve, reject, trans: Transaction) => PromiseLike | void,\n bWriteLock?: string | boolean): DexiePromise\n {\n if (mode === 'readwrite' && this.mode !== 'readwrite')\n return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n\n if (!this.active)\n return rejection(new exceptions.TransactionInactive());\n\n if (this._locked()) {\n return new DexiePromise((resolve, reject) => {\n this._blockedFuncs.push([() => {\n this._promise(mode, fn, bWriteLock).then(resolve, reject);\n }, PSD]);\n });\n\n } else if (bWriteLock) {\n return newScope(() => {\n var p = new DexiePromise((resolve, reject) => {\n this._lock();\n const rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p.finally(() => this._unlock());\n p._lib = true;\n return p;\n });\n\n } else {\n var p = new DexiePromise((resolve, reject) => {\n var rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p._lib = true;\n return p;\n }\n }\n\n /** Transaction._root()\n * \n * Internal method. Retrieves the root transaction in the tree of sub transactions.\n */\n _root() {\n return this.parent ? this.parent._root() : this;\n }\n\n /** Transaction.waitFor()\n * \n * Internal method. Can be accessed from the public API through\n * Dexie.waitFor(): https://dexie.org/docs/Dexie/Dexie.waitFor()\n * \n **/\n waitFor(promiseLike: PromiseLike) {\n // Always operate on the root transaction (in case this is a sub stransaction)\n var root = this._root();\n // For stability reasons, convert parameter to promise no matter what type is passed to waitFor().\n // (We must be able to call .then() on it.)\n const promise = DexiePromise.resolve(promiseLike);\n if (root._waitingFor) {\n // Already called waitFor(). Wait for both to complete.\n root._waitingFor = root._waitingFor.then(() => promise);\n } else {\n // We're not in waiting state. Start waiting state.\n root._waitingFor = promise;\n root._waitingQueue = [];\n // Start interacting with indexedDB until promise completes:\n var store = root.idbtrans.objectStore(root.storeNames[0]);\n (function spin() {\n ++root._spinCount; // For debugging only\n while (root._waitingQueue.length) (root._waitingQueue.shift())();\n if (root._waitingFor) store.get(-Infinity).onsuccess = spin;\n }());\n }\n var currentWaitPromise = root._waitingFor;\n return new DexiePromise((resolve, reject) => {\n promise.then(\n res => root._waitingQueue.push(wrap(resolve.bind(null, res))),\n err => root._waitingQueue.push(wrap(reject.bind(null, err)))\n ).finally(() => {\n if (root._waitingFor === currentWaitPromise) {\n // No one added a wait after us. Safe to stop the spinning.\n root._waitingFor = null;\n }\n });\n });\n } \n\n /** Transaction.abort()\n * \n * https://dexie.org/docs/Transaction/Transaction.abort()\n */\n abort() {\n if (this.active) {\n this.active = false;\n if (this.idbtrans) this.idbtrans.abort();\n this._reject(new exceptions.Abort());\n }\n }\n\n /** Transaction.table()\n * \n * https://dexie.org/docs/Transaction/Transaction.table()\n */\n table(tableName: string) {\n const memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n if (hasOwn(memoizedTables, tableName))\n return memoizedTables[tableName];\n const tableSchema = this.schema[tableName];\n if (!tableSchema) {\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\"); \n }\n\n const transactionBoundTable = new this.db.Table(tableName, tableSchema, this);\n transactionBoundTable.core = this.db.core.table(tableName);\n memoizedTables[tableName] = transactionBoundTable;\n return transactionBoundTable;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Transaction } from './transaction';\nimport { DbSchema } from '../../public/types/db-schema';\nimport Events from '../../helpers/Events';\nimport Promise, { rejection } from '../../helpers/promise';\n\nexport interface TransactionConstructor {\n new (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction) : T;\n prototype: T;\n}\n\n/** Generates a Transaction constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTransactionConstructor(db: Dexie) {\n return makeClassConstructor>(\n Transaction.prototype,\n function Transaction (\n this: Transaction,\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction)\n {\n this.db = db;\n this.mode = mode;\n this.storeNames = storeNames;\n this.schema = dbschema;\n this.chromeTransactionDurability = chromeTransactionDurability;\n this.idbtrans = null;\n this.on = Events(this, \"complete\", \"error\", \"abort\");\n this.parent = parent || null;\n this.active = true;\n this._reculock = 0;\n this._blockedFuncs = [];\n this._resolve = null;\n this._reject = null;\n this._waitingFor = null;\n this._waitingQueue = null;\n this._spinCount = 0; // Just for debugging waitFor()\n this._completion = new Promise ((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n \n this._completion.then(\n ()=> {\n this.active = false;\n this.on.complete.fire();\n },\n e => {\n var wasActive = this.active;\n this.active = false;\n this.on.error.fire(e);\n this.parent ?\n this.parent._reject(e) :\n wasActive && this.idbtrans && this.idbtrans.abort();\n return rejection(e); // Indicate we actually DO NOT catch this error.\n });\n \n });\n}\n","import { IndexSpec } from '../public/types/index-spec';\n\nexport function createIndexSpec(\n name: string,\n keyPath: string | string[],\n unique: boolean,\n multi: boolean,\n auto: boolean,\n compound: boolean,\n isPrimKey: boolean\n): IndexSpec {\n return {\n name,\n keyPath,\n unique,\n multi,\n auto,\n compound,\n src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + nameFromKeyPath(keyPath)\n }\n}\n\nexport function nameFromKeyPath (keyPath?: string | string[]): string {\n return typeof keyPath === 'string' ?\n keyPath :\n keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : \"\";\n}\n","import { IndexSpec } from '../public/types/index-spec';\nimport { TableSchema } from '../public/types/table-schema';\nimport { createIndexSpec } from './index-spec';\nimport { arrayToObject } from '../functions/utils';\n\nexport function createTableSchema (\n name: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n): TableSchema {\n return {\n name,\n primKey,\n indexes,\n mappedClass: null,\n idxByName: arrayToObject(indexes, index => [index.name, index])\n };\n}\n","import { maxString } from '../globals/constants';\n\nexport function safariMultiStoreFix(storeNames: string[]) {\n return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\n\nexport function getNativeGetDatabaseNamesFn(indexedDB) {\n var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n return fn && fn.bind(indexedDB);\n}\n\nexport let getMaxKey = (IdbKeyRange: typeof IDBKeyRange) => {\n try {\n IdbKeyRange.only([[]]);\n getMaxKey = () => [[]];\n return [[]];\n } catch (e) {\n getMaxKey = () => maxString;\n return maxString;\n }\n}\n","import { getByKeyPath } from '../functions/utils';\n\nexport function getKeyExtractor (keyPath: null | string | string[]) : (a: any) => any {\n if (keyPath == null) {\n return () => undefined;\n } else if (typeof keyPath === 'string') {\n return getSinglePathKeyExtractor(keyPath);\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n\nexport function getSinglePathKeyExtractor(keyPath: string) {\n const split = keyPath.split('.');\n if (split.length === 1) {\n return obj => obj[keyPath];\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n","import {\n DBCore,\n DBCoreCursor,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryResponse,\n DBCoreRangeType,\n DBCoreSchema,\n DBCoreTableSchema,\n DBCoreTable,\n DBCoreMutateResponse,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { eventRejectHandler, preventDefault } from '../functions/event-wrappers';\nimport { wrap } from '../helpers/promise';\nimport { getMaxKey } from '../functions/quirks';\nimport { getKeyExtractor } from './get-key-extractor';\n\nexport function arrayify(arrayLike: {length: number, [index: number]: T}): T[] {\n return [].slice.call(arrayLike);\n}\nexport function pick(obj: T, props: Prop[]): Pick {\n const result = {} as Pick;\n props.forEach(prop => result[prop] = obj[prop]);\n return result;\n}\n\nlet _id_counter = 0;\n\nexport function getKeyPathAlias(keyPath: null | string | string[]) {\n return keyPath == null ?\n \":id\" :\n typeof keyPath === 'string' ?\n keyPath :\n `[${keyPath.join('+')}]`;\n}\n\nexport function createDBCore (\n db: IDBDatabase,\n IdbKeyRange: typeof IDBKeyRange,\n tmpTrans: IDBTransaction) : DBCore\n{\n function extractSchema(db: IDBDatabase, trans: IDBTransaction) : {schema: DBCoreSchema, hasGetAll: boolean} {\n const tables = arrayify(db.objectStoreNames);\n return {\n schema: {\n name: db.name,\n tables: tables.map(table => trans.objectStore(table)).map(store => {\n const {keyPath, autoIncrement} = store;\n const compound = isArray(keyPath);\n const outbound = keyPath == null;\n const indexByKeyPath: {[keyPathAlias: string]: DBCoreIndex} = {};\n const result = {\n name: store.name,\n primaryKey: {\n name: null,\n isPrimaryKey: true,\n outbound,\n compound,\n keyPath,\n autoIncrement,\n unique: true,\n extractKey: getKeyExtractor(keyPath)\n } as DBCoreIndex,\n indexes: arrayify(store.indexNames).map(indexName => store.index(indexName))\n .map(index => {\n const {name, unique, multiEntry, keyPath} = index;\n const compound = isArray(keyPath);\n const result: DBCoreIndex = {\n name,\n compound,\n keyPath,\n unique,\n multiEntry,\n extractKey: getKeyExtractor(keyPath)\n };\n indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n return result;\n }),\n getIndexByKeyPath: (keyPath: null | string | string[]) => indexByKeyPath[getKeyPathAlias(keyPath)]\n };\n indexByKeyPath[\":id\"] = result.primaryKey;\n if (keyPath != null) {\n indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;\n }\n return result;\n })\n },\n hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&\n !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) // Bug with getAll() on Safari ver<604. See discussion following PR #579\n };\n }\n\n function makeIDBKeyRange (range: DBCoreKeyRange) : IDBKeyRange | null {\n if (range.type === DBCoreRangeType.Any) return null;\n if (range.type === DBCoreRangeType.Never) throw new Error(\"Cannot convert never type to IDBKeyRange\");\n const {lower, upper, lowerOpen, upperOpen} = range;\n const idbRange = lower === undefined ?\n upper === undefined ?\n null : //IDBKeyRange.lowerBound(-Infinity, false) : // Any range (TODO: Should we return null instead?)\n IdbKeyRange.upperBound(upper, !!upperOpen) : // below\n upper === undefined ?\n IdbKeyRange.lowerBound(lower, !!lowerOpen) : // above\n IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);\n return idbRange;\n }\n\n function createDbCoreTable(tableSchema: DBCoreTableSchema): DBCoreTable {\n const tableName = tableSchema.name;\n\n function mutate ({trans, type, keys, values, range}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const outbound = store.keyPath == null;\n const isAddOrPut = type === \"put\" || type === \"add\";\n if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n throw new Error (\"Invalid operation type: \" + type);\n\n const {length} = keys || values || {length: 1}; // keys.length if keys. values.length if values. 1 if range.\n if (keys && values && keys.length !== values.length) {\n throw new Error(\"Given keys array must have same length as given values array.\");\n }\n if (length === 0)\n // No items to write. Don't even bother!\n return resolve({numFailures: 0, failures: {}, results: [], lastResult: undefined});\n\n let req: IDBRequest;\n const reqs: IDBRequest[] = [];\n \n const failures: {[operationNumber: number]: Error} = [];\n let numFailures = 0;\n const errorHandler = \n event => {\n ++numFailures;\n preventDefault(event);\n };\n \n if (type === 'deleteRange') {\n // Here the argument is the range\n if (range.type === DBCoreRangeType.Never)\n return resolve({numFailures, failures, results: [], lastResult: undefined}); // Deleting the Never range shoulnt do anything.\n if (range.type === DBCoreRangeType.Any)\n reqs.push(req = store.clear()); // Deleting the Any range is equivalent to store.clear()\n else\n reqs.push(req = store.delete(makeIDBKeyRange(range)));\n } else {\n // No matter add, put or delete - find out arrays of first and second arguments to it.\n const [args1, args2] = isAddOrPut ?\n outbound ?\n [values, keys] :\n [values, null] :\n [keys, null];\n\n if (isAddOrPut) {\n for (let i=0; i {\n const lastResult = event.target.result;\n reqs.forEach((req, i) => req.error != null && (failures[i] = req.error));\n resolve({\n numFailures,\n failures,\n results: type === \"delete\" ? keys : reqs.map(req => req.result),\n lastResult\n });\n };\n \n req.onerror = event => { // wrap() not needed. All paths calling outside will wrap!\n errorHandler(event);\n done(event);\n };\n \n req.onsuccess = done;\n });\n }\n \n function openCursor ({trans, values, query, reverse, unique}: DBCoreOpenCursorRequest): Promise\n {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n // source\n const source = index.isPrimaryKey ?\n store :\n store.index(index.name);\n // direction\n const direction = reverse ?\n unique ?\n \"prevunique\" :\n \"prev\" :\n unique ?\n \"nextunique\" :\n \"next\";\n // request\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(makeIDBKeyRange(range), direction) :\n source.openKeyCursor(makeIDBKeyRange(range), direction);\n \n // iteration\n req.onerror = eventRejectHandler(reject);\n req.onsuccess = wrap(ev => {\n\n const cursor = req.result as unknown as DBCoreCursor;\n if (!cursor) {\n resolve(null);\n return;\n }\n (cursor as any).___id = ++_id_counter;\n (cursor as any).done = false;\n const _cursorContinue = cursor.continue.bind(cursor);\n let _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n if (_cursorContinuePrimaryKey) _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n const _cursorAdvance = cursor.advance.bind(cursor);\n const doThrowCursorIsNotStarted = ()=>{throw new Error(\"Cursor not started\");}\n const doThrowCursorIsStopped = ()=>{throw new Error(\"Cursor not stopped\");}\n (cursor as any).trans = trans;\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;\n cursor.fail = wrap(reject);\n cursor.next = function (this: DBCoreCursor) {\n // next() must work with \"this\" pointer in order to function correctly for ProxyCursors (derived objects)\n // without having to re-define next() on each child.\n let gotOne = 1;\n return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this);\n };\n cursor.start = (callback) => {\n //console.log(\"Starting cursor\", (cursor as any).___id);\n const iterationPromise = new Promise((resolveIteration, rejectIteration) =>{\n resolveIteration = wrap(resolveIteration);\n req.onerror = eventRejectHandler(rejectIteration);\n cursor.fail = rejectIteration;\n cursor.stop = value => {\n //console.log(\"Cursor stop\", cursor);\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n resolveIteration(value);\n };\n });\n // Now change req.onsuccess to a callback that doesn't call initCursor but just observer.next()\n const guardedCallback = () => {\n if (req.result) {\n //console.log(\"Next result\", cursor);\n try {\n callback();\n } catch (err) {\n cursor.fail(err);\n }\n } else {\n (cursor as any).done = true;\n cursor.start = ()=>{throw new Error(\"Cursor behind last entry\");}\n cursor.stop();\n }\n }\n req.onsuccess = wrap(ev => {\n //cursor.continue = _cursorContinue;\n //cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n //cursor.advance = _cursorAdvance;\n req.onsuccess = guardedCallback;\n guardedCallback();\n });\n cursor.continue = _cursorContinue;\n cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n cursor.advance = _cursorAdvance;\n guardedCallback();\n return iterationPromise;\n };\n resolve(cursor);\n }, reject); \n });\n }\n \n function query (hasGetAll: boolean) {\n return (request: DBCoreQueryRequest) => {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {trans, values, limit, query} = request;\n const nonInfinitLimit = limit === Infinity ? undefined : limit;\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n if (limit === 0) return resolve({result: []});\n if (hasGetAll) {\n const req = values ?\n (source as any).getAll(idbKeyRange, nonInfinitLimit) :\n (source as any).getAllKeys(idbKeyRange, nonInfinitLimit);\n req.onsuccess = event => resolve({result: event.target.result});\n req.onerror = eventRejectHandler(reject);\n } else {\n let count = 0;\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(idbKeyRange) :\n source.openKeyCursor(idbKeyRange)\n const result = [];\n req.onsuccess = event => {\n const cursor = req.result as IDBCursorWithValue;\n if (!cursor) return resolve({result});\n result.push(values ? cursor.value : cursor.primaryKey);\n if (++count === limit) return resolve({result});\n cursor.continue();\n };\n req.onerror = eventRejectHandler(reject);\n }\n });\n };\n }\n \n return {\n name: tableName,\n schema: tableSchema,\n \n mutate,\n\n getMany ({trans, keys}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const length = keys.length;\n const result = new Array(length);\n let keyCount = 0;\n let callbackCount = 0;\n let valueCount = 0;\n let req: IDBRequest & {_pos?: number};\n \n const successHandler = event => {\n const req = event.target;\n if ((result[req._pos] = req.result) != null) ++valueCount;\n if (++callbackCount === keyCount) resolve(result);\n };\n const errorHandler = eventRejectHandler(reject);\n \n for (let i=0; i((resolve, reject) => {\n resolve = wrap (resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const req = store.get(key);\n req.onsuccess = event => resolve((event.target as any).result);\n req.onerror = eventRejectHandler(reject);\n });\n },\n\n query: query(hasGetAll),\n \n openCursor,\n\n count ({query, trans}) {\n const {index, range} = query;\n return new Promise((resolve, reject) => {\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n const req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n req.onsuccess = wrap(ev => resolve((ev.target as IDBRequest).result));\n req.onerror = eventRejectHandler(reject);\n });\n }\n };\n }\n\n const {schema, hasGetAll} = extractSchema(db, tmpTrans);\n const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema));\n const tableMap: {[name: string]: DBCoreTable} = {};\n tables.forEach(table => tableMap[table.name] = table);\n return {\n stack: \"dbcore\",\n \n transaction: db.transaction.bind(db),\n\n table(name: string) {\n const result = tableMap[name];\n if (!result) throw new Error(`Table '${name}' not found`);\n return tableMap[name];\n },\n\n MIN_KEY: -Infinity,\n\n MAX_KEY: getMaxKey(IdbKeyRange),\n\n schema\n\n };\n}\n","import { Dexie } from './';\nimport { createDBCore } from '../../dbcore/dbcore-indexeddb';\nimport { DBCore } from '../../public/types/dbcore';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { DexieStacks, Middleware } from '../../public/types/middleware';\nimport { exceptions } from '../../errors';\n\nfunction createMiddlewareStack(\n stackImpl: {stack: string},\n middlewares: Middleware<{stack: string}>[]): TStack {\n return middlewares.reduce((down, {create}) => ({...down, ...create(down)}), stackImpl) as TStack;\n} \n\nfunction createMiddlewareStacks(\n middlewares: {[StackName in keyof DexieStacks]?: Middleware[]},\n idbdb: IDBDatabase,\n {IDBKeyRange, indexedDB}: DexieDOMDependencies,\n tmpTrans: IDBTransaction): {[StackName in keyof DexieStacks]?: DexieStacks[StackName]}\n{\n const dbcore = createMiddlewareStack(\n createDBCore(idbdb, IDBKeyRange, tmpTrans),\n middlewares.dbcore);\n \n // TODO: Create other stacks the same way as above. They might be dependant on the result\n // of creating dbcore stack.\n\n return {\n dbcore\n };\n}\n\nexport function generateMiddlewareStacks(db: Dexie, tmpTrans: IDBTransaction) {\n const idbdb = tmpTrans.db;\n const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n db.core = stacks.dbcore!;\n db.tables.forEach(table => {\n const tableName = table.name;\n if (db.core.schema.tables.some(tbl => tbl.name === tableName)) {\n table.core = db.core.table(tableName);\n if (db[tableName] instanceof db.Table) {\n db[tableName].core = table.core;\n }\n }\n });\n}\n","import { Dexie } from '../dexie';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { _global } from \"../../globals/global\";\nimport { setProp, keys, slice, isArray, shallowClone, isAsyncFunction, defineProperty, getPropertyDescriptor } from '../../functions/utils';\nimport { Transaction } from '../transaction';\nimport { Version } from './version';\nimport Promise, { PSD, newScope, NativePromise, decrementExpectedAwaits, incrementExpectedAwaits } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { IndexSpec } from '../../public/types/index-spec';\nimport { createIndexSpec, nameFromKeyPath } from '../../helpers/index-spec';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { generateMiddlewareStacks } from '../dexie/generate-middleware-stacks';\nimport { debug } from '../../helpers/debug';\nimport { PromiseExtended } from '../../public/types/promise-extended';\n\nexport function setApiOnPlace(db: Dexie, objs: Object[], tableNames: string[], dbschema: DbSchema) {\n tableNames.forEach(tableName => {\n const schema = dbschema[tableName];\n objs.forEach(obj => {\n const propDesc = getPropertyDescriptor(obj, tableName);\n if (!propDesc || (\"value\" in propDesc && propDesc.value === undefined)) {\n // Either the prop is not declared, or it is initialized to undefined.\n if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n // obj is a Transaction prototype (or prototype of a subclass to Transaction)\n // Make the API a getter that returns this.table(tableName)\n setProp(obj, tableName, {\n get(this: Transaction) { return this.table(tableName); },\n set(value: any) {\n // Issue #1039\n // Let \"this.schema = dbschema;\" and other props in transaction constructor work even if there's a name collision with the table name.\n defineProperty(this, tableName, {value, writable: true, configurable: true, enumerable: true});\n }\n });\n } else {\n // Table will not be bound to a transaction (will use Dexie.currentTransaction)\n obj[tableName] = new db.Table(tableName, schema);\n }\n }\n });\n });\n}\n\nexport function removeTablesApi(db: Dexie, objs: Object[]) {\n objs.forEach(obj => {\n for (let key in obj) {\n if (obj[key] instanceof db.Table) delete obj[key];\n }\n });\n}\n\nexport function lowerVersionFirst(a: Version, b: Version) {\n return a._cfg.version - b._cfg.version;\n}\n\nexport function runUpgraders(db: Dexie, oldVersion: number, idbUpgradeTrans: IDBTransaction, reject) {\n const globalSchema = db._dbSchema;\n if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) {\n globalSchema.$meta = createTableSchema(\"$meta\", parseIndexSyntax(\"\")[0], []);\n db._storeNames.push('$meta');\n }\n const trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n trans.create(idbUpgradeTrans);\n trans._completion.catch(reject);\n const rejectTransaction = trans._reject.bind(trans);\n const transless = PSD.transless || PSD;\n newScope(() => {\n PSD.trans = trans;\n PSD.transless = transless;\n if (oldVersion === 0) {\n // Create tables:\n keys(globalSchema).forEach(tableName => {\n createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n });\n generateMiddlewareStacks(db, idbUpgradeTrans);\n Promise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction);\n } else {\n generateMiddlewareStacks(db, idbUpgradeTrans);\n return getExistingVersion(db, trans, oldVersion)\n .then(oldVersion => updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans))\n .catch(rejectTransaction);\n }\n });\n}\n\nexport type UpgradeQueueItem = (idbtrans: IDBTransaction) => PromiseLike | void;\n\nexport function patchCurrentVersion(db: Dexie, idbUpgradeTrans: IDBTransaction) {\n createMissingTables(db._dbSchema, idbUpgradeTrans);\n if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) {\n // Rolled over to the next 10-ies due to many schema upgrades without bumping version.\n // No problem! We pin the database to its expected version by adding the $meta table so that next\n // time the programmer bumps the version and attaches, an upgrader, that upgrader will indeed run,\n // as well any further upgraders coming after that.\n idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version');\n }\n const globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans);\n const diff = getSchemaDiff(globalSchema, db._dbSchema);\n for (const tableChange of diff.change) {\n if (tableChange.change.length || tableChange.recreate) {\n console.warn(`Unable to patch indexes of table ${tableChange.name} because it has changes on the type of index or primary key.`);\n return;\n }\n const store = idbUpgradeTrans.objectStore(tableChange.name);\n tableChange.add.forEach(idx => {\n if (debug) console.debug(`Dexie upgrade patch: Creating missing index ${tableChange.name}.${idx.src}`);\n addIndex(store, idx);\n });\n }\n}\n\nfunction getExistingVersion(db: Dexie, trans: Transaction, oldVersion: number): PromiseExtended {\n // In normal case, existing version is the native installed version divided by 10.\n // However, in case more than 10 schema changes have been made on the same version (such as while\n // developing an app), the native version may have passed beyond a multiple of 10 within the same version.\n // When that happens, a table $meta will have been created, containing a single entry with key \"version\"\n // and the value of the real old version to use when running upgraders going forward.\n if (trans.storeNames.includes('$meta')) {\n return trans.table('$meta').get('version').then(metaVersion => {\n return metaVersion != null ? metaVersion : oldVersion\n })\n } else {\n return Promise.resolve(oldVersion);\n }\n}\n\nfunction updateTablesAndIndexes(\n db: Dexie,\n oldVersion: number,\n trans: Transaction,\n idbUpgradeTrans: IDBTransaction)\n{\n // Upgrade version to version, step-by-step from oldest to newest version.\n // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version)\n const queue: UpgradeQueueItem[] = [];\n const versions = db._versions;\n let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n let anyContentUpgraderHasRun = false;\n \n const versToRun = versions.filter(v => v._cfg.version >= oldVersion);\n if (versToRun.length === 0) {\n // Important not to continue at this point.\n // Coming here means we've already patched schema in patchCurrentVersion() after having\n // incremented native version to a value above the declared highest version.\n // When being in this mode, it means that there might be different versions the db competing\n // about it with different version of the schema. Therefore, we must avoid deleting tables\n // or indexes here so that both versions can co-exist until the application has been upgraded to\n // a version that declares no lower than the native version.\n // If after that, a downgrade happens again, we'll end up here again, accepting both versions\n // And we'll stay in this state until app developer releases a new declared version.\n return Promise.resolve(); \n }\n \n versToRun.forEach(version => {\n queue.push(() => {\n const oldSchema = globalSchema;\n const newSchema = version._cfg.dbschema;\n adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n\n globalSchema = db._dbSchema = newSchema;\n\n const diff = getSchemaDiff(oldSchema, newSchema);\n // Add tables \n diff.add.forEach(tuple => {\n createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n });\n // Change tables\n diff.change.forEach(change => {\n if (change.recreate) {\n throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n } else {\n const store = idbUpgradeTrans.objectStore(change.name);\n // Add indexes\n change.add.forEach(idx => addIndex(store, idx));\n // Update indexes\n change.change.forEach(idx => {\n store.deleteIndex(idx.name);\n addIndex(store, idx);\n });\n // Delete indexes\n change.del.forEach(idxName => store.deleteIndex(idxName));\n }\n });\n\n const contentUpgrade = version._cfg.contentUpgrade;\n\n if (contentUpgrade && version._cfg.version > oldVersion) {\n // Update db.core with new tables and indexes:\n generateMiddlewareStacks(db, idbUpgradeTrans);\n trans._memoizedTables = {}; // Invalidate memoization as transaction shape may change between versions.\n\n anyContentUpgraderHasRun = true;\n\n // Add to-be-deleted tables to contentUpgrade transaction\n let upgradeSchema = shallowClone(newSchema);\n diff.del.forEach(table => {\n upgradeSchema[table] = oldSchema[table];\n });\n\n // Safe to affect Transaction.prototype globally in this moment,\n // because when this code runs, there may not be any other code\n // that can access any transaction instance, else than this particular\n // upgrader function.\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema);\n trans.schema = upgradeSchema;\n\n // Support for native async await.\n const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade);\n if (contentUpgradeIsAsync) {\n incrementExpectedAwaits();\n }\n \n let returnValue: any;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = contentUpgrade(trans);\n if (returnValue) {\n if (contentUpgradeIsAsync) {\n // contentUpgrade is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n }\n }\n });\n return (returnValue && typeof returnValue.then === 'function' ?\n Promise.resolve(returnValue) : promiseFollowed.then(()=>returnValue));\n }\n });\n queue.push(idbtrans => {\n const newSchema = version._cfg.dbschema;\n // Delete old tables\n deleteRemovedTables(newSchema, idbtrans);\n // Restore the final API\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);\n trans.schema = db._dbSchema;\n });\n // Maintain the $meta table after this version's tables and indexes has been created and content upgraders have run.\n queue.push(idbtrans => {\n if (db.idbdb.objectStoreNames.contains('$meta')) {\n if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) {\n // Remove $meta table if it's no more needed - we are in line with the native version\n db.idbdb.deleteObjectStore('$meta');\n delete db._dbSchema.$meta;\n db._storeNames = db._storeNames.filter(name => name !== '$meta');\n } else {\n // We're still not in line with the native version. Make sure to update the virtual version\n // to the successfully run version\n idbtrans.objectStore('$meta').put(version._cfg.version, 'version');\n }\n }\n }); \n });\n\n // Now, create a queue execution engine\n function runQueue() {\n return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n Promise.resolve();\n }\n\n return runQueue().then(() => {\n createMissingTables(globalSchema, idbUpgradeTrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version)\n });\n}\n\nexport interface SchemaDiff {\n del: string[],\n add: [string, TableSchema][];\n change: TableSchemaDiff[];\n}\n\nexport interface TableSchemaDiff {\n name: string,\n recreate: boolean,\n del: string[],\n add: IndexSpec[],\n change: IndexSpec[]\n}\n\nexport function getSchemaDiff(oldSchema: DbSchema, newSchema: DbSchema): SchemaDiff {\n const diff: SchemaDiff = {\n del: [], // Array of table names\n add: [], // Array of [tableName, newDefinition]\n change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}\n };\n let table: string;\n for (table in oldSchema) {\n if (!newSchema[table]) diff.del.push(table);\n }\n for (table in newSchema) {\n const oldDef = oldSchema[table],\n newDef = newSchema[table];\n if (!oldDef) {\n diff.add.push([table, newDef]);\n } else {\n const change = {\n name: table,\n def: newDef,\n recreate: false,\n del: [],\n add: [],\n change: []\n };\n if (\n (\n // compare keyPaths no matter if string or string[]\n // compare falsy keypaths same no matter if they are null or empty string.\n ''+(oldDef.primKey.keyPath||'')\n ) !== (\n ''+(newDef.primKey.keyPath||'')\n ) ||\n // Compare the autoIncrement flag also\n (oldDef.primKey.auto !== newDef.primKey.auto))\n {\n // Primary key has changed. Remove and re-add table.\n change.recreate = true;\n diff.change.push(change);\n } else {\n // Same primary key. Just find out what differs:\n const oldIndexes = oldDef.idxByName;\n const newIndexes = newDef.idxByName;\n let idxName: string;\n for (idxName in oldIndexes) {\n if (!newIndexes[idxName]) change.del.push(idxName);\n }\n for (idxName in newIndexes) {\n const oldIdx = oldIndexes[idxName],\n newIdx = newIndexes[idxName];\n if (!oldIdx) change.add.push(newIdx);\n else if (oldIdx.src !== newIdx.src) change.change.push(newIdx);\n }\n if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n diff.change.push(change);\n }\n }\n }\n }\n return diff;\n}\n\nexport function createTable(\n idbtrans: IDBTransaction,\n tableName: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n) {\n const store = idbtrans.db.createObjectStore(\n tableName,\n primKey.keyPath ?\n { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n { autoIncrement: primKey.auto }\n );\n indexes.forEach(idx => addIndex(store, idx));\n return store;\n}\n\nexport function createMissingTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n keys(newSchema).forEach(tableName => {\n if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n if (debug) console.debug('Dexie: Creating missing table', tableName);\n createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n }\n });\n}\n\nexport function deleteRemovedTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName =>\n newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName));\n}\n\nexport function addIndex(store: IDBObjectStore, idx: IndexSpec) {\n store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\n\nfunction buildGlobalSchema(\n db: Dexie,\n idbdb: IDBDatabase,\n tmpTrans: IDBTransaction\n) {\n const globalSchema = {};\n const dbStoreNames = slice(idbdb.objectStoreNames, 0);\n dbStoreNames.forEach(storeName => {\n const store = tmpTrans.objectStore(storeName);\n let keyPath = store.keyPath;\n const primKey = createIndexSpec(\n nameFromKeyPath(keyPath),\n keyPath || \"\",\n true,\n false,\n !!store.autoIncrement,\n keyPath && typeof keyPath !== \"string\",\n true\n );\n const indexes: IndexSpec[] = [];\n for (let j = 0; j < store.indexNames.length; ++j) {\n const idbindex = store.index(store.indexNames[j]);\n keyPath = idbindex.keyPath;\n var index = createIndexSpec(\n idbindex.name,\n keyPath,\n !!idbindex.unique,\n !!idbindex.multiEntry,\n false,\n keyPath && typeof keyPath !== \"string\",\n false\n );\n indexes.push(index);\n }\n globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n });\n return globalSchema;\n}\n\nexport function readGlobalSchema(db: Dexie, idbdb: IDBDatabase, tmpTrans: IDBTransaction) {\n db.verno = idbdb.version / 10;\n const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);\n db._storeNames = slice(idbdb.objectStoreNames, 0);\n setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\n\nexport function verifyInstalledSchema(db: Dexie, tmpTrans: IDBTransaction): boolean {\n const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans);\n const diff = getSchemaDiff(installedSchema, db._dbSchema);\n return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length));\n}\n\nexport function adjustToExistingIndexNames(db: Dexie, schema: DbSchema, idbtrans: IDBTransaction) {\n // Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db\n const storeNames = idbtrans.db.objectStoreNames;\n\n for (let i = 0; i < storeNames.length; ++i) {\n const storeName = storeNames[i];\n const store = idbtrans.objectStore(storeName);\n db._hasGetAll = 'getAll' in store;\n\n for (let j = 0; j < store.indexNames.length; ++j) {\n const indexName = store.indexNames[j];\n const keyPath = store.index(indexName).keyPath;\n const dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n if (schema[storeName]) {\n const indexSpec = schema[storeName].idxByName[dexieName];\n if (indexSpec) {\n indexSpec.name = indexName;\n delete schema[storeName].idxByName[dexieName];\n schema[storeName].idxByName[indexName] = indexSpec;\n }\n }\n }\n }\n\n // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579\n if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604)\n {\n db._hasGetAll = false;\n }\n}\n\nexport function parseIndexSyntax(primKeyAndIndexes: string): IndexSpec[] {\n return primKeyAndIndexes.split(',').map((index, indexNum) => {\n index = index.trim();\n const name = index.replace(/([&*]|\\+\\+)/g, \"\"); // Remove \"&\", \"++\" and \"*\"\n // Let keyPath of \"[a+b]\" be [\"a\",\"b\"]:\n const keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n\n return createIndexSpec(\n name,\n keyPath || null,\n /\\&/.test(index),\n /\\*/.test(index),\n /\\+\\+/.test(index),\n isArray(keyPath),\n indexNum === 0\n );\n });\n}\n","import { Version as IVersion } from '../../public/types/version';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { extend, keys } from '../../functions/utils';\nimport { Dexie } from '../dexie';\nimport { Transaction } from '../transaction';\nimport { removeTablesApi, setApiOnPlace, parseIndexSyntax } from './schema-helpers';\nimport { exceptions } from '../../errors';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\n\n/** class Version\n *\n * https://dexie.org/docs/Version/Version\n */\nexport class Version implements IVersion {\n db: Dexie;\n _cfg: {\n version: number,\n storesSource: { [tableName: string]: string | null },\n dbschema: DbSchema,\n tables: {},\n contentUpgrade: Function | null\n }\n\n _parseStoresSpec(stores: { [tableName: string]: string | null }, outSchema: DbSchema): any {\n keys(stores).forEach(tableName => {\n if (stores[tableName] !== null) {\n var indexes = parseIndexSyntax(stores[tableName]);\n var primKey = indexes.shift();\n primKey.unique = true;\n if (primKey.multi) throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n indexes.forEach(idx => {\n if (idx.auto) throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n if (!idx.keyPath) throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n });\n outSchema[tableName] = createTableSchema(tableName, primKey, indexes);\n }\n });\n }\n\n stores(stores: { [key: string]: string | null; }): IVersion {\n const db = this.db;\n this._cfg.storesSource = this._cfg.storesSource ?\n extend(this._cfg.storesSource, stores) :\n stores;\n const versions = db._versions;\n\n // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax.\n const storesSpec: { [key: string]: string; } = {};\n let dbschema = {};\n versions.forEach(version => { // 'versions' is always sorted by lowest version first.\n extend(storesSpec, version._cfg.storesSource);\n dbschema = (version._cfg.dbschema = {});\n version._parseStoresSpec(storesSpec, dbschema);\n });\n // Update the latest schema to this version\n db._dbSchema = dbschema;\n // Update APIs\n removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);\n setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n db._storeNames = keys(dbschema);\n return this;\n }\n\n upgrade(upgradeFunction: (trans: Transaction) => PromiseLike | void): Version {\n this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction);\n return this;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Version } from './version';\n\nexport interface VersionConstructor {\n new(versionNumber: number): Version;\n prototype: Version;\n}\n\n/** Generates a Version constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createVersionConstructor(db: Dexie) {\n return makeClassConstructor(\n Version.prototype,\n\n function Version(this: Version, versionNumber: number) {\n this.db = db;\n this._cfg = {\n version: versionNumber,\n storesSource: null,\n dbschema: {},\n tables: {},\n contentUpgrade: null\n };\n });\n\n}\n","import { Dexie } from \"../classes/dexie/dexie\";\nimport { Table } from \"../public/types/table\";\nimport { DBNAMES_DB } from \"../globals/constants\";\nimport { DexieDOMDependencies } from \"../public/types/dexie-dom-dependencies\";\nimport { nop } from \"../functions/chaining-functions\";\n\ntype IDBKeyNamesVar = typeof IDBKeyRange;\n\nfunction getDbNamesTable(indexedDB: IDBFactory, IDBKeyRange: IDBKeyNamesVar) {\n let dbNamesDB = indexedDB[\"_dbNamesDB\"];\n if (!dbNamesDB) {\n dbNamesDB = indexedDB[\"_dbNamesDB\"] = new Dexie(DBNAMES_DB, {\n addons: [],\n indexedDB,\n IDBKeyRange,\n });\n dbNamesDB.version(1).stores({ dbnames: \"name\" });\n }\n return dbNamesDB.table(\"dbnames\") as Table<{ name: string }, string>;\n}\n\nfunction hasDatabasesNative(indexedDB: IDBFactory) {\n return indexedDB && typeof indexedDB.databases === \"function\";\n}\n\nexport function getDatabaseNames({\n indexedDB,\n IDBKeyRange,\n}: DexieDOMDependencies) {\n return hasDatabasesNative(indexedDB)\n ? Promise.resolve(indexedDB.databases()).then((infos) =>\n infos\n // Select name prop of infos:\n .map((info) => info.name)\n // Filter out DBNAMES_DB as previous Dexie or browser version would not have included it in the result.\n .filter((name) => name !== DBNAMES_DB)\n )\n : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys();\n}\n\nexport function _onDatabaseCreated(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).put({name}).catch(nop);\n}\n\nexport function _onDatabaseDeleted(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop);\n}\n","import { newScope } from '../../helpers/promise';\nimport { PSD } from '../../helpers/promise';\n\nexport function vip (fn) {\n // To be used by subscribers to the on('ready') event.\n // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing.\n // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD\n // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since\n // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that.\n // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip()\n // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by\n // the caller will not resolve until database is opened.\n return newScope(function () {\n PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing.\n return fn();\n });\n}\n\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import { cmp } from \"../functions/cmp\";\nimport { extend, iteratorSymbol, props } from '../functions/utils';\nimport { IndexableType } from '../public';\nimport {\n EmptyRange,\n IntervalTree,\n IntervalTreeNode,\n RangeSetConstructor,\n RangeSetPrototype,\n} from \"../public/types/rangeset\";\n\n/* An interval tree implementation to efficiently detect overlapping ranges of queried indexes.\n *\n * https://en.wikipedia.org/wiki/Interval_tree\n * \n */\n\nfunction isEmptyRange(node: IntervalTree | {from: IndexableType, to: IndexableType}): node is EmptyRange {\n return !(\"from\" in node);\n}\n\nexport type RangeSet = RangeSetPrototype & IntervalTree;\n\nexport const RangeSet = function(fromOrTree: any, to?: any) {\n if (this) {\n // Called with new()\n extend(this, arguments.length ? {d:1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree} : {d:0});\n } else {\n // Called without new()\n const rv = new RangeSet();\n if (fromOrTree && (\"d\" in fromOrTree)) {\n extend(rv, fromOrTree);\n }\n return rv;\n }\n} as RangeSetConstructor;\n\nprops(RangeSet.prototype, {\n add(rangeSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n mergeRanges(this, rangeSet);\n return this;\n },\n addKey(key: IndexableType) {\n addRange(this, key, key);\n return this;\n },\n addKeys(keys: IndexableType[]) {\n keys.forEach(key => addRange(this, key, key));\n return this;\n },\n\n [iteratorSymbol](): Iterator {\n return getRangeSetIterator(this);\n }\n});\n\nfunction addRange(target: IntervalTree, from: IndexableType, to: IndexableType) {\n const diff = cmp(from, to);\n // cmp() returns NaN if one of the args are IDB-invalid keys.\n // Avoid storing invalid keys in rangeset:\n if (isNaN(diff)) return;\n\n // Caller is trying to add a range where from is greater than to:\n if (diff > 0) throw RangeError();\n \n if (isEmptyRange(target)) return extend(target, { from, to, d: 1 });\n const left = target.l;\n const right = target.r;\n if (cmp(to, target.from) < 0) {\n left\n ? addRange(left, from, to)\n : (target.l = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.to) > 0) {\n right\n ? addRange(right, from, to)\n : (target.r = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n // Now we have some kind of overlap. We will be able to merge the new range into the node or let it be swallowed.\n\n // Grow left?\n if (cmp(from, target.from) < 0) {\n target.from = from;\n target.l = null; // Cut off for now. Re-add later.\n target.d = right ? right.d + 1 : 1;\n }\n // Grow right?\n if (cmp(to, target.to) > 0) {\n target.to = to;\n target.r = null; // Cut off for now. Re-add later.\n target.d = target.l ? target.l.d + 1 : 1;\n }\n const rightWasCutOff = !target.r;\n // Re-add left?\n if (left && !target.l) {\n //Ranges to the left may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, left);\n }\n // Re-add right?\n if (right && rightWasCutOff) {\n //Ranges to the right may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, right);\n }\n}\n\nexport function mergeRanges(target: IntervalTree, newSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n function _addRangeSet(\n target: IntervalTree,\n { from, to, l, r }: IntervalTreeNode | {from: IndexableType, to: IndexableType, l?: undefined, r?: undefined}\n ) {\n addRange(target, from, to);\n if (l) _addRangeSet(target, l);\n if (r) _addRangeSet(target, r);\n }\n\n if(!isEmptyRange(newSet)) _addRangeSet(target, newSet);\n}\n\nexport function rangesOverlap(\n rangeSet1: IntervalTree,\n rangeSet2: IntervalTree\n): boolean {\n // Start iterating other from scratch.\n const i1 = getRangeSetIterator(rangeSet2);\n let nextResult1 = i1.next();\n if (nextResult1.done) return false;\n let a = nextResult1.value;\n\n // Start iterating this from start of other\n const i2 = getRangeSetIterator(rangeSet1);\n let nextResult2 = i2.next(a.from); // Start from beginning of other range\n let b = nextResult2.value;\n\n while (!nextResult1.done && !nextResult2.done) {\n if (cmp(b!.from, a.to) <= 0 && cmp(b!.to, a.from) >= 0) return true;\n cmp(a.from, b!.from) < 0\n ? (a = (nextResult1 = i1.next(b!.from)).value!) // a is behind. forward it to beginning of next b-range\n : (b = (nextResult2 = i2.next(a.from)).value); // b is behind. forward it to beginning of next a-range\n }\n return false;\n}\n\ntype RangeSetIteratorState =\n | {\n up?: RangeSetIteratorState;\n n: IntervalTreeNode;\n s: 0 | 1 | 2 | 3;\n }\n | undefined\n | null;\nexport function getRangeSetIterator(\n node: EmptyRange | IntervalTreeNode\n): Generator {\n let state: RangeSetIteratorState = isEmptyRange(node) ? null : { s: 0, n: node };\n\n return {\n next(key?) {\n const keyProvided = arguments.length > 0;\n while (state) {\n switch (state.s) {\n case 0:\n // Initial state for node.\n // Fast forward to leftmost node.\n state.s = 1;\n if (keyProvided) {\n while (state.n.l && cmp(key, state.n.from) < 0)\n state = { up: state, n: state.n.l, s: 1 };\n } else {\n while (state.n.l) state = { up: state, n: state.n.l, s: 1 };\n }\n // intentionally fall into case 1:\n case 1:\n // We're on a node where it's left part is already handled or does not exist.\n state.s = 2;\n if (!keyProvided || cmp(key, state.n.to) <= 0)\n return { value: state.n, done: false };\n case 2:\n // We've emitted our node and should continue with the right part or let parent take over from it's state 1\n if (state.n.r) {\n state.s = 3; // So when child is done, we know we're done.\n state = { up: state, n: state.n.r, s: 0 };\n continue; // Will fall in to case 0 with fast forward to left leaf of this subtree.\n }\n // intentionally fall into case 3:\n case 3:\n state = state.up;\n }\n }\n return { done: true };\n },\n } as Generator;\n}\n\nfunction rebalance(target: IntervalTreeNode) {\n const diff = (target.r?.d || 0) - (target.l?.d || 0);\n const r = diff > 1 ? \"r\" : diff < -1 ? \"l\" : \"\";\n if (r) {\n\n // Rotate (https://en.wikipedia.org/wiki/Tree_rotation)\n //\n // \n // [OLDROOT]\n // [OLDROOT.L] [NEWROOT]\n // [NEWROOT.L] [NEWROOT.R]\n //\n // Is going to become:\n //\n // \n // [NEWROOT]\n // [OLDROOT] [NEWROOT.R]\n // [OLDROOT.L] [NEWROOT.L] \n\n // * clone now has the props of OLDROOT\n // Plan:\n // * target must be given the props of NEWROOT\n // * target[l] must point to a new OLDROOT\n // * target[r] must point to NEWROOT.R\n // * OLDROOT[r] must point to NEWROOT.L\n const l = r === \"r\" ? \"l\" : \"r\"; // Support both left/right rotation\n const rootClone = { ...target };\n // We're gonna copy props from target's right node into target so that target will\n // have same range as old target[r] (instead of changing pointers, we copy values.\n // that way we do not need to adjust pointers in parents).\n const oldRootRight = target[r]; \n target.from = oldRootRight.from;\n target.to = oldRootRight.to;\n target[r] = oldRootRight[r];\n rootClone[r] = oldRootRight[l];\n target[l] = rootClone;\n rootClone.d = computeDepth(rootClone);\n }\n target.d = computeDepth(target);\n}\n\nfunction computeDepth({ r, l }: Pick) {\n return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;\n}\n","import { cloneSimpleObjectTree, deepClone, keys, objectIsEmpty } from \"../functions/utils\";\nimport { mergeRanges, RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\n\nexport function extendObservabilitySet(\n target: ObservabilitySet,\n newSet: ObservabilitySet\n): ObservabilitySet {\n keys(newSet).forEach(part => {\n if (target[part]) mergeRanges(target[part], newSet[part]);\n else target[part] = cloneSimpleObjectTree(newSet[part]); // Somewhat faster\n });\n return target;\n}\n","import { rangesOverlap } from '../helpers/rangeset';\nimport { ObservabilitySet } from '../public/types/db-events';\n\nexport function obsSetsOverlap(os1: ObservabilitySet, os2: ObservabilitySet) {\n return os1.all || os2.all || Object.keys(os1).some(\n (key) => os2[key] && rangesOverlap(os2[key], os1[key])\n );\n}\n","import { type GlobalQueryCache } from \"../../public/types/cache\";\n\nexport const cache: GlobalQueryCache = {}\n","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport { extendObservabilitySet } from '../extend-observability-set';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { cache } from './cache';\n\nlet unsignaledParts: ObservabilitySet = {};\nlet isTaskEnqueued = false;\n\nexport function signalSubscribersLazily(part: ObservabilitySet, optimistic = false) {\n extendObservabilitySet(unsignaledParts, part);\n if (!isTaskEnqueued) {\n isTaskEnqueued = true;\n setTimeout(() => {\n isTaskEnqueued = false;\n const parts = unsignaledParts;\n unsignaledParts = {};\n signalSubscribersNow(parts, false);\n }, 0);\n }\n}\n\nexport function signalSubscribersNow(\n updatedParts: ObservabilitySet,\n deleteAffectedCacheEntries = false\n) {\n const queriesToSignal = new Set<() => void>();\n if (updatedParts.all) {\n // Signal all subscribers to requery.\n for (const tblCache of Object.values(cache)) {\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n } else {\n for (const key in updatedParts) {\n const parts = /^idb\\:\\/\\/(.*)\\/(.*)\\//.exec(key);\n if (parts) {\n const [, dbName, tableName] = parts;\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (tblCache)\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n }\n }\n // Now when affected cache entries are removed, signal collected subscribers to requery.\n queriesToSignal.forEach((requery) => requery());\n}\n\nfunction collectTableSubscribers(\n tblCache: TblQueryCache,\n updatedParts: ObservabilitySet,\n outQueriesToSignal: Set<() => void>,\n deleteAffectedCacheEntries: boolean\n) {\n const updatedEntryLists: [string, CacheEntry[]][] = [];\n for (const [indexName, entries] of Object.entries(tblCache.queries.query)) {\n const filteredEntries: CacheEntry[] = [];\n for (const entry of entries) {\n if (obsSetsOverlap(updatedParts, entry.obsSet)) {\n // This query is affected by the mutation. Remove it from cache\n // and signal all subscribers to requery.\n entry.subscribers.forEach((requery) => outQueriesToSignal.add(requery));\n } else if (deleteAffectedCacheEntries) {\n filteredEntries.push(entry);\n }\n }\n // Collect cache entries to be updated\n if (deleteAffectedCacheEntries)\n updatedEntryLists.push([indexName, filteredEntries]);\n }\n if (deleteAffectedCacheEntries) {\n for (const [indexName, filteredEntries] of updatedEntryLists) {\n tblCache.queries.query[indexName] = filteredEntries;\n }\n }\n}\n","import { Dexie } from './dexie';\nimport * as Debug from '../../helpers/debug';\nimport { rejection } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { eventRejectHandler, preventDefault } from '../../functions/event-wrappers';\nimport Promise, { wrap } from '../../helpers/promise';\nimport { connections } from '../../globals/constants';\nimport { runUpgraders, readGlobalSchema, adjustToExistingIndexNames, verifyInstalledSchema, patchCurrentVersion } from '../version/schema-helpers';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { _onDatabaseCreated } from '../../helpers/database-enumerator';\nimport { vip } from './vip';\nimport { promisableChain, nop } from '../../functions/chaining-functions';\nimport { generateMiddlewareStacks } from './generate-middleware-stacks';\nimport { slice } from '../../functions/utils';\nimport safari14Workaround from 'safari-14-idb-fix';\nimport { type ObservabilitySet } from '../../public/types/db-events';\nimport { RangeSet } from '../../helpers/rangeset';\nimport { DEXIE_STORAGE_MUTATED_EVENT_NAME, globalEvents } from '../../globals/global-events';\nimport { signalSubscribersNow } from '../../live-query/cache/signalSubscribers';\n\nexport function dexieOpen (db: Dexie) {\n const state = db._state;\n const {indexedDB} = db._deps;\n if (state.isBeingOpened || db.idbdb)\n return state.dbReadyPromise.then(() => state.dbOpenError ?\n rejection (state.dbOpenError) :\n db);\n state.isBeingOpened = true;\n state.dbOpenError = null;\n state.openComplete = false;\n const openCanceller = state.openCanceller;\n let nativeVerToOpen = Math.round(db.verno * 10);\n let schemaPatchMode = false;\n\n function throwIfCancelled() {\n // If state.openCanceller object reference is replaced, it means db.close() has been called,\n // meaning this open flow should be cancelled.\n if (state.openCanceller !== openCanceller) throw new exceptions.DatabaseClosed('db.open() was cancelled');\n }\n \n // Function pointers to call when the core opening process completes.\n let resolveDbReady = state.dbReadyResolve,\n // upgradeTransaction to abort on failure.\n upgradeTransaction: (IDBTransaction | null) = null,\n wasCreated = false;\n\n const tryOpenDB = () => new Promise((resolve, reject) => {\n throwIfCancelled();\n // If no API, throw!\n if (!indexedDB) throw new exceptions.MissingAPI();\n const dbName = db.name;\n \n const req = state.autoSchema || !nativeVerToOpen ?\n indexedDB.open(dbName) :\n indexedDB.open(dbName, nativeVerToOpen);\n if (!req) throw new exceptions.MissingAPI(); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134\n req.onerror = eventRejectHandler(reject);\n req.onblocked = wrap(db._fireOnBlocked);\n req.onupgradeneeded = wrap (e => {\n upgradeTransaction = req.transaction;\n if (state.autoSchema && !db._options.allowEmptyDB) { // Unless an addon has specified db._allowEmptyDB, lets make the call fail.\n // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases.\n // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we\n // do not create a new database by accident here.\n req.onerror = preventDefault; // Prohibit onabort error from firing before we're done!\n upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.)\n // Close database and delete it.\n req.result.close();\n const delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here!\n delreq.onsuccess = delreq.onerror = wrap(() => {\n reject (new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`));\n });\n } else {\n upgradeTransaction.onerror = eventRejectHandler(reject);\n const oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix.\n wasCreated = oldVer < 1;\n db.idbdb = req.result;\n if (schemaPatchMode) {\n patchCurrentVersion(db, upgradeTransaction);\n }\n runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n }\n }, reject);\n \n req.onsuccess = wrap (() => {\n // Core opening procedure complete. Now let's just record some stuff.\n upgradeTransaction = null;\n const idbdb = db.idbdb = req.result;\n\n const objectStoreNames = slice(idbdb.objectStoreNames);\n if (objectStoreNames.length > 0) try {\n const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n if (state.autoSchema) readGlobalSchema(db, idbdb, tmpTrans);\n else {\n adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) {\n console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this.`);\n idbdb.close();\n nativeVerToOpen = idbdb.version + 1;\n schemaPatchMode = true;\n return resolve (tryOpenDB()); // Try again with new version (nativeVerToOpen\n }\n }\n generateMiddlewareStacks(db, tmpTrans);\n } catch (e) {\n // Safari 8 may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120.\n // BUGBUG: It will bail out anyway as of Dexie 3.\n // Should we support Safari 8 anymore? Believe all\n // Dexie users use the shim for that platform anyway?!\n // If removing Safari 8 support, go ahead and remove the safariMultiStoreFix() function\n // as well as absurd upgrade version quirk for Safari.\n }\n \n connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari.\n \n idbdb.onversionchange = wrap(ev => {\n state.vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari)\n db.on(\"versionchange\").fire(ev);\n });\n \n idbdb.onclose = wrap(ev => {\n db.on(\"close\").fire(ev);\n });\n\n if (wasCreated) _onDatabaseCreated(db._deps, dbName);\n\n resolve();\n\n }, reject);\n }).catch(err => {\n switch (err?.name) {\n case \"UnknownError\":\n if (state.PR1398_maxLoop > 0) {\n // Bug in Chrome after clearing site data\n // https://github.com/dexie/Dexie.js/issues/543#issuecomment-1795736695\n state.PR1398_maxLoop--;\n console.warn('Dexie: Workaround for Chrome UnknownError on open()');\n return tryOpenDB();\n }\n break;\n case \"VersionError\":\n if (nativeVerToOpen > 0) {\n nativeVerToOpen = 0;\n return tryOpenDB();\n }\n break;\n }\n return Promise.reject(err);\n });\n \n // safari14Workaround = Workaround by jakearchibald for new nasty bug in safari 14.\n return Promise.race([\n openCanceller,\n (typeof navigator === 'undefined' ? Promise.resolve() : safari14Workaround()).then(tryOpenDB)\n ]).then(() => {\n // Before finally resolving the dbReadyPromise and this promise,\n // call and await all on('ready') subscribers:\n // Dexie.vip() makes subscribers able to use the database while being opened.\n // This is a must since these subscribers take part of the opening procedure.\n throwIfCancelled();\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>db.on.ready.fire(db.vip))).then(function fireRemainders() {\n if (state.onReadyBeingFired.length > 0) {\n // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed.\n let remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>remainders(db.vip))).then(fireRemainders)\n }\n });\n }).finally(()=>{\n if (state.openCanceller === openCanceller) {\n // Only modify state if not cancelled in the mean time.\n state.onReadyBeingFired = null;\n state.isBeingOpened = false;\n }\n }).catch(err => {\n state.dbOpenError = err; // Record the error. It will be used to reject further promises of db operations.\n try {\n // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit.\n upgradeTransaction && upgradeTransaction.abort();\n } catch { }\n if (openCanceller === state.openCanceller) {\n // Still in the same open flow - The error reason was not due to external call to db.close().\n // Make sure to call db.close() to finalize resources.\n db._close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh.\n }\n return rejection (err);\n }).finally(()=>{\n state.openComplete = true;\n resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters.\n }).then(()=>{\n if (wasCreated) {\n // Propagate full range on primary keys and indexes on all tables now that the DB is ready and opened,\n // and all upgraders and on('ready') subscribers have run.\n const everything: ObservabilitySet = {};\n db.tables.forEach(table => {\n table.schema.indexes.forEach(idx => {\n if (idx.name) everything[`idb://${db.name}/${table.name}/${idx.name}`] = new RangeSet(-Infinity, [[[]]]);\n });\n everything[`idb://${db.name}/${table.name}/`] = everything[`idb://${db.name}/${table.name}/:dels`] = new RangeSet(-Infinity, [[[]]]);\n });\n // Database was created. If another tab had it open when it was deleted and reopened, that tab must be updated now.\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything);\n // Wipe the cache and trigger optimistic queries:\n signalSubscribersNow(everything, true);\n }\n // Resolve the db.open() with the db instance.\n return db;\n });\n}\n","import { isArray } from '../functions/utils';\n\nexport function awaitIterator (iterator: Iterator) {\n var callNext = result => iterator.next(result),\n doThrow = error => iterator.throw(error),\n onSuccess = step(callNext),\n onError = step(doThrow);\n\n function step(getNext: (any)=>any) {\n return (val?) => {\n var next = getNext(val),\n value = next.value;\n\n return next.done ? value :\n (!value || typeof value.then !== 'function' ?\n isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :\n value.then(onSuccess, onError));\n };\n }\n\n return step(callNext)();\n}\n","import { TransactionMode } from '../../public/types/transaction-mode';\nimport { errnames, exceptions } from '../../errors';\nimport { flatten, isAsyncFunction } from '../../functions/utils';\nimport { Dexie } from './dexie';\nimport { Transaction } from '../transaction';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise, {\n PSD,\n NativePromise,\n decrementExpectedAwaits,\n rejection,\n incrementExpectedAwaits\n} from '../../helpers/promise';\n\nexport function extractTransactionArgs(mode: TransactionMode, _tableArgs_, scopeFunc) {\n // Let table arguments be all arguments between mode and last argument.\n var i = arguments.length;\n if (i < 2) throw new exceptions.InvalidArgument(\"Too few arguments\");\n // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments)\n // and clone arguments except the first one into local var 'args'.\n var args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments.\n scopeFunc = args.pop();\n var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays.\n return [mode, tables, scopeFunc];\n}\n\nexport function enterTransactionScope(\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n parentTransaction: Transaction | undefined,\n scopeFunc: ()=>PromiseLike | any\n) {\n return Promise.resolve().then(() => {\n // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction().\n const transless = PSD.transless || PSD;\n // Our transaction.\n //return new Promise((resolve, reject) => {\n const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n trans.explicit = true;\n // Let the transaction instance be part of a Promise-specific data (PSD) value.\n const zoneProps = {\n trans: trans,\n transless: transless\n };\n\n if (parentTransaction) {\n // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing)\n trans.idbtrans = parentTransaction.idbtrans;\n } else {\n try {\n trans.create(); // Create the native transaction so that complete() or error() will trigger even if no operation is made upon it.\n // @ts-ignore Mark the idbtrans object with \"_explicit\". DBCore middleware won't have access to Dexie trans but will need to have this info.\n trans.idbtrans._explicit = true;\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(() => enterTransactionScope(\n db,\n mode,\n storeNames,\n null,\n scopeFunc\n ));\n }\n return rejection(ex);\n }\n }\n\n // Support for native async await.\n const scopeFuncIsAsync = isAsyncFunction(scopeFunc);\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n\n let returnValue;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = scopeFunc.call(trans, trans);\n if (returnValue) {\n if (scopeFuncIsAsync) {\n // scopeFunc is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n } else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {\n // scopeFunc returned an iterator with throw-support. Handle yield as await.\n returnValue = awaitIterator(returnValue);\n }\n }\n }, zoneProps);\n return (returnValue && typeof returnValue.then === 'function' ?\n // Promise returned. User uses promise-style transactions.\n Promise.resolve(returnValue).then(x => trans.active ?\n x // Transaction still active. Continue.\n : rejection(new exceptions.PrematureCommit(\n \"Transaction committed too early. See http://bit.ly/2kdckMn\")))\n // No promise returned. Wait for all outstanding promises before continuing. \n : promiseFollowed.then(() => returnValue)\n ).then(x => {\n // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion:\n if (parentTransaction) trans._resolve();\n // wait for trans._completion\n // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves)\n return trans._completion.then(() => x);\n }).catch(e => {\n trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc!\n return rejection(e);\n });\n });\n}\n","import {\n DBCore,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryRequest,\n DBCoreRangeType,\n DBCoreOpenCursorRequest,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreTable,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { getKeyExtractor } from './get-key-extractor';\nimport { getKeyPathAlias } from './dbcore-indexeddb';\nimport { Middleware } from '../public/types/middleware';\n\ninterface VirtualIndex extends DBCoreIndex {\n /** True if this index is virtual, i.e. represents a compound index internally,\n * but makes it act as as having a subset of its keyPaths.\n */\n isVirtual: boolean;\n\n /** Number of keypaths that this index comprises. Can be 0..N.\n * Note: This is the length of the *virtual index*, not the real index.\n */\n keyLength: number;\n\n /** Number of popped keypaths from the real index.\n */\n keyTail: number;\n\n /** LowLevelIndex represents the actual IndexedDB index behind it */\n lowLevelIndex: DBCoreIndex;\n}\n\n// Move into some util:\nexport function pad (a: any | any[], value: any, count: number) {\n const result = isArray(a) ? a.slice() : [a];\n for (let i=0; i 0;\n const virtualIndex = {\n ...lowLevelIndex,\n name: isVirtual\n ? `${keyPathAlias}(virtual-from:${lowLevelIndex.name})`\n : lowLevelIndex.name,\n lowLevelIndex,\n isVirtual,\n keyTail,\n keyLength,\n extractKey: getKeyExtractor(keyPath),\n unique: !isVirtual && lowLevelIndex.unique\n };\n indexList.push(virtualIndex);\n if (!virtualIndex.isPrimaryKey) {\n allVirtualIndexes.push(virtualIndex);\n }\n if (keyLength > 1) {\n const virtualKeyPath = keyLength === 2 ?\n keyPath[0] : // This is a compound [a, b]. Add a virtual normal index a.\n keyPath.slice(0, keyLength - 1); // This is compound [a,b,c]. Add virtual compound [a,b].\n addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n }\n indexList.sort((a,b) => a.keyTail - b.keyTail); // Shortest keyTail is the best one (represents real index)\n return virtualIndex;\n }\n \n const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n indexLookup[\":id\"] = [primaryKey];\n for (const index of schema.indexes) {\n addVirtualIndexes(index.keyPath, 0, index);\n }\n \n function findBestIndex(keyPath: null | string | string[]): VirtualIndex {\n const result = indexLookup[getKeyPathAlias(keyPath)];\n return result && result[0];\n }\n \n function translateRange (range: DBCoreKeyRange, keyTail: number): DBCoreKeyRange {\n return {\n type: range.type === DBCoreRangeType.Equal ?\n DBCoreRangeType.Range :\n range.type,\n lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),\n lowerOpen: true, // doesn't matter true or false\n upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),\n upperOpen: true // doesn't matter true or false\n };\n }\n \n function translateRequest (req: DBCoreQueryRequest): DBCoreQueryRequest;\n function translateRequest (req: DBCoreOpenCursorRequest): DBCoreOpenCursorRequest;\n function translateRequest (req: DBCoreCountRequest): DBCoreCountRequest {\n const index = req.query.index as VirtualIndex;\n return index.isVirtual ? {\n ...req,\n query: {\n index: index.lowLevelIndex,\n range: translateRange(req.query.range, index.keyTail)\n }\n } : req;\n }\n \n const result: DBCoreTable = {\n ...table,\n schema: {\n ...schema,\n primaryKey,\n indexes: allVirtualIndexes,\n getIndexByKeyPath: findBestIndex\n },\n\n count(req) {\n return table.count(translateRequest(req));\n }, \n \n query(req) {\n return table.query(translateRequest(req));\n },\n \n openCursor(req) {\n const {keyTail, isVirtual, keyLength} = (req.query.index as VirtualIndex);\n if (!isVirtual) return table.openCursor(req);\n \n function createVirtualCursor(cursor: DBCoreCursor) : DBCoreCursor {\n function _continue (key?: any) {\n key != null ?\n cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :\n req.unique ?\n cursor.continue(\n cursor.key.slice(0, keyLength)\n .concat(req.reverse\n ? down.MIN_KEY\n : down.MAX_KEY, keyTail)\n ) :\n cursor.continue()\n }\n const virtualCursor = Object.create(cursor, {\n continue: {value: _continue},\n continuePrimaryKey: {\n value(key: any, primaryKey: any) {\n cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n }\n },\n primaryKey: {\n get() {\n return cursor.primaryKey;\n }\n },\n key: {\n get() {\n const key = cursor.key as any[]; // A virtual cursor always operates on compound key\n return keyLength === 1 ?\n key[0] : // Cursor.key should not be an array.\n key.slice(0, keyLength); // Cursor.key should be first part of array.\n }\n },\n value: {\n get() {\n return cursor.value;\n }\n }\n });\n return virtualCursor;\n }\n \n return table.openCursor(translateRequest(req))\n .then(cursor => cursor && createVirtualCursor(cursor));\n }\n };\n return result;\n }\n }\n}\n\nexport const virtualIndexMiddleware : Middleware = {\n stack: \"dbcore\",\n name: \"VirtualIndexMiddleware\",\n level: 1,\n create: createVirtualIndexMiddleware\n};\n\n","import { keys, hasOwn, toStringTag } from './utils';\n\nexport function getObjectDiff(a: any, b: any, rv?: any, prfx?: string) {\n // Compares objects a and b and produces a diff object.\n rv = rv || {};\n prfx = prfx || '';\n keys(a).forEach((prop) => {\n if (!hasOwn(b, prop)) {\n // Property removed\n rv[prfx + prop] = undefined;\n } else {\n var ap = a[prop],\n bp = b[prop];\n if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {\n const apTypeName = toStringTag(ap);\n const bpTypeName = toStringTag(bp);\n\n if (apTypeName !== bpTypeName) {\n rv[prfx + prop] = b[prop]; // Property changed to other type\n } else if (apTypeName === 'Object') {\n // Pojo objects (not Date, ArrayBuffer, Array etc). Go deep.\n getObjectDiff(ap, bp, rv, prfx + prop + '.');\n } else if (ap !== bp) {\n // Values differ.\n // Could have checked if Date, arrays or binary types have same\n // content here but I think that would be a suboptimation.\n // Prefer simplicity.\n rv[prfx + prop] = b[prop];\n }\n } else if (ap !== bp) rv[prfx + prop] = b[prop]; // Primitive value changed\n }\n });\n keys(b).forEach((prop) => {\n if (!hasOwn(a, prop)) {\n rv[prfx + prop] = b[prop]; // Property added\n }\n });\n return rv;\n}\n","import {\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreIndex,\n DBCoreTable,\n} from \"../public/types/dbcore\";\n\nexport function getEffectiveKeys (\n primaryKey: DBCoreIndex,\n req: (Pick & {keys?: any[]}) | Pick)\n{\n //const {outbound} = primaryKey;\n if (req.type === 'delete') return req.keys;\n return req.keys || req.values.map(primaryKey.extractKey)\n}\n","import {\n DBCore,\n DBCoreTable,\n DBCoreMutateResponse,\n DBCoreDeleteRangeRequest,\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreTransaction,\n DBCoreKeyRange\n} from \"../public/types/dbcore\";\nimport { nop } from '../functions/chaining-functions';\nimport { hasOwn, setByKeyPath } from '../functions/utils';\nimport { getObjectDiff } from \"../functions/get-object-diff\";\nimport { PSD } from '../helpers/promise';\n//import { LockableTableMiddleware } from '../dbcore/lockable-table-middleware';\nimport { getEffectiveKeys } from '../dbcore/get-effective-keys';\nimport { Middleware } from '../public/types/middleware';\nimport { Transaction } from '../classes/transaction';\n\nexport const hooksMiddleware: Middleware = {\n stack: \"dbcore\",\n name: \"HooksMiddleware\",\n level: 2,\n create: (downCore: DBCore) => ({\n ...downCore,\n table(tableName: string) {\n const downTable = downCore.table(tableName);\n const {primaryKey} = downTable.schema;\n \n const tableMiddleware: DBCoreTable = {\n ...downTable,\n mutate(req):Promise {\n const dxTrans = PSD.trans as Transaction;\n // Hooks can be transaction-bound. Need to grab them from transaction.table and not\n // db.table!\n const {deleting, creating, updating} = dxTrans.table(tableName).hook;\n switch (req.type) {\n case 'add':\n if (creating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'put':\n if (creating.fire === nop && updating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'delete':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'deleteRange':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>deleteRange(req), true);\n }\n // Any of the breaks above happened (no hooks) - do the default:\n return downTable.mutate(req);\n\n\n function addPutOrDelete(req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest): Promise {\n const dxTrans = PSD.trans;\n const keys = req.keys || getEffectiveKeys(primaryKey, req);\n if (!keys) throw new Error(\"Keys missing\");\n // Clone Request and set keys arg\n req = req.type === 'add' || req.type === 'put' ?\n {...req, keys} :\n {...req};\n if (req.type !== 'delete') req.values = [...req.values];\n if (req.keys) req.keys = [...req.keys];\n \n return getExistingValues(downTable, req, keys).then (existingValues => {\n const contexts = keys.map((key, i) => {\n const existingValue = existingValues[i];\n const ctx = { onerror: null, onsuccess: null };\n if (req.type === 'delete') {\n // delete operation\n deleting.fire.call(ctx, key, existingValue, dxTrans);\n } else if (req.type === 'add' || existingValue === undefined) {\n // The add() or put() resulted in a create\n const generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);\n if (key == null && generatedPrimaryKey != null) {\n key = generatedPrimaryKey;\n req.keys[i] = key;\n if (!primaryKey.outbound) {\n setByKeyPath(req.values[i], primaryKey.keyPath, key);\n }\n }\n } else {\n // The put() operation resulted in an update\n const objectDiff = getObjectDiff(existingValue, req.values[i]);\n const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n if (additionalChanges) {\n const requestedValue = req.values[i];\n Object.keys(additionalChanges).forEach(keyPath => {\n if (hasOwn(requestedValue, keyPath)) {\n // keyPath is already present as a literal property of the object\n requestedValue[keyPath] = additionalChanges[keyPath];\n } else {\n // keyPath represents a new or existing path into the object\n setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]);\n }\n });\n }\n }\n return ctx;\n });\n return downTable.mutate(req).then(({failures, results, numFailures, lastResult}) => {\n for (let i=0; i {\n contexts.forEach(ctx => ctx.onerror && ctx.onerror(error));\n return Promise.reject(error);\n });\n });\n }\n \n function deleteRange(req: DBCoreDeleteRangeRequest): Promise {\n return deleteNextChunk(req.trans, req.range, 10000);\n }\n \n function deleteNextChunk(trans: DBCoreTransaction, range: DBCoreKeyRange, limit: number) {\n // Query what keys in the DB within the given range\n return downTable.query({trans, values: false, query: {index: primaryKey, range}, limit})\n .then(({result}) => {\n // Given a set of keys, bulk delete those using the same procedure as in addPutOrDelete().\n // This will make sure that deleting hook is called.\n return addPutOrDelete({type: 'delete', keys: result, trans}).then(res => {\n if (res.numFailures > 0) return Promise.reject(res.failures[0]);\n if (result.length < limit) {\n return {failures: [], numFailures: 0, lastResult: undefined} as DBCoreMutateResponse;\n } else {\n return deleteNextChunk(trans, {...range, lower: result[result.length - 1], lowerOpen: true}, limit);\n }\n });\n })\n }\n }\n };\n //const {lock, lockableMiddleware} = LockableTableMiddleware(tableMiddleware);\n\n return tableMiddleware;\n },\n }) as DBCore\n};\n\nfunction getExistingValues(\n table: DBCoreTable,\n req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest,\n effectiveKeys: any[]\n) {\n return req.type === \"add\"\n ? Promise.resolve([])\n : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: \"immutable\" });\n}\n","import { deepClone } from \"../functions/utils\";\nimport { DBCore } from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport Promise from \"../helpers/promise\";\nimport { cmp } from '../functions/cmp';\n\nexport function getFromTransactionCache(\n keys: readonly any[],\n cache: { keys: any[]; values: any[] } | undefined | null,\n clone?: boolean\n) {\n try {\n if (!cache) return null;\n if (cache.keys.length < keys.length) return null;\n const result: any[] = [];\n // Compare if the exact same order of keys was retrieved in same transaction:\n // Allow some cached keys to be omitted from provided set of keys\n // Use case: 1. getMany(keys) 2. update a subset of those 3. call put with the updated ones ==> middlewares should be able to find old values\n for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) {\n if (cmp(cache.keys[i], keys[j]) !== 0) continue;\n result.push(clone ? deepClone(cache.values[i]) : cache.values[i]);\n ++j;\n }\n // If got all keys caller was looking for, return result.\n return result.length === keys.length ? result : null;\n } catch {\n return null;\n }\n}\n\nexport const cacheExistingValuesMiddleware: Middleware = {\n stack: \"dbcore\",\n level: -1,\n create: (core) => {\n return {\n table: (tableName) => {\n const table = core.table(tableName);\n return {\n ...table,\n getMany: (req) => {\n if (!req.cache) {\n return table.getMany(req);\n }\n const cachedResult = getFromTransactionCache(\n req.keys,\n req.trans[\"_cache\"],\n req.cache === \"clone\"\n );\n if (cachedResult) {\n return Promise.resolve(cachedResult);\n }\n return table.getMany(req).then((res) => {\n req.trans[\"_cache\"] = {\n keys: req.keys,\n values: req.cache === \"clone\" ? deepClone(res) : res,\n };\n return res;\n });\n },\n mutate: (req) => {\n // Invalidate cache on any mutate except \"add\" which can't change existing values:\n if (req.type !== \"add\") req.trans[\"_cache\"] = null;\n return table.mutate(req);\n },\n };\n },\n };\n },\n};\n","import { DBCore, DBCoreTable } from '../../public/types/dbcore';\nimport { LiveQueryContext } from '../live-query';\n\nexport function isCachableContext(ctx: LiveQueryContext, table: DBCoreTable) {\n return (\n ctx.trans.mode === 'readonly' &&\n !!ctx.subscr &&\n !ctx.trans.explicit &&\n ctx.trans.db._options.cache !== 'disabled' &&\n !table.schema.primaryKey.outbound\n );\n}\n\n","import { DBCoreCountRequest, DBCoreGetManyRequest, DBCoreGetRequest, DBCoreOpenCursorRequest, DBCoreQueryRequest } from '../../public/types/dbcore';\n\n\nexport function isCachableRequest(type: string, req: Partial) {\n switch (type) {\n case 'query':\n return req.values && !req.unique;\n case 'get':\n return false;\n case 'getMany':\n return false;\n case 'count':\n return false;\n case 'openCursor':\n return false;\n }\n}\n","import { LiveQueryContext } from \".\";\nimport { getFromTransactionCache } from \"../dbcore/cache-existing-values-middleware\";\nimport { getEffectiveKeys } from \"../dbcore/get-effective-keys\";\nimport { exceptions } from \"../errors\";\nimport { cmp } from \"../functions/cmp\";\nimport { isArray, keys } from \"../functions/utils\";\nimport { PSD } from \"../helpers/promise\";\nimport { RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport {\n DBCore,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreGetManyRequest,\n DBCoreGetRequest,\n DBCoreIndex,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreQueryResponse,\n DBCoreTable,\n DBCoreTableSchema,\n DBCoreTransaction,\n} from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport { isCachableContext } from \"./cache/is-cachable-context\";\nimport { isCachableRequest } from \"./cache/is-cachable-request\";\nimport { extendObservabilitySet } from \"./extend-observability-set\";\n\nexport const observabilityMiddleware: Middleware = {\n stack: \"dbcore\",\n level: 0,\n name: \"Observability\",\n create: (core) => {\n const dbName = core.schema.name;\n const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);\n\n return {\n ...core,\n transaction: (stores, mode, options) => {\n if (PSD.subscr && mode !== 'readonly') {\n throw new exceptions.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${(PSD as LiveQueryContext).querier}`);\n }\n return core.transaction(stores, mode, options);\n },\n table: (tableName) => {\n const table = core.table(tableName);\n const { schema } = table;\n const { primaryKey, indexes } = schema;\n const { extractKey, outbound } = primaryKey;\n const indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(\n (index) => index.compound && (index.keyPath as string[]).includes(primaryKey.keyPath as string)\n );\n const tableClone: DBCoreTable = {\n ...table,\n mutate: (req) => {\n const trans = req.trans as DBCoreTransaction & {\n mutatedParts?: ObservabilitySet;\n };\n const mutatedParts = req.mutatedParts || (req.mutatedParts = {});\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (mutatedParts[part] ||\n (mutatedParts[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n\n const { type } = req;\n let [keys, newObjs] =\n req.type === \"deleteRange\"\n ? [req.range] // keys will be an DBCoreKeyRange object - transformed later on to a [from,to]-style range.\n : req.type === \"delete\"\n ? [req.keys] // keys known already here. newObjs will be undefined.\n : req.values.length < 50\n ? [getEffectiveKeys(primaryKey, req).filter(id => id), req.values] // keys except autoIncremented - they will be added later on.\n : []; // keys and newObjs will both be undefined - changeSpec will become true (changed for entire table)\n\n const oldCache = req.trans[\"_cache\"];\n\n // Add the mutated table and optionally keys to the mutatedTables set on the transaction.\n // Used by subscribers to txcommit event and for Collection.prototype.subscribe().\n if (isArray(keys)) {\n // keys is an array - delete, add or put of less than 50 rows.\n // Individual keys (add put or delete)\n pkRangeSet.addKeys(keys);\n // Only get oldObjs if they have been cached recently\n // (This applies to Collection.modify() only, but also if updating/deleting hooks have subscribers)\n const oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null;\n\n // Supply detailed values per index for both old and new objects:\n if (!oldObjs) {\n // add, delete or put and we don't know old values.\n // Indicate this in the \":dels\" part, for the sake of count() and primaryKeys() queries only!\n delsRangeSet.addKeys(keys);\n }\n if (oldObjs || newObjs) {\n // No matter if knowning oldObjs or not, track the indices if it's a put, add or delete.\n trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);\n }\n } else if (keys) {\n // keys is a DBCoreKeyRange object. Transform it to [from,to]-style range.\n // As we can't know deleted index ranges, mark index-based subscriptions must trigger.\n const range = { from: keys.lower, to: keys.upper };\n delsRangeSet.add(range);\n // deleteRange. keys is a DBCoreKeyRange objects. Transform it to [from,to]-style range.\n pkRangeSet.add(range);\n } else {\n // Too many requests to record the details without slowing down write performance.\n // Let's just record a generic large range on primary key, the virtual :dels index and\n // all secondary indices:\n pkRangeSet.add(FULL_RANGE);\n delsRangeSet.add(FULL_RANGE);\n schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE));\n }\n\n return table.mutate(req).then((res) => {\n // Merge the mutated parts from the request into the transaction's mutatedParts\n // now when the request went fine.\n if (keys && (req.type === 'add' || req.type === 'put')) {\n // Less than 50 requests (keys truthy) (otherwise we've added full range anyway)\n // autoincrement means we might not have got all keys until now\n pkRangeSet.addKeys(res.results);\n if (indexesWithAutoIncPK) {\n // Dexie Issue 1946:\n // If an auto-incremented primary key is part of a compound index,\n // we need to compute the resulting value of that index after inserting\n // the rows.\n indexesWithAutoIncPK.forEach(idx => {\n // Extract values of this compound index where primary key is not yet set:\n const idxVals = req.values.map(v => idx.extractKey(v));\n // Find the position of the primary key in the index:\n const pkPos = (idx.keyPath as string[]).findIndex(prop => prop === primaryKey.keyPath);\n // Update idxVals with the resulting primary keys to complete the index value:\n res.results!.forEach(pk => idxVals[pkPos] = pk);\n // Add the updated index to the rangeset:\n getRangeSet(idx.name).addKeys(idxVals);\n });\n }\n }\n trans.mutatedParts = extendObservabilitySet (\n trans.mutatedParts || {},\n mutatedParts\n );\n return res;\n });\n },\n };\n\n const getRange: (req: any) => [DBCoreIndex, RangeSet] = ({\n query: { index, range },\n }:\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest) => [\n index,\n new RangeSet(range.lower ?? core.MIN_KEY, range.upper ?? core.MAX_KEY),\n ];\n\n const readSubscribers: {[method in\n Exclude]: \n (req: any) => [DBCoreIndex, RangeSet]\n } = {\n get: (req) => [primaryKey, new RangeSet(req.key)],\n getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)],\n count: getRange,\n query: getRange,\n openCursor: getRange,\n }\n\n keys(readSubscribers).forEach((method: 'get' | 'getMany' | 'count' | 'query' | 'openCursor') => {\n tableClone[method] = function (\n req:\n | DBCoreGetRequest\n | DBCoreGetManyRequest\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest\n ) {\n const { subscr } = PSD as LiveQueryContext;\n const isLiveQuery = !!subscr;\n let cachable = isCachableContext(PSD as LiveQueryContext, table) && isCachableRequest(method, req);\n const obsSet = cachable\n ? req.obsSet = {} // Implicit read transaction - track changes for this query only for the request's duration\n : subscr; // Explicit read transaction - track changes across entire live query\n\n if (isLiveQuery) {\n // Current zone want's to track all queries so they can be subscribed to.\n // (The query is executed within a \"liveQuery\" zone)\n // Check whether the query applies to a certain set of ranges:\n // Track what we should be observing:\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (obsSet[part] ||\n (obsSet[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const [queriedIndex, queriedRanges] = readSubscribers[method](req);\n // A generic rule here: queried ranges should always be subscribed to.\n if (method === 'query' && queriedIndex.isPrimaryKey && !(req as DBCoreQueryRequest).values) {\n // A pure primay-key based Collection where only .primaryKeys() is requested. Don't wakeup on other changes than added or deleted primary keys within queried range.\n delsRangeSet.add(queriedRanges);\n } else {\n getRangeSet(queriedIndex.name || \"\").add(queriedRanges);\n }\n if (!queriedIndex.isPrimaryKey) {\n // Only count(), query() and openCursor() operates on secondary indices.\n // Since put(), delete() and deleteRange() mutations may happen without knowing oldObjs,\n // the mutate() method will be missing what secondary indices that are being deleted from\n // the subscribed range. We are working around this issue by recording all the resulting\n // primary keys from the queries. This only works for those kinds of queries where we can\n // derive the primary key from the result.\n // In this block we are accomplishing this using various strategies depending on the properties\n // of the query result.\n\n if (method === \"count\") {\n // We've got a problem! Delete and put mutations happen without known the oldObjs.\n // Those mutation could change the count.\n // Solution: Dedicated \":dels\" url represends a subscription to all mutations without oldObjs\n // (specially triggered in the mutators put(), delete() and deleteRange() when they don't know oldObject)\n delsRangeSet.add(FULL_RANGE);\n } else {\n // openCursor() or query()\n\n // Prepare a keysPromise in case the we're doing an IDBIndex.getAll() on a store with outbound keys.\n const keysPromise =\n method === \"query\" &&\n outbound &&\n (req as DBCoreQueryRequest).values &&\n table.query({\n ...(req as DBCoreQueryRequest),\n values: false,\n });\n\n return table[method].apply(this, arguments).then((res) => {\n if (method === \"query\") {\n if (outbound && (req as DBCoreQueryRequest).values) {\n // If keys are outbound, we can't use extractKey to map what keys to observe.\n // We've queried an index (like 'dateTime') on an outbound table\n // and retrieve a list of objects\n // from who we cannot know their primary keys.\n // \"Luckily\" though, we've prepared the keysPromise to assist us in exact this condition.\n return keysPromise.then(\n ({ result: resultingKeys }: DBCoreQueryResponse) => {\n pkRangeSet.addKeys(resultingKeys);\n return res;\n }\n );\n }\n // query() inbound values, keys or outbound keys. Secondary indexes only since\n // for primary keys we would only add results within the already registered range.\n const pKeys = (req as DBCoreQueryRequest).values\n ? (res as DBCoreQueryResponse).result.map(extractKey)\n : (res as DBCoreQueryResponse).result;\n if ((req as DBCoreQueryRequest).values) {\n // Subscribe to any mutation made on the returned keys,\n // so that we detect both deletions and updated properties.\n pkRangeSet.addKeys(pKeys);\n } else {\n // Subscribe only to mutations on the returned keys\n // in case the mutator was unable to know oldObjs.\n // If it has oldObj, the mutator won't put anything in \":dels\" because\n // it can more fine-grained put the exact removed and added index value in the correct\n // index range that we subscribe to in the queried range sets.\n // We don't load values so a change on a property outside our index will not\n // require us to re-execute the query.\n delsRangeSet.addKeys(pKeys);\n }\n } else if (method === \"openCursor\") {\n // Caller requests a cursor.\n // For the same reason as when method===\"query\", we only need to observe\n // those keys whose values are possibly used or rendered - which could\n // only happen on keys where they get the cursor's key, primaryKey or value.\n const cursor: DBCoreCursor | null = res;\n const wantValues = (req as DBCoreOpenCursorRequest).values;\n return (\n cursor &&\n Object.create(cursor, {\n key: {\n get() {\n delsRangeSet.addKey(cursor.primaryKey);\n return cursor.key;\n },\n },\n primaryKey: {\n get() {\n const pkey = cursor.primaryKey;\n delsRangeSet.addKey(pkey);\n return pkey;\n },\n },\n value: {\n get() {\n wantValues && pkRangeSet.addKey(cursor.primaryKey);\n return cursor.value;\n },\n },\n })\n );\n }\n return res;\n });\n }\n }\n }\n return table[method].apply(this, arguments);\n };\n });\n return tableClone;\n },\n };\n },\n};\n\nfunction trackAffectedIndexes(\n getRangeSet: (index: string) => RangeSet,\n schema: DBCoreTableSchema,\n oldObjs: readonly any[] | undefined,\n newObjs: readonly any[] | undefined\n) {\n function addAffectedIndex(ix: DBCoreIndex) {\n const rangeSet = getRangeSet(ix.name || \"\");\n function extractKey(obj: any) {\n return obj != null ? ix.extractKey(obj) : null;\n }\n const addKeyOrKeys = (key: any) => ix.multiEntry && isArray(key)\n // multiEntry and the old property was an array - add each array entry to the rangeSet:\n ? key.forEach(key => rangeSet.addKey(key))\n // Not multiEntry or the old property was not an array - add each array entry to the rangeSet:\n : rangeSet.addKey(key);\n\n (oldObjs || newObjs).forEach((_, i) => {\n const oldKey = oldObjs && extractKey(oldObjs[i]);\n const newKey = newObjs && extractKey(newObjs[i]);\n if (cmp(oldKey, newKey) !== 0) {\n // The index has changed. Add both old and new value of the index.\n if (oldKey != null) addKeyOrKeys(oldKey); // If oldKey is invalid key, addKey() will be a noop.\n if (newKey != null) addKeyOrKeys(newKey); // If newKey is invalid key, addKey() will be a noop.\n }\n });\n }\n schema.indexes.forEach(addAffectedIndex);\n}\n","import { delArrayItem, isArray } from '../../functions/utils';\nimport { TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreMutateRequest,\n DBCoreMutateResponse,\n} from '../../public/types/dbcore';\n\nexport function adjustOptimisticFromFailures(\n tblCache: TblQueryCache,\n req: DBCoreMutateRequest,\n res: DBCoreMutateResponse\n): DBCoreMutateRequest {\n if (res.numFailures === 0) return req;\n if (req.type === 'deleteRange') {\n // numFailures > 0 means the deleteRange operation failed in its whole.\n return null;\n }\n\n const numBulkOps = req.keys\n ? req.keys.length\n : 'values' in req && req.values\n ? req.values.length\n : 1;\n if (res.numFailures === numBulkOps) {\n // Same number of failures as the number of ops. This means that all ops failed.\n return null;\n }\n\n const clone: DBCoreMutateRequest = { ...req };\n\n if (isArray(clone.keys)) {\n clone.keys = clone.keys.filter((_, i) => !(i in res.failures));\n }\n if ('values' in clone && isArray(clone.values)) {\n clone.values = clone.values.filter((_, i) => !(i in res.failures));\n }\n return clone;\n}\n","import { cmp } from '../../functions/cmp';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function isAboveLower(key: IndexableType, range: DBCoreKeyRange) {\n return range.lower === undefined\n ? true // lower is less than anything because it is undefined\n : range.lowerOpen\n ? cmp(key, range.lower) > 0 // lowerOpen: Exclude lower bound\n : cmp(key, range.lower) >= 0; // !lowerOpen: Include lower bound\n}\n\nexport function isBelowUpper(key: IndexableType, range: DBCoreKeyRange) {\n return range.upper === undefined\n ? true // upper is greater than anything because it is undefined\n : range.upperOpen\n ? cmp(key, range.upper) < 0 // upperOpen: Exclude upper bound\n : cmp(key, range.upper) <= 0; // !upperOpen: Include upper bound\n}\n\nexport function isWithinRange(key: IndexableType, range: DBCoreKeyRange) {\n return isAboveLower(key, range) && isBelowUpper(key, range);\n}\n","import { cmp } from '../../functions/cmp';\nimport { deepClone, isArray } from '../../functions/utils';\nimport { RangeSet, rangesOverlap } from '../../helpers/rangeset';\nimport { CacheEntry } from '../../public/types/cache';\nimport {\n DBCoreIndex,\n DBCoreMutateRequest,\n DBCoreQueryRequest,\n DBCoreTable,\n} from '../../public/types/dbcore';\nimport { isWithinRange } from './is-within-range';\n\nexport function applyOptimisticOps(\n result: any[],\n req: DBCoreQueryRequest,\n ops: DBCoreMutateRequest[] | undefined,\n table: DBCoreTable,\n cacheEntry: CacheEntry,\n immutable: boolean\n): any[] {\n if (!ops || ops.length === 0) return result;\n const index = req.query.index;\n const { multiEntry } = index;\n const queryRange = req.query.range;\n const primaryKey = table.schema.primaryKey;\n const extractPrimKey = primaryKey.extractKey!;\n const extractIndex = index.extractKey!;\n const extractLowLevelIndex = (index.lowLevelIndex || index).extractKey!;\n\n let finalResult = ops.reduce((result, op) => {\n let modifedResult = result;\n const includedValues =\n op.type === 'add' || op.type === 'put'\n ? op.values.filter((v) => {\n const key = extractIndex(v);\n return multiEntry && isArray(key) // multiEntry index work like plain index unless key is array\n ? key.some((k) => isWithinRange(k, queryRange)) // multiEntry and array key\n : isWithinRange(key, queryRange); // multiEntry but not array key\n }).map(v => {\n v = deepClone(v);// v might come from user so we can't just freeze it.\n if (immutable) Object.freeze(v);\n return v;\n })\n : [];\n switch (op.type) {\n case 'add':\n modifedResult = result.concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'put':\n const keySet = new RangeSet().addKeys(\n op.values.map((v) => extractPrimKey(v))\n );\n modifedResult = result\n .filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keySet);\n })\n .concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'delete':\n const keysToDelete = new RangeSet().addKeys(op.keys);\n modifedResult = result.filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keysToDelete);\n });\n\n break;\n case 'deleteRange':\n const range = op.range;\n modifedResult = result.filter((item) => !isWithinRange(extractPrimKey(item), range));\n break;\n }\n return modifedResult;\n }, result);\n\n // If no changes were made, we can return the original result.\n if (finalResult === result) return result;\n\n // Sort the result on sortIndex:\n finalResult.sort((a, b) =>\n cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) ||\n cmp(extractPrimKey(a), extractPrimKey(b))\n );\n\n // If we have a limit we need to respect it:\n if (req.limit && req.limit < Infinity) {\n if (finalResult.length > req.limit) {\n finalResult.length = req.limit; // Cut of any extras after sorting correctly.\n } else if (result.length === req.limit && finalResult.length < req.limit) {\n // We're missing some items because of the limit. We need to add them back.\n // The easiest way is to mark the cache entry as dirty, which will cause\n // it to be requeried after the write-transaction successfully completes.\n cacheEntry.dirty = true;\n }\n }\n return immutable ? Object.freeze(finalResult) as any[] : finalResult;\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function areRangesEqual(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n cmp(r1.lower, r2.lower) === 0 &&\n cmp(r1.upper, r2.upper) === 0 &&\n !!r1.lowerOpen === !!r2.lowerOpen &&\n !!r1.upperOpen === !!r2.upperOpen\n );\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function compareLowers(lower1: any, lower2: any, lowerOpen1: boolean, lowerOpen2: boolean) {\n if (lower1 === undefined) return lower2 !== undefined ? -1 : 0;\n if (lower2 === undefined) return 1; // since lower1 !== undefined\n const c = cmp(lower1, lower2);\n if (c === 0) {\n if (lowerOpen1 && lowerOpen2) return 0;\n if (lowerOpen1) return 1\n if (lowerOpen2) return -1;\n }\n return c;\n}\n\nexport function compareUppers(upper1: any, upper2: any, upperOpen1: boolean, upperOpen2: boolean) {\n if (upper1 === undefined) return upper2 !== undefined ? 1 : 0;\n if (upper2 === undefined) return -1; // since upper1 !== undefined\n const c = cmp(upper1, upper2);\n if (c === 0) {\n if (upperOpen1 && upperOpen2) return 0;\n if (upperOpen1) return -1\n if (upperOpen2) return 1;\n }\n return c;\n}\n\nexport function isSuperRange(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 &&\n compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0\n );\n}","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreCountRequest,\n DBCoreQueryRequest,\n} from '../../public/types/dbcore';\nimport { areRangesEqual } from './are-ranges-equal';\nimport { cache } from './cache';\nimport { isSuperRange } from './is-super-range';\n\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query',\n req: DBCoreQueryRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'count',\n req: DBCoreCountRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query' | 'count',\n req: Partial & Partial\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]] {\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return [];\n const queries = tblCache.queries[type];\n if (!queries) return [null, false, tblCache, null];\n const indexName = req.query ? req.query.index.name : null;\n const entries = queries[indexName || ''];\n if (!entries) return [null, false, tblCache, null];\n\n switch (type) {\n case 'query':\n const equalEntry = entries.find(\n (entry) =>\n (entry.req as DBCoreQueryRequest).limit === req.limit &&\n (entry.req as DBCoreQueryRequest).values === req.values &&\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n if (equalEntry)\n return [\n equalEntry,\n true, // exact match\n tblCache,\n entries,\n ];\n const superEntry = entries.find((entry) => {\n const limit = 'limit' in entry.req ? entry.req.limit : Infinity;\n return (\n limit >= req.limit &&\n (req.values ? (entry.req as DBCoreQueryRequest).values : true) &&\n isSuperRange(entry.req.query.range, req.query.range)\n );\n });\n return [superEntry, false, tblCache, entries];\n case 'count':\n const countQuery = entries.find((entry) =>\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n return [countQuery, !!countQuery, tblCache, entries];\n }\n}\n","import { delArrayItem } from \"../../functions/utils\";\nimport { CacheEntry } from \"../../public/types/cache\";\n\nexport function subscribeToCacheEntry(cacheEntry: CacheEntry, container: CacheEntry[], requery: ()=>void, signal: AbortSignal) {\n cacheEntry.subscribers.add(requery);\n signal.addEventListener(\"abort\", () => {\n cacheEntry.subscribers.delete(requery);\n if (cacheEntry.subscribers.size === 0) {\n enqueForDeletion(cacheEntry, container);\n }\n });\n}\n\n\nfunction enqueForDeletion(cacheEntry: CacheEntry, container: CacheEntry[]) {\n setTimeout(() => {\n if (cacheEntry.subscribers.size === 0) { // Still empty (no new subscribers readded after grace time)\n delArrayItem(container, cacheEntry);\n }\n }, 3000);\n}\n","import { LiveQueryContext } from '..';\nimport type { Transaction } from '../../classes/transaction';\nimport { getEffectiveKeys } from '../../dbcore/get-effective-keys';\nimport { deepClone, delArrayItem, setByKeyPath } from '../../functions/utils';\nimport DexiePromise, { PSD } from '../../helpers/promise';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport {\n DBCore, DBCoreMutateRequest, DBCoreMutateResponse, DBCoreQueryRequest,\n DBCoreQueryResponse\n} from '../../public/types/dbcore';\nimport { Middleware } from '../../public/types/middleware';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { adjustOptimisticFromFailures } from './adjust-optimistic-request-from-failures';\nimport { applyOptimisticOps } from './apply-optimistic-ops';\nimport { cache } from './cache';\nimport { findCompatibleQuery } from './find-compatible-query';\nimport { isCachableContext } from './is-cachable-context';\nimport { isCachableRequest } from './is-cachable-request';\nimport { signalSubscribersLazily } from './signalSubscribers';\nimport { subscribeToCacheEntry } from './subscribe-cachentry';\n\nexport const cacheMiddleware: Middleware = {\n stack: 'dbcore',\n level: 0,\n name: 'Cache',\n create: (core) => {\n const dbName = core.schema.name;\n const coreMW: DBCore = {\n ...core,\n transaction: (stores, mode, options) => {\n const idbtrans = core.transaction(\n stores,\n mode,\n options\n ) as IDBTransaction & {\n mutatedParts?: ObservabilitySet;\n _explicit?: boolean;\n };\n // Maintain TblQueryCache.ops array when transactions commit or abort\n if (mode === 'readwrite') {\n const ac = new AbortController();\n const { signal } = ac;\n const endTransaction = (wasCommitted: boolean) => () => {\n ac.abort();\n if (mode === 'readwrite') {\n // Collect which subscribers to notify:\n const affectedSubscribers = new Set<()=>void>();\n\n // Go through all tables in transaction and check if they have any optimistic updates\n for (const storeName of stores) {\n const tblCache = cache[`idb://${dbName}/${storeName}`];\n if (tblCache) {\n const table = core.table(storeName);\n // Pick optimistic ops that are part of this transaction\n const ops = tblCache.optimisticOps.filter(\n (op) => op.trans === idbtrans\n );\n // Transaction was marked as _explicit in enterTransactionScope(), transaction-helpers.ts.\n if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) {\n // Invalidate all queries that overlap with the mutated parts and signal their subscribers\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) {\n delArrayItem(entries, entry); // Remove the entry from the cache so it can be refreshed\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n } else if (ops.length > 0) {\n // Remove them from the optimisticOps array\n tblCache.optimisticOps = tblCache.optimisticOps.filter(\n (op) => op.trans !== idbtrans\n );\n // Commit or abort the optimistic updates\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (\n entry.res != null && // if entry.promise but not entry.res, we're fine. Query will resume now and get the result.\n idbtrans.mutatedParts/* &&\n obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)*/\n ) {\n if (wasCommitted && !entry.dirty) {\n const freezeResults = Object.isFrozen(entry.res);\n const modRes = applyOptimisticOps(\n entry.res as any[],\n entry.req,\n ops,\n table,\n entry,\n freezeResults\n );\n if (entry.dirty) {\n // Found out at this point that the entry is dirty - not to rely on!\n delArrayItem(entries, entry);\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n } else if (modRes !== entry.res) {\n entry.res = modRes;\n // Update promise\n entry.promise = DexiePromise.resolve({result: modRes} satisfies DBCoreQueryResponse);\n \n // No need to notify subscribers. They already have this value.\n // We have just updated the value of the cache without having to\n // requery the database - because we know the result for this\n // query based on computing the operations and applying them\n // to the previous result.\n }\n } else {\n if (entry.dirty) {\n // If the entry is dirty we need to get rid of it so that\n // a new entry will be created when the query is run again.\n delArrayItem(entries, entry);\n }\n // If we're not committing, we need to notify subscribers that the\n // optimistic updates are no longer valid.\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n }\n }\n }\n }\n affectedSubscribers.forEach((requery) => requery());\n }\n };\n idbtrans.addEventListener('abort', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('error', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('complete', endTransaction(true), {\n signal,\n });\n }\n return idbtrans;\n },\n table(tableName: string) {\n const downTable = core.table(tableName);\n const primKey = downTable.schema.primaryKey;\n const tableMW = {\n ...downTable,\n mutate(req: DBCoreMutateRequest): Promise {\n const trans = PSD.trans as Transaction;\n if (\n primKey.outbound || // Non-inbound tables are harded to apply optimistic updates on because we can't know primary key of results\n trans.db._options.cache === 'disabled' || // User has opted-out from caching\n trans.explicit // It's an explicit write transaction being made. Don't affect cache until transaction commits.\n ) {\n // Just forward the request to the core.\n return downTable.mutate(req);\n }\n // Find the TblQueryCache for this table:\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return downTable.mutate(req);\n\n const promise = downTable.mutate(req);\n if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(key => key == null))) {\n // There are some autoIncremented keys not set yet. Need to wait for completion before we can reliably enqueue the operation.\n // (or there are too many objects so we lazy out to avoid performance bottleneck for large bulk inserts)\n promise.then((res) => { // We need to extract result keys and generate cloned values with the keys set (so that applyOptimisticOps can work)\n // But we have a problem! The req.mutatedParts is still not complete so we have to actively add the keys to the unsignaledParts set manually.\n const reqWithResolvedKeys = {\n ...req,\n values: req.values.map((value, i) => {\n const valueWithKey = primKey.keyPath?.includes('.')\n ? deepClone(value)\n : {\n ...value,\n };\n setByKeyPath(valueWithKey, primKey.keyPath, res.results![i]);\n return valueWithKey;\n })\n };\n const adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res);\n tblCache.optimisticOps.push(adjustedReq);\n // Signal subscribers after the observability middleware has complemented req.mutatedParts with the new keys.\n // We must queue the task so that we get the req.mutatedParts updated by observability middleware first.\n // If we refactor the dependency between observability middleware and this middleware we might not need to queue the task.\n queueMicrotask(()=>req.mutatedParts && signalSubscribersLazily(req.mutatedParts)); // Reason for double laziness: in user awaits put and then does another put, signal once.\n });\n } else {\n // Enque the operation immediately\n tblCache.optimisticOps.push(req);\n // Signal subscribers that there are mutated parts\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts);\n promise.then((res) => {\n if (res.numFailures > 0) {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n const adjustedReq = adjustOptimisticFromFailures(tblCache, req, res);\n if (adjustedReq) {\n tblCache.optimisticOps.push(adjustedReq);\n }\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n }\n });\n promise.catch(()=> {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n });\n }\n return promise;\n },\n query(req: DBCoreQueryRequest): Promise {\n if (!isCachableContext(PSD, downTable) || !isCachableRequest(\"query\", req)) return downTable.query(req);\n const freezeResults =\n (PSD as LiveQueryContext).trans?.db._options.cache === 'immutable';\n const { requery, signal } = PSD as LiveQueryContext;\n let [cacheEntry, exactMatch, tblCache, container] =\n findCompatibleQuery(dbName, tableName, 'query', req);\n if (cacheEntry && exactMatch) {\n cacheEntry.obsSet = req.obsSet!; // So that optimistic result is monitored.\n // How? - because observability-middleware will track result where optimistic\n // mutations are applied and record it in the cacheEntry.\n // TODO: CHANGE THIS! The difference is resultKeys only.\n // Wanted behavior:\n // * cacheEntry obsSet should represent the obsSet without optimistic updates (so it can be checked when merging ops in tx commit)\n // * cacheEntry optimisticObsSet should represent the obsSet with current optimistic updates. It should be updated when adding an op\n // by adding the primary keys of the put/add/delete operation to the set.\n // * observability-middleware should stop recording req.obsSet when a cache entry exact match is found because it won't be used anyway.\n // I'm thinking of merging observability-middleware with cache-middleware into one single middleware because the dependencies are too\n // tight between them.\n } else {\n // --> TODO here: If not exact match, check if we have a superset to extract\n // the data from.\n\n // No cached result found. We need to query the database and cache the result.\n const promise = downTable.query(req).then((res) => {\n // Freeze or clone results\n const result = res.result;\n if (cacheEntry) cacheEntry.res = result;\n if (freezeResults) {\n // For performance reasons don't deep freeze.\n // Only freeze the top-level array and its items.\n // This is good enough to teach users that the result must be treated as immutable\n // without enforcing it recursively on the entire result (which is not even possible\n // for things like Date objects and typed arrays)\n for (let i = 0, l = result.length; i < l; ++i) {\n Object.freeze(result[i]);\n }\n Object.freeze(result);\n } else {\n // If not frozen, we need to clone the result to avoid user mutating the cache\n // When we do this, user's must feel conformable with the fact that the result\n // can be mutated deeply - user is not expected to have any respect for immutability.\n res.result = deepClone(result);\n }\n return res;\n }).catch(error => {\n // In case the query operation failed, we need to remove it from the cache\n // so that subsequent calls does not get the same error but re-evaluate\n // the query.\n if (container && cacheEntry) delArrayItem(container, cacheEntry);\n return Promise.reject(error);\n });\n cacheEntry = {\n obsSet: req.obsSet!,\n promise,\n subscribers: new Set(),\n type: 'query',\n req,\n dirty: false,\n };\n if (container) {\n container.push(cacheEntry);\n } else {\n container = [cacheEntry];\n if (!tblCache) {\n tblCache = cache[`idb://${dbName}/${tableName}`] = {\n queries: {\n query: {},\n count: {},\n },\n objs: new Map(),\n optimisticOps: [],\n unsignaledParts: {}\n };\n }\n tblCache.queries.query[req.query.index.name || ''] = container;\n }\n }\n subscribeToCacheEntry(cacheEntry, container!, requery, signal);\n return cacheEntry.promise.then((res: DBCoreQueryResponse) => {\n return {\n result: applyOptimisticOps(\n res.result,\n req,\n tblCache?.optimisticOps,\n downTable,\n cacheEntry!,\n freezeResults\n ) as any[], // readonly any[]\n };\n });\n },\n };\n return tableMW;\n },\n };\n return coreMW;\n },\n};\n\n\n","import { type Dexie } from \"../classes/dexie\";\nimport { type Table } from \"../classes/table\";\nimport { type Transaction } from \"../classes/transaction\";\n\nexport function vipify(\n target: T,\n vipDb: Dexie\n): T {\n return new Proxy(target, {\n get (target, prop, receiver) {\n // The \"db\" prop of the table or transaction is the only one we need to\n // override. The rest of the props can be accessed from the original\n // object.\n if (prop === 'db') return vipDb;\n return Reflect.get(target, prop, receiver);\n }\n });\n}\n","// Import types from the public API\nimport { Dexie as IDexie } from \"../../public/types/dexie\";\nimport { DexieOptions, DexieConstructor } from \"../../public/types/dexie-constructor\";\nimport { DbEvents } from \"../../public/types/db-events\";\n//import { PromiseExtended, PromiseExtendedConstructor } from '../../public/types/promise-extended';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from \"../../public/types/table-schema\";\nimport { DbSchema } from '../../public/types/db-schema';\n\n// Internal imports\nimport { Table, TableConstructor, createTableConstructor } from \"../table\";\nimport { Collection, CollectionConstructor, createCollectionConstructor } from '../collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { WhereClauseConstructor, createWhereClauseConstructor } from '../where-clause/where-clause-constructor';\nimport { Transaction } from '../transaction';\nimport { TransactionConstructor, createTransactionConstructor } from '../transaction/transaction-constructor';\nimport { Version } from \"../version/version\";\nimport { VersionConstructor, createVersionConstructor } from '../version/version-constructor';\n\n// Other imports...\nimport { DexieEventSet } from '../../public/types/dexie-event-set';\nimport { DexieExceptionClasses } from '../../public/types/errors';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\nimport Promise, { PSD, globalPSD } from '../../helpers/promise';\nimport { extend, override, keys, hasOwn } from '../../functions/utils';\nimport Events from '../../helpers/Events';\nimport { maxString, connections, READONLY, READWRITE } from '../../globals/constants';\nimport { getMaxKey } from '../../functions/quirks';\nimport { exceptions } from '../../errors';\nimport { lowerVersionFirst } from '../version/schema-helpers';\nimport { dexieOpen } from './dexie-open';\nimport { wrap } from '../../helpers/promise';\nimport { _onDatabaseDeleted } from '../../helpers/database-enumerator';\nimport { eventRejectHandler } from '../../functions/event-wrappers';\nimport { extractTransactionArgs, enterTransactionScope } from './transaction-helpers';\nimport { TransactionMode } from '../../public/types/transaction-mode';\nimport { rejection } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { DBCore } from '../../public/types/dbcore';\nimport { Middleware, DexieStacks } from '../../public/types/middleware';\nimport { virtualIndexMiddleware } from '../../dbcore/virtual-index-middleware';\nimport { hooksMiddleware } from '../../hooks/hooks-middleware';\nimport { IndexableType } from '../../public';\nimport { observabilityMiddleware } from '../../live-query/observability-middleware';\nimport { cacheExistingValuesMiddleware } from '../../dbcore/cache-existing-values-middleware';\nimport { cacheMiddleware } from \"../../live-query/cache/cache-middleware\";\nimport { vipify } from \"../../helpers/vipify\";\n\nexport interface DbReadyState {\n dbOpenError: any;\n isBeingOpened: boolean;\n onReadyBeingFired: undefined | Function[];\n openComplete: boolean;\n dbReadyResolve: () => void;\n dbReadyPromise: Promise;\n cancelOpen: (reason?: Error) => void;\n openCanceller: Promise & { _stackHolder?: Error };\n autoSchema: boolean;\n vcFired?: boolean;\n PR1398_maxLoop?: number;\n autoOpen?: boolean;\n}\n\nexport class Dexie implements IDexie {\n _options: DexieOptions;\n _state: DbReadyState;\n _versions: Version[];\n _storeNames: string[];\n _deps: DexieDOMDependencies;\n _allTables: { [name: string]: Table; };\n _createTransaction: (this: Dexie, mode: IDBTransactionMode, storeNames: ArrayLike, dbschema: { [tableName: string]: TableSchema; }, parentTransaction?: Transaction) => Transaction;\n _dbSchema: { [tableName: string]: TableSchema; };\n _hasGetAll?: boolean;\n _maxKey: IndexableType;\n _fireOnBlocked: (ev: Event) => void;\n _middlewares: {[StackName in keyof DexieStacks]?: Middleware[]} = {};\n _vip?: boolean;\n _novip: Dexie;// db._novip is to escape to orig db from db.vip.\n core: DBCore;\n\n name: string;\n verno: number = 0;\n idbdb: IDBDatabase | null;\n vip: Dexie;\n on: DbEvents;\n\n Table: TableConstructor;\n WhereClause: WhereClauseConstructor;\n Collection: CollectionConstructor;\n Version: VersionConstructor;\n Transaction: TransactionConstructor;\n static disableBfCache?: boolean;\n\n constructor(name: string, options?: DexieOptions) {\n const deps = (Dexie as any as DexieConstructor).dependencies;\n this._options = options = {\n // Default Options\n addons: (Dexie as any as DexieConstructor).addons, // Pick statically registered addons by default\n autoOpen: true, // Don't require db.open() explicitely.\n // Default DOM dependency implementations from static prop.\n indexedDB: deps.indexedDB, // Backend IndexedDB api. Default to browser env.\n IDBKeyRange: deps.IDBKeyRange, // Backend IDBKeyRange api. Default to browser env.\n cache: 'cloned', // Default to cloned for backward compatibility. For best performance and least memory consumption use 'immutable'.\n ...options\n }; \n this._deps = {\n indexedDB: options.indexedDB as IDBFactory,\n IDBKeyRange: options.IDBKeyRange as typeof IDBKeyRange\n };\n const {\n addons,\n } = options;\n this._dbSchema = {};\n this._versions = [];\n this._storeNames = [];\n this._allTables = {};\n this.idbdb = null;\n this._novip = this;\n const state: DbReadyState = {\n dbOpenError: null,\n isBeingOpened: false,\n onReadyBeingFired: null,\n openComplete: false,\n dbReadyResolve: nop,\n dbReadyPromise: null as Promise,\n cancelOpen: nop,\n openCanceller: null as Promise,\n autoSchema: true,\n PR1398_maxLoop: 3,\n autoOpen: options.autoOpen,\n };\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n this._state = state;\n this.name = name;\n this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", \"close\", { ready: [promisableChain, nop] }) as DbEvents;\n this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => {\n return (subscriber, bSticky) => {\n (Dexie as any as DexieConstructor).vip(() => {\n const state = this._state;\n if (state.openComplete) {\n // Database already open. Call subscriber asap.\n if (!state.dbOpenError) Promise.resolve().then(subscriber);\n // bSticky: Also subscribe to future open sucesses (after close / reopen) \n if (bSticky) subscribe(subscriber);\n } else if (state.onReadyBeingFired) {\n // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected\n state.onReadyBeingFired.push(subscriber);\n if (bSticky) subscribe(subscriber);\n } else {\n // Database not yet open. Subscribe to it.\n subscribe(subscriber);\n // If bSticky is falsy, make sure to unsubscribe subscriber when fired once.\n const db = this;\n if (!bSticky) subscribe(function unsubscribe() {\n db.on.ready.unsubscribe(subscriber);\n db.on.ready.unsubscribe(unsubscribe);\n });\n }\n });\n }\n });\n\n // Create derived classes bound to this instance of Dexie:\n this.Collection = createCollectionConstructor(this);\n this.Table = createTableConstructor(this);\n this.Transaction = createTransactionConstructor(this);\n this.Version = createVersionConstructor(this);\n this.WhereClause = createWhereClauseConstructor(this);\n\n // Default subscribers to \"versionchange\" and \"blocked\".\n // Can be overridden by custom handlers. If custom handlers return false, these default\n // behaviours will be prevented.\n this.on(\"versionchange\", ev => {\n // Default behavior for versionchange event is to close database connection.\n // Caller can override this behavior by doing db.on(\"versionchange\", function(){ return false; });\n // Let's not block the other window from making it's delete() or open() call.\n // NOTE! This event is never fired in IE,Edge or Safari.\n if (ev.newVersion > 0)\n console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`);\n else\n console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`);\n this.close({disableAutoOpen: false});\n // In many web applications, it would be recommended to force window.reload()\n // when this event occurs. To do that, subscribe to the versionchange event\n // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion)\n // The reason for this is that your current web app obviously has old schema code that needs\n // to be updated. Another window got a newer version of the app and needs to upgrade DB but\n // your window is blocking it unless we close it here.\n });\n this.on(\"blocked\", ev => {\n if (!ev.newVersion || ev.newVersion < ev.oldVersion)\n console.warn(`Dexie.delete('${this.name}') was blocked`);\n else\n console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`);\n });\n\n this._maxKey = getMaxKey(options.IDBKeyRange as typeof IDBKeyRange);\n\n this._createTransaction = (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n parentTransaction?: Transaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction);\n\n this._fireOnBlocked = ev => {\n this.on(\"blocked\").fire(ev);\n // Workaround (not fully*) for missing \"versionchange\" event in IE,Edge and Safari:\n connections\n .filter(c => c.name === this.name && c !== this && !c._state.vcFired)\n .map(c => c.on(\"versionchange\").fire(ev));\n }\n\n // Default middlewares:\n this.use(cacheExistingValuesMiddleware);\n this.use(cacheMiddleware);\n this.use(observabilityMiddleware);\n this.use(virtualIndexMiddleware);\n this.use(hooksMiddleware);\n\n const vipDB = new Proxy(this, {\n get: (_, prop, receiver) => {\n if (prop === '_vip') return true;\n if (prop === 'table') return (tableName: string) => vipify(this.table(tableName), vipDB);\n const rv = Reflect.get(_, prop, receiver);\n if (rv instanceof Table) return vipify(rv, vipDB);\n if (prop === 'tables') return (rv as Table[]).map(t => vipify(t, vipDB));\n if (prop === '_createTransaction') return function() {\n const tx: Transaction = (rv as typeof this._createTransaction).apply(this, arguments);\n return vipify(tx, vipDB);\n }\n return rv;\n }\n });\n this.vip = vipDB;\n\n // Call each addon:\n addons.forEach(addon => addon(this));\n }\n\n version(versionNumber: number): Version {\n if (isNaN(versionNumber) || versionNumber < 0.1) throw new exceptions.Type(`Given version is not a positive number`);\n versionNumber = Math.round(versionNumber * 10) / 10;\n if (this.idbdb || this._state.isBeingOpened)\n throw new exceptions.Schema(\"Cannot add version when database is open\");\n this.verno = Math.max(this.verno, versionNumber);\n const versions = this._versions;\n var versionInstance = versions.filter(\n v => v._cfg.version === versionNumber)[0];\n if (versionInstance) return versionInstance;\n versionInstance = new this.Version(versionNumber);\n versions.push(versionInstance);\n versions.sort(lowerVersionFirst);\n versionInstance.stores({}); // Derive earlier schemas by default.\n // Disable autoschema mode, as at least one version is specified.\n this._state.autoSchema = false;\n return versionInstance;\n }\n\n _whenReady(fn: () => Promise): Promise {\n return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new Promise((resolve, reject) => {\n if (this._state.openComplete) {\n // idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return reject(new exceptions.DatabaseClosed(this._state.dbOpenError));\n }\n if (!this._state.isBeingOpened) {\n if (!this._state.autoOpen) {\n reject(new exceptions.DatabaseClosed());\n return;\n }\n this.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n this._state.dbReadyPromise.then(resolve, reject);\n }).then(fn);\n }\n\n use({stack, create, level, name}: Middleware): this {\n if (name) this.unuse({stack, name}); // Be able to replace existing middleware.\n const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n middlewares.push({stack, create, level: level == null ? 10 : level, name});\n middlewares.sort((a, b) => a.level - b.level);\n // Todo update db.core and db.tables...core ? Or should be expect this to have effect\n // only after next open()?\n return this;\n }\n\n unuse({stack, create}: Middleware<{stack: keyof DexieStacks}>): this;\n unuse({stack, name}: {stack: keyof DexieStacks, name: string}): this;\n unuse({stack, name, create}: {stack: keyof DexieStacks, name?: string, create?: Function}) {\n if (stack && this._middlewares[stack]) {\n this._middlewares[stack] = this._middlewares[stack].filter(mw =>\n create ? mw.create !== create : // Given middleware has a create method. Match that exactly.\n name ? mw.name !== name : // Given middleware spec \n false);\n }\n return this;\n }\n\n open() {\n return usePSD(\n globalPSD, // Enforce global scope here since db.open() can be part of a live query or transaction scope\n () => dexieOpen(this)\n );\n }\n\n _close(): void {\n const state = this._state;\n const idx = connections.indexOf(this);\n if (idx >= 0) connections.splice(idx, 1);\n if (this.idbdb) {\n try { this.idbdb.close(); } catch (e) { }\n this.idbdb = null;\n } \n // Reset dbReadyPromise promise:\n if (!state.isBeingOpened) {\n // Only if not being opened, reset these promises.\n // Otherwise, keep them so existing promise consumers will resolve when db\n // db is reopened later on, in case closing for purpose reopening, using {disableAutoOpen: false}.\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n }\n }\n\n close({disableAutoOpen} = {disableAutoOpen: true}): void {\n const state = this._state;\n if (disableAutoOpen) {\n if (state.isBeingOpened) {\n // cancel before the call to this._close() because this._close() will recreate dbReadyPromise and openCanceller.\n state.cancelOpen(new exceptions.DatabaseClosed());\n }\n this._close();\n state.autoOpen = false;\n state.dbOpenError = new exceptions.DatabaseClosed();\n } else {\n this._close();\n state.autoOpen = this._options.autoOpen ||\n state.isBeingOpened; // If an open call is ongoing, that same promise will resolve when db is reopend.\n state.openComplete = false;\n state.dbOpenError = null;\n }\n }\n\n delete(closeOptions = {disableAutoOpen: true}): Promise {\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n const hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; \n const state = this._state;\n return new Promise((resolve, reject) => {\n const doDelete = () => {\n this.close(closeOptions);\n var req = this._deps.indexedDB.deleteDatabase(this.name);\n req.onsuccess = wrap(() => {\n _onDatabaseDeleted(this._deps, this.name);\n resolve();\n });\n req.onerror = eventRejectHandler(reject);\n req.onblocked = this._fireOnBlocked;\n }\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n if (hasInvalidArguments) throw new exceptions.InvalidArgument(\"Invalid closeOptions argument to db.delete()\");\n if (state.isBeingOpened) {\n state.dbReadyPromise.then(doDelete);\n } else {\n doDelete();\n }\n });\n }\n\n backendDB() {\n return this.idbdb;\n }\n\n isOpen() {\n return this.idbdb !== null;\n }\n\n hasBeenClosed() {\n const dbOpenError = this._state.dbOpenError;\n return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n }\n\n hasFailed() {\n return this._state.dbOpenError !== null;\n }\n\n dynamicallyOpened() {\n return this._state.autoSchema;\n }\n\n get tables () {\n return keys(this._allTables).map(name => this._allTables[name]);\n }\n\n transaction(): Promise {\n const args = extractTransactionArgs.apply(this, arguments);\n return this._transaction.apply(this, args);\n }\n\n _transaction(mode: TransactionMode, tables: Array, scopeFunc: Function) {\n let parentTransaction = PSD.trans as Transaction | undefined;\n // Check if parent transactions is bound to this db instance, and if caller wants to reuse it\n if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) parentTransaction = null;\n const onlyIfCompatible = mode.indexOf('?') !== -1;\n mode = mode.replace('!', '').replace('?', '') as TransactionMode; // Ok. Will change arguments[0] as well but we wont touch arguments henceforth.\n let idbMode: IDBTransactionMode,\n storeNames;\n\n try {\n //\n // Get storeNames from arguments. Either through given table instances, or through given table names.\n //\n storeNames = tables.map(table => {\n var storeName = table instanceof this.Table ? table.name : table;\n if (typeof storeName !== 'string') throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n return storeName;\n });\n\n //\n // Resolve mode. Allow shortcuts \"r\" and \"rw\".\n //\n if (mode == \"r\" || mode === READONLY)\n idbMode = READONLY;\n else if (mode == \"rw\" || mode == READWRITE)\n idbMode = READWRITE;\n else\n throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n\n if (parentTransaction) {\n // Basic checks\n if (parentTransaction.mode === READONLY && idbMode === READWRITE) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n }\n if (parentTransaction) {\n storeNames.forEach(storeName => {\n if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Table \" + storeName +\n \" not included in parent transaction.\");\n }\n });\n }\n if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n // '?' mode should not keep using an inactive transaction.\n parentTransaction = null;\n }\n }\n } catch (e) {\n return parentTransaction ?\n parentTransaction._promise(null, (_, reject) => {reject(e);}) :\n rejection (e);\n }\n // If this is a sub-transaction, lock the parent and then launch the sub-transaction.\n const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);\n return (parentTransaction ?\n parentTransaction._promise(idbMode, enterTransaction, \"lock\") :\n PSD.trans ?\n // no parent transaction despite PSD.trans exists. Make sure also\n // that the zone we create is not a sub-zone of current, because\n // Promise.follow() should not wait for it if so.\n usePSD(PSD.transless, ()=>this._whenReady(enterTransaction)) :\n this._whenReady (enterTransaction));\n }\n\n table(tableName: string): Table;\n table(tableName: string): ITable;\n table(tableName: string): Table {\n if (!hasOwn(this._allTables, tableName)) {\n throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); }\n return this._allTables[tableName];\n }\n}\n","import {\n Observable as IObservable,\n Observer,\n Subscription,\n} from \"../../public/types/observable\";\n\nconst symbolObservable: typeof Symbol.observable =\n typeof Symbol !== \"undefined\" && \"observable\" in Symbol\n ? Symbol.observable\n : \"@@observable\" as any;\n\nexport class Observable implements IObservable {\n private _subscribe: (observer: Observer) => Subscription;\n hasValue?: ()=>boolean;\n getValue?: ()=>T;\n\n constructor(subscribe: (observer: Observer) => Subscription) {\n this._subscribe = subscribe;\n }\n\n subscribe(\n onNext?: ((value: T) => void) | null,\n onError?: ((error: any) => void) | null,\n onComplete?: (() => void) | null\n ): Subscription;\n subscribe(observer?: Observer | null): Subscription;\n subscribe(x?: any, error?: any, complete?: any): Subscription {\n return this._subscribe(\n !x || typeof x === \"function\" ? { next: x, error, complete } : x\n );\n }\n\n [symbolObservable]() {\n return this;\n }\n}\n","import { _global } from '../../globals/global';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\n\nexport let domDeps: DexieDOMDependencies\n\ntry {\n domDeps = {\n // Required:\n indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n };\n} catch (e) {\n domDeps = { indexedDB: null, IDBKeyRange: null };\n}\n","import { _global, isAsyncFunction, keys, objectIsEmpty } from '../functions/utils';\nimport {\n globalEvents,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport {\n beginMicroTickScope,\n decrementExpectedAwaits,\n endMicroTickScope,\n execInGlobalContext,\n incrementExpectedAwaits,\n NativePromise,\n newScope,\n PSD,\n usePSD,\n} from '../helpers/promise';\nimport { ObservabilitySet } from '../public/types/db-events';\nimport {\n Observable as IObservable,\n Subscription,\n} from '../public/types/observable';\nimport { Observable } from '../classes/observable/observable';\nimport { extendObservabilitySet } from './extend-observability-set';\nimport { rangesOverlap } from '../helpers/rangeset';\nimport { domDeps } from '../classes/dexie/dexie-dom-dependencies';\nimport { Transaction } from '../classes/transaction';\nimport { obsSetsOverlap } from './obs-sets-overlap';\n\nexport interface LiveQueryContext {\n subscr: ObservabilitySet;\n signal: AbortSignal;\n requery: () => void;\n trans: null | Transaction;\n querier: Function; // For debugging purposes and Error messages\n}\n\nexport function liveQuery(querier: () => T | Promise): IObservable {\n let hasValue = false;\n let currentValue: T;\n const observable = new Observable((observer) => {\n const scopeFuncIsAsync = isAsyncFunction(querier);\n function execute(ctx: LiveQueryContext) {\n const wasRootExec = beginMicroTickScope(); // Performance: Avoid starting a new microtick scope within the async context.\n try {\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n let rv = newScope(querier, ctx);\n if (scopeFuncIsAsync) {\n // Make sure to set rv = rv.finally in order to wait to after decrementExpectedAwaits() has been called.\n // This fixes zone leaking issue that the liveQuery zone can leak to observer's next microtask.\n rv = (rv as Promise).finally(decrementExpectedAwaits);\n }\n return rv;\n } finally {\n wasRootExec && endMicroTickScope(); // Given that we created the microtick scope, we must also end it.\n }\n }\n\n let closed = false;\n let abortController: AbortController;\n\n let accumMuts: ObservabilitySet = {};\n let currentObs: ObservabilitySet = {};\n\n const subscription: Subscription = {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n if (closed) return;\n closed = true;\n if (abortController) abortController.abort();\n if (startedListening) globalEvents.storagemutated.unsubscribe(mutationListener);\n },\n };\n\n observer.start && observer.start(subscription); // https://github.com/tc39/proposal-observable\n\n let startedListening = false;\n\n const doQuery = () => execInGlobalContext(_doQuery);\n\n function shouldNotify() {\n return obsSetsOverlap(currentObs, accumMuts);\n }\n\n const mutationListener = (parts: ObservabilitySet) => {\n extendObservabilitySet(accumMuts, parts);\n if (shouldNotify()) {\n doQuery();\n }\n };\n\n const _doQuery = () => {\n if (\n closed || // closed - don't run!\n !domDeps.indexedDB) // SSR in sveltekit, nextjs etc\n {\n return;\n }\n accumMuts = {};\n const subscr: ObservabilitySet = {};\n // Abort signal fill three purposes:\n // 1. Abort the query if the observable is unsubscribed.\n // 2. Abort the query if a new query is made before the previous one has completed.\n // 3. For cached queries to know if they should remain in memory or could be enqued for being freed up.\n // (they will remain in memory for a short time and if noone needs them again, they will eventually be freed up)\n if (abortController) abortController.abort(); // Cancel previous query. Last query will be cancelled on unsubscribe().\n abortController = new AbortController();\n \n const ctx: LiveQueryContext = {\n subscr,\n signal: abortController.signal,\n requery: doQuery,\n querier,\n trans: null // Make the scope transactionless (don't reuse transaction from outer scope of the caller of subscribe())\n }\n const ret = execute(ctx);\n Promise.resolve(ret).then(\n (result) => {\n hasValue = true;\n currentValue = result;\n if (closed || ctx.signal.aborted) {\n // closed - no subscriber anymore.\n // signal.aborted - new query was made before this one completed and\n // the querier might have catched AbortError and return successful result.\n // If so, we should not rely in that result because we know we have aborted\n // this run, which means there's another run going on that will handle accumMuts\n // and we must not base currentObs on the half-baked subscr.\n return;\n }\n accumMuts = {};\n // Update what we are subscribing for based on this last run:\n currentObs = subscr;\n if (!objectIsEmpty(currentObs) && !startedListening) {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);\n startedListening = true;\n }\n execInGlobalContext(()=>!closed && observer.next && observer.next(result));\n },\n (err) => {\n hasValue = false;\n if (!['DatabaseClosedError', 'AbortError'].includes(err?.name)) {\n if (!closed) execInGlobalContext(()=>{\n if (closed) return;\n observer.error && observer.error(err);\n });\n }\n }\n );\n };\n\n // Use setTimeot here to guarantee execution in a private macro task before and\n // after. The helper executeInGlobalContext(_doQuery) is not enough here because\n // caller of `subscribe()` could be anything, such as a frontend framework that will\n // continue in the same tick after subscribe() is called and call other\n // eftects, that could involve dexie operations such as writing to the DB.\n // If that happens, the private zone echoes from a live query tast started here\n // could still be ongoing when the other operations start and make them inherit\n // the async context from a live query.\n setTimeout(doQuery, 0);\n return subscription;\n });\n observable.hasValue = () => hasValue;\n observable.getValue = () => currentValue;\n return observable;\n}\n","import { Dexie as _Dexie } from './dexie';\nimport { _global } from '../../globals/global';\nimport { props, derive, extend, override, getByKeyPath, setByKeyPath, delByKeyPath, shallowClone, deepClone, asap } from '../../functions/utils';\nimport { getObjectDiff } from \"../../functions/get-object-diff\";\nimport { fullNameExceptions } from '../../errors';\nimport { DexieConstructor } from '../../public/types/dexie-constructor';\nimport { getDatabaseNames } from '../../helpers/database-enumerator';\nimport { PSD } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { newScope } from '../../helpers/promise';\nimport { rejection } from '../../helpers/promise';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { dexieStackFrameFilter, minKey, connections, DEXIE_VERSION } from '../../globals/constants';\nimport Events from '../../helpers/Events';\nimport { exceptions } from '../../errors';\nimport { errnames } from '../../errors';\nimport { getMaxKey } from '../../functions/quirks';\nimport { vip } from './vip';\nimport { globalEvents } from '../../globals/global-events';\nimport { liveQuery } from '../../live-query/live-query';\nimport { extendObservabilitySet } from '../../live-query/extend-observability-set';\nimport { domDeps } from './dexie-dom-dependencies';\nimport { cmp } from '../../functions/cmp';\nimport { cache } from '../../live-query/cache/cache';\n\n/* (Dexie) is an instance of DexieConstructor, as defined in public/types/dexie-constructor.d.ts\n* (new Dexie()) is an instance of Dexie, as defined in public/types/dexie.d.ts\n* \n* Why we're doing this?\n\n* Because we've choosen to define the public Dexie API using a DexieConstructor interface\n* rather than declaring a class. On that interface, all static props are defined.\n* In practice, class Dexie's constructor implements DexieConstructor and all member props\n* are defined in interface Dexie. We could say, it's a typescript limitation of not being\n* able to define a static interface that forces us to do the cast below.\n*/\nconst Dexie = _Dexie as any as DexieConstructor;\n\n//\n// Set all static methods and properties onto Dexie:\n// \nprops(Dexie, {\n\n // Dexie.BulkError = class BulkError {...};\n // Dexie.XXXError = class XXXError {...};\n ...fullNameExceptions,\n\n //\n // Static delete() method.\n //\n delete(databaseName: string) {\n const db = new Dexie(databaseName, {addons: []});\n return db.delete();\n },\n\n //\n // Static exists() method.\n //\n exists(name: string) {\n return new Dexie(name, { addons: [] }).open().then(db => {\n db.close();\n return true;\n }).catch('NoSuchDatabaseError', () => false);\n },\n\n //\n // Static method for retrieving a list of all existing databases at current host.\n //\n getDatabaseNames(cb) {\n try {\n return getDatabaseNames(Dexie.dependencies).then(cb);\n } catch {\n return rejection(new exceptions.MissingAPI());\n }\n },\n\n /** @deprecated */\n defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return Class;\n },\n\n ignoreTransaction(scopeFunc) {\n // In case caller is within a transaction but needs to create a separate transaction.\n // Example of usage:\n //\n // Let's say we have a logger function in our app. Other application-logic should be unaware of the\n // logger function and not need to include the 'logentries' table in all transaction it performs.\n // The logging should always be done in a separate transaction and not be dependant on the current\n // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction.\n //\n // Dexie.ignoreTransaction(function() {\n // db.logentries.add(newLogEntry);\n // });\n //\n // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction\n // in current Promise-scope.\n //\n // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an\n // API for this because\n // 1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout().\n // 2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate().\n // 3) setImmediate() is not supported in the ES standard.\n // 4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough.\n return PSD.trans ?\n usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional.\n scopeFunc(); // No need to change scope because there is no ongoing transaction.\n },\n\n vip,\n\n async: function (generatorFn: Function) {\n return function () {\n try {\n var rv = awaitIterator(generatorFn.apply(this, arguments));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n };\n },\n\n spawn: function (generatorFn, args, thiz) {\n try {\n var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n },\n\n // Dexie.currentTransaction property\n currentTransaction: {\n get: () => PSD.trans || null\n },\n\n waitFor: function (promiseOrFunction, optionalTimeout) {\n // If a function is provided, invoke it and pass the returning value to Transaction.waitFor()\n const promise = Promise.resolve(\n typeof promiseOrFunction === 'function' ?\n Dexie.ignoreTransaction(promiseOrFunction) :\n promiseOrFunction)\n .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required. \n\n // Run given promise on current transaction. If no current transaction, just return a Dexie promise based\n // on given value.\n return PSD.trans ?\n PSD.trans.waitFor(promise) :\n promise;\n },\n\n // Export our Promise implementation since it can be handy as a standalone Promise implementation\n Promise: Promise,\n\n // Dexie.debug proptery:\n // Dexie.debug = false\n // Dexie.debug = true\n // Dexie.debug = \"dexie\" - don't hide dexie's stack frames.\n debug: {\n get: () => Debug.debug,\n set: value => {\n Debug.setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter);\n }\n },\n\n // Export our derive/extend/override methodology\n derive: derive, // Deprecate?\n extend: extend, // Deprecate?\n props: props,\n override: override, // Deprecate?\n // Export our Events() function - can be handy as a toolkit\n Events: Events,\n on: globalEvents,\n liveQuery,\n extendObservabilitySet,\n // Utilities\n getByKeyPath: getByKeyPath,\n setByKeyPath: setByKeyPath,\n delByKeyPath: delByKeyPath,\n shallowClone: shallowClone,\n deepClone: deepClone,\n getObjectDiff: getObjectDiff,\n cmp,\n asap: asap,\n //maxKey: new Dexie('',{addons:[]})._maxKey,\n minKey: minKey,\n // Addon registry\n addons: [],\n // Global DB connection list\n connections: connections,\n\n //MultiModifyError: exceptions.Modify, // Obsolete!\n errnames: errnames,\n\n // Export other static classes\n //IndexSpec: IndexSpec, Obsolete!\n //TableSchema: TableSchema, Obsolete!\n\n //\n // Dependencies\n //\n // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included.\n //\n // In node.js, however, these properties must be set \"manually\" before instansiating a new Dexie().\n // For node.js, you need to require indexeddb-js or similar and then set these deps.\n //\n dependencies: domDeps,\n cache,\n\n // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc.\n semVer: DEXIE_VERSION,\n version: DEXIE_VERSION.split('.')\n .map(n => parseInt(n))\n .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))),\n\n // https://github.com/dfahlander/Dexie.js/issues/186\n // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return\n // x.default. Workaround: Set Dexie.default = Dexie.\n // default: Dexie, // Commented because solved in index-umd.ts instead.\n // Make it possible to import {Dexie} (non-default import)\n // Reason 1: May switch to that in future.\n // Reason 2: We declare it both default and named exported in d.ts to make it possible\n // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely\n // exporting the symbol, not just default exporting)\n // Dexie: Dexie // Commented because solved in index-umd.ts instead.\n});\n\nDexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange);\n","import { globalEvents, DEXIE_STORAGE_MUTATED_EVENT_NAME, STORAGE_MUTATED_DOM_EVENT_NAME } from '../globals/global-events';\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport { signalSubscribersNow } from './cache/signalSubscribers';\n\nif (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => {\n if (!propagatingLocally) {\n let event: CustomEvent;\n event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, {\n detail: updatedParts\n });\n propagatingLocally = true;\n dispatchEvent(event);\n propagatingLocally = false;\n }\n });\n addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({detail}: CustomEvent) => {\n if (!propagatingLocally) {\n propagateLocally(detail);\n }\n });\n}\n\n/** Called from listeners to BroadcastChannel and DOM event to\n * propagate the event locally into dexie's storagemutated event\n * and invalidate cached queries.\n * \n * This function is only called when the event is not originating\n * from this same Dexie module - either from another redundant dexie import\n * or from a foreign tab or worker. That's why we need to invalidate\n * the cache when this happens.\n */\nexport function propagateLocally(updateParts: ObservabilitySet) {\n let wasMe = propagatingLocally;\n try {\n propagatingLocally = true;\n // Fire the \"storagemutated\" event.\n globalEvents.storagemutated.fire(updateParts);\n // Invalidate cached queries and signal subscribers to requery.\n signalSubscribersNow(updateParts, true);\n } finally {\n propagatingLocally = wasMe;\n }\n}\n\nexport let propagatingLocally = false;\n","import {\n globalEvents,\n STORAGE_MUTATED_DOM_EVENT_NAME,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport { propagateLocally, propagatingLocally } from './propagate-locally';\n\nexport let bc: BroadcastChannel;\n\nexport let createBC = ()=>{};\n\nif (typeof BroadcastChannel !== 'undefined') {\n createBC = () => {\n bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME);\n bc.onmessage = ev => ev.data && propagateLocally(ev.data);\n }\n createBC();\n\n /**\n * The Node.js BroadcastChannel will prevent the node process from exiting\n * if the BroadcastChannel is not closed.\n * Therefore we have to call unref() which allows the process to finish\n * properly even when the BroadcastChannel is never closed.\n * @link https://nodejs.org/api/worker_threads.html#broadcastchannelunref\n * @link https://github.com/dexie/Dexie.js/pull/1576\n */\n if (typeof (bc as any).unref === 'function') {\n (bc as any).unref();\n }\n \n //\n // Propagate local changes to remote tabs, windows and workers via BroadcastChannel\n //\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n if (!propagatingLocally) {\n bc.postMessage(changedParts);\n }\n });\n}\n","import { Dexie } from \"./classes/dexie\";\nimport { connections } from \"./globals/constants\";\nimport { debug } from \"./helpers/debug\";\nimport { RangeSet } from \"./helpers/rangeset\";\nimport { bc, createBC } from \"./live-query/enable-broadcast\";\nimport { propagateLocally } from \"./live-query/propagate-locally\";\n\n\nif (typeof addEventListener !== 'undefined') {\n addEventListener('pagehide', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pagehide');\n bc?.close();\n for (const db of connections) {\n db.close({disableAutoOpen: false});\n }\n }\n });\n addEventListener('pageshow', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pageshow');\n createBC();\n propagateLocally({all: new RangeSet(-Infinity, [[]])}); // Trigger all queries to requery\n }\n });\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function add(value: number | BigInt | Array) {\n return new PropModification({add: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function remove(value: number | BigInt | Array) {\n return new PropModification({remove: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function replacePrefix(a: string, b:string) {\n return new PropModification({replacePrefix: [a, b]});\n}\n","import { Dexie } from './classes/dexie';\nimport { DexieConstructor } from './public/types/dexie-constructor';\nimport { DexiePromise } from './helpers/promise';\nimport { mapError } from './errors';\nimport * as Debug from './helpers/debug';\nimport { dexieStackFrameFilter } from './globals/constants';\n\n// Generate all static properties such as Dexie.maxKey etc\n// (implement interface DexieConstructor):\nimport './classes/dexie/dexie-static-props';\nimport './live-query/enable-broadcast';\nimport './support-bfcache';\nimport { liveQuery } from './live-query/live-query';\nimport { Entity } from './classes/entity/Entity';\nimport { cmp } from './functions/cmp';\nimport { PropModification, PropModSymbol } from './helpers/prop-modification';\nimport { replacePrefix, add, remove } from './functions/propmods';\n\n\n// Set rejectionMapper of DexiePromise so that it generally tries to map\n// DOMErrors and DOMExceptions to a DexieError instance with same name but with\n// async stack support and with a prototypal inheritance from DexieError and Error.\n// of Map DOMErrors and DOMExceptions to corresponding Dexie errors.\nDexiePromise.rejectionMapper = mapError;\n\n// Let the async stack filter focus on app code and filter away frames from dexie.min.js:\nDebug.setDebug(Debug.debug, dexieStackFrameFilter);\n\nexport { RangeSet, mergeRanges, rangesOverlap } from \"./helpers/rangeset\";\nexport { Dexie, liveQuery }; // Comply with public/index.d.ts.\nexport { Entity };\nexport { cmp };\nexport { PropModSymbol, PropModification, replacePrefix, add, remove };\nexport default Dexie;\n"],"names":["asap","_a","Promise","Dexie","safari14Workaround","_Dexie","Debug.debug","Debug.setDebug"],"mappings":"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"} \ No newline at end of file diff --git a/src/dexie/dist/modern/dexie.min.mjs b/src/dexie/dist/modern/dexie.min.mjs new file mode 100644 index 000000000..5b3a35ac6 --- /dev/null +++ b/src/dexie/dist/modern/dexie.min.mjs @@ -0,0 +1,2 @@ +const e="undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:"undefined"!=typeof window?window:global,t=Object.keys,n=Array.isArray;function r(e,n){return"object"!=typeof n||t(n).forEach((function(t){e[t]=n[t]})),e}"undefined"==typeof Promise||e.Promise||(e.Promise=Promise);const s=Object.getPrototypeOf,i={}.hasOwnProperty;function o(e,t){return i.call(e,t)}function a(e,n){"function"==typeof n&&(n=n(s(e))),("undefined"==typeof Reflect?t:Reflect.ownKeys)(n).forEach((t=>{l(e,t,n[t])}))}const u=Object.defineProperty;function l(e,t,n,s){u(e,t,r(n&&o(n,"get")&&"function"==typeof n.get?{get:n.get,set:n.set,configurable:!0}:{value:n,configurable:!0,writable:!0},s))}function c(e){return{from:function(t){return e.prototype=Object.create(t.prototype),l(e.prototype,"constructor",e),{extend:a.bind(null,e.prototype)}}}}const h=Object.getOwnPropertyDescriptor;function d(e,t){let n;return h(e,t)||(n=s(e))&&d(n,t)}const f=[].slice;function p(e,t,n){return f.call(e,t,n)}function y(e,t){return t(e)}function m(e){if(!e)throw new Error("Assertion Failed")}function b(t){e.setImmediate?setImmediate(t):setTimeout(t,0)}function g(e,t){if("string"==typeof t&&o(e,t))return e[t];if(!t)return e;if("string"!=typeof t){for(var n=[],r=0,s=t.length;r["Int","Uint","Float"].map((t=>t+e+"Array")))))).filter((t=>e[t])),O=new Set(k.map((t=>e[t])));function P(e){const t={};for(const n in e)if(o(e,n)){const r=e[n];t[n]=!r||"object"!=typeof r||O.has(r.constructor)?r:P(r)}return t}let E=null;function K(e){E=new WeakMap;const t=S(e);return E=null,t}function S(e){if(!e||"object"!=typeof e)return e;let t=E.get(e);if(t)return t;if(n(e)){t=[],E.set(e,t);for(var r=0,i=e.length;r=0&&e.splice(n,1),n>=0}const T={};function I(e){var t,r,s,i;if(1===arguments.length){if(n(e))return e.slice();if(this===T&&"string"==typeof e)return[e];if(i=D(e)){for(r=[];!(s=i.next()).done;)r.push(s.value);return r}if(null==e)return[e];if("number"==typeof(t=e.length)){for(r=new Array(t);t--;)r[t]=e[t];return r}return[e]}for(t=arguments.length,r=new Array(t);t--;)r[t]=arguments[t];return r}const B="undefined"!=typeof Symbol?e=>"AsyncFunction"===e[Symbol.toStringTag]:()=>!1;var R=["Unknown","Constraint","Data","TransactionInactive","ReadOnly","Version","NotFound","InvalidState","InvalidAccess","Abort","Timeout","QuotaExceeded","Syntax","DataClone"],$=["Modify","Bulk","OpenFailed","VersionChange","Schema","Upgrade","InvalidTable","MissingAPI","NoSuchDatabase","InvalidArgument","SubTransaction","Unsupported","Internal","DatabaseClosed","PrematureCommit","ForeignAwait"].concat(R),F={VersionChanged:"Database version changed by other database connection",DatabaseClosed:"Database has been closed",Abort:"Transaction aborted",TransactionInactive:"Transaction has already completed or failed",MissingAPI:"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb"};function N(e,t){this.name=e,this.message=t}function M(e,t){return e+". Errors: "+Object.keys(t).map((e=>t[e].toString())).filter(((e,t,n)=>n.indexOf(e)===t)).join("\n")}function L(e,t,n,r){this.failures=t,this.failedKeys=r,this.successCount=n,this.message=M(e,t)}function U(e,t){this.name="BulkError",this.failures=Object.keys(t).map((e=>t[e])),this.failuresByPos=t,this.message=M(e,this.failures)}c(N).from(Error).extend({toString:function(){return this.name+": "+this.message}}),c(L).from(N),c(U).from(N);var V=$.reduce(((e,t)=>(e[t]=t+"Error",e)),{});const z=N;var W=$.reduce(((e,t)=>{var n=t+"Error";function r(e,r){this.name=n,e?"string"==typeof e?(this.message=`${e}${r?"\n "+r:""}`,this.inner=r||null):"object"==typeof e&&(this.message=`${e.name} ${e.message}`,this.inner=e):(this.message=F[t]||n,this.inner=null)}return c(r).from(z),e[t]=r,e}),{});W.Syntax=SyntaxError,W.Type=TypeError,W.Range=RangeError;var Y=R.reduce(((e,t)=>(e[t+"Error"]=W[t],e)),{});var G=$.reduce(((e,t)=>(-1===["Syntax","Type","Range"].indexOf(t)&&(e[t+"Error"]=W[t]),e)),{});function Q(){}function X(e){return e}function H(e,t){return null==e||e===X?t:function(n){return t(e(n))}}function J(e,t){return function(){e.apply(this,arguments),t.apply(this,arguments)}}function Z(e,t){return e===Q?t:function(){var n=e.apply(this,arguments);void 0!==n&&(arguments[0]=n);var r=this.onsuccess,s=this.onerror;this.onsuccess=null,this.onerror=null;var i=t.apply(this,arguments);return r&&(this.onsuccess=this.onsuccess?J(r,this.onsuccess):r),s&&(this.onerror=this.onerror?J(s,this.onerror):s),void 0!==i?i:n}}function ee(e,t){return e===Q?t:function(){e.apply(this,arguments);var n=this.onsuccess,r=this.onerror;this.onsuccess=this.onerror=null,t.apply(this,arguments),n&&(this.onsuccess=this.onsuccess?J(n,this.onsuccess):n),r&&(this.onerror=this.onerror?J(r,this.onerror):r)}}function te(e,t){return e===Q?t:function(n){var s=e.apply(this,arguments);r(n,s);var i=this.onsuccess,o=this.onerror;this.onsuccess=null,this.onerror=null;var a=t.apply(this,arguments);return i&&(this.onsuccess=this.onsuccess?J(i,this.onsuccess):i),o&&(this.onerror=this.onerror?J(o,this.onerror):o),void 0===s?void 0===a?void 0:a:r(s,a)}}function ne(e,t){return e===Q?t:function(){return!1!==t.apply(this,arguments)&&e.apply(this,arguments)}}function re(e,t){return e===Q?t:function(){var n=e.apply(this,arguments);if(n&&"function"==typeof n.then){for(var r=this,s=arguments.length,i=new Array(s);s--;)i[s]=arguments[s];return n.then((function(){return t.apply(r,i)}))}return t.apply(this,arguments)}}G.ModifyError=L,G.DexieError=N,G.BulkError=U;var se="undefined"!=typeof location&&/^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href);function ie(e,t){se=e}var oe={};const[ae,ue,le]="undefined"==typeof Promise?[]:(()=>{let e=Promise.resolve();if("undefined"==typeof crypto||!crypto.subtle)return[e,s(e),e];const t=crypto.subtle.digest("SHA-512",new Uint8Array([0]));return[t,s(t),e]})(),ce=ue&&ue.then,he=ae&&ae.constructor,de=!!le;var fe=function(e,t){_e.push([e,t]),ye&&(queueMicrotask(De),ye=!1)},pe=!0,ye=!0,me=[],be=[],ge=X,ve={id:"global",global:!0,ref:0,unhandleds:[],onunhandled:Q,pgp:!1,env:{},finalize:Q},we=ve,_e=[],xe=0,ke=[];function Oe(e){if("object"!=typeof this)throw new TypeError("Promises must be constructed via new");this._listeners=[],this._lib=!1;var t=this._PSD=we;if("function"!=typeof e){if(e!==oe)throw new TypeError("Not a function");return this._state=arguments[1],this._value=arguments[2],void(!1===this._state&&Se(this,this._value))}this._state=null,this._value=null,++t.ref,Ke(this,e)}const Pe={get:function(){var e=we,t=Le;function n(n,r){var s=!e.global&&(e!==we||t!==Le);const i=s&&!We();var o=new Oe(((t,o)=>{Ae(this,new Ee(Ze(n,e,s,i),Ze(r,e,s,i),t,o,e))}));return this._consoleTask&&(o._consoleTask=this._consoleTask),o}return n.prototype=oe,n},set:function(e){l(this,"then",e&&e.prototype===oe?Pe:{get:function(){return e},set:Pe.set})}};function Ee(e,t,n,r,s){this.onFulfilled="function"==typeof e?e:null,this.onRejected="function"==typeof t?t:null,this.resolve=n,this.reject=r,this.psd=s}function Ke(e,t){try{t((t=>{if(null===e._state){if(t===e)throw new TypeError("A promise cannot be resolved with itself.");var n=e._lib&&qe();t&&"function"==typeof t.then?Ke(e,((e,n)=>{t instanceof Oe?t._then(e,n):t.then(e,n)})):(e._state=!0,e._value=t,Ce(e)),n&&Te()}}),Se.bind(null,e))}catch(t){Se(e,t)}}function Se(e,t){if(be.push(t),null===e._state){var n=e._lib&&qe();t=ge(t),e._state=!1,e._value=t,function(e){me.some((t=>t._value===e._value))||me.push(e)}(e),Ce(e),n&&Te()}}function Ce(e){var t=e._listeners;e._listeners=[];for(var n=0,r=t.length;n{0==--xe&&Ie()}),[]))}function Ae(e,t){if(null!==e._state){var n=e._state?t.onFulfilled:t.onRejected;if(null===n)return(e._state?t.resolve:t.reject)(e._value);++t.psd.ref,++xe,fe(je,[n,e,t])}else e._listeners.push(t)}function je(e,t,n){try{var r,s=t._value;!t._state&&be.length&&(be=[]),r=se&&t._consoleTask?t._consoleTask.run((()=>e(s))):e(s),t._state||-1!==be.indexOf(s)||function(e){var t=me.length;for(;t;)if(me[--t]._value===e._value)return void me.splice(t,1)}(t),n.resolve(r)}catch(e){n.reject(e)}finally{0==--xe&&Ie(),--n.psd.ref||n.psd.finalize()}}function De(){Je(ve,(()=>{qe()&&Te()}))}function qe(){var e=pe;return pe=!1,ye=!1,e}function Te(){var e,t,n;do{for(;_e.length>0;)for(e=_e,_e=[],n=e.length,t=0;t0);pe=!0,ye=!0}function Ie(){var e=me;me=[],e.forEach((e=>{e._PSD.onunhandled.call(null,e._value,e)}));for(var t=ke.slice(0),n=t.length;n;)t[--n]()}function Be(e){return new Oe(oe,!1,e)}function Re(e,t){var n=we;return function(){var r=qe(),s=we;try{return Xe(n,!0),e.apply(this,arguments)}catch(e){t&&t(e)}finally{Xe(s,!1),r&&Te()}}}a(Oe.prototype,{then:Pe,_then:function(e,t){Ae(this,new Ee(null,null,e,t,we))},catch:function(e){if(1===arguments.length)return this.then(null,e);var t=arguments[0],n=arguments[1];return"function"==typeof t?this.then(null,(e=>e instanceof t?n(e):Be(e))):this.then(null,(e=>e&&e.name===t?n(e):Be(e)))},finally:function(e){return this.then((t=>Oe.resolve(e()).then((()=>t))),(t=>Oe.resolve(e()).then((()=>Be(t)))))},timeout:function(e,t){return e<1/0?new Oe(((n,r)=>{var s=setTimeout((()=>r(new W.Timeout(t))),e);this.then(n,r).finally(clearTimeout.bind(null,s))})):this}}),"undefined"!=typeof Symbol&&Symbol.toStringTag&&l(Oe.prototype,Symbol.toStringTag,"Dexie.Promise"),ve.env=He(),a(Oe,{all:function(){var e=I.apply(null,arguments).map(Ye);return new Oe((function(t,n){0===e.length&&t([]);var r=e.length;e.forEach(((s,i)=>Oe.resolve(s).then((n=>{e[i]=n,--r||t(e)}),n)))}))},resolve:e=>e instanceof Oe?e:e&&"function"==typeof e.then?new Oe(((t,n)=>{e.then(t,n)})):new Oe(oe,!0,e),reject:Be,race:function(){var e=I.apply(null,arguments).map(Ye);return new Oe(((t,n)=>{e.map((e=>Oe.resolve(e).then(t,n)))}))},PSD:{get:()=>we,set:e=>we=e},totalEchoes:{get:()=>Le},newPSD:Ve,usePSD:Je,scheduler:{get:()=>fe,set:e=>{fe=e}},rejectionMapper:{get:()=>ge,set:e=>{ge=e}},follow:(e,t)=>new Oe(((n,r)=>Ve(((t,n)=>{var r=we;r.unhandleds=[],r.onunhandled=n,r.finalize=J((function(){!function(e){function t(){e(),ke.splice(ke.indexOf(t),1)}ke.push(t),++xe,fe((()=>{0==--xe&&Ie()}),[])}((()=>{0===this.unhandleds.length?t():n(this.unhandleds[0])}))}),r.finalize),e()}),t,n,r)))}),he&&(he.allSettled&&l(Oe,"allSettled",(function(){const e=I.apply(null,arguments).map(Ye);return new Oe((t=>{0===e.length&&t([]);let n=e.length;const r=new Array(n);e.forEach(((e,s)=>Oe.resolve(e).then((e=>r[s]={status:"fulfilled",value:e}),(e=>r[s]={status:"rejected",reason:e})).then((()=>--n||t(r)))))}))})),he.any&&"undefined"!=typeof AggregateError&&l(Oe,"any",(function(){const e=I.apply(null,arguments).map(Ye);return new Oe(((t,n)=>{0===e.length&&n(new AggregateError([]));let r=e.length;const s=new Array(r);e.forEach(((e,i)=>Oe.resolve(e).then((e=>t(e)),(e=>{s[i]=e,--r||n(new AggregateError(s))}))))}))})));const $e={awaits:0,echoes:0,id:0};var Fe=0,Ne=[],Me=0,Le=0,Ue=0;function Ve(e,t,n,s){var i=we,o=Object.create(i);o.parent=i,o.ref=0,o.global=!1,o.id=++Ue,ve.env,o.env=de?{Promise:Oe,PromiseProp:{value:Oe,configurable:!0,writable:!0},all:Oe.all,race:Oe.race,allSettled:Oe.allSettled,any:Oe.any,resolve:Oe.resolve,reject:Oe.reject}:{},t&&r(o,t),++i.ref,o.finalize=function(){--this.parent.ref||this.parent.finalize()};var a=Je(o,e,n,s);return 0===o.ref&&o.finalize(),a}function ze(){return $e.id||($e.id=++Fe),++$e.awaits,$e.echoes+=100,$e.id}function We(){return!!$e.awaits&&(0==--$e.awaits&&($e.id=0),$e.echoes=100*$e.awaits,!0)}function Ye(e){return $e.echoes&&e&&e.constructor===he?(ze(),e.then((e=>(We(),e)),(e=>(We(),tt(e))))):e}function Ge(e){++Le,$e.echoes&&0!=--$e.echoes||($e.echoes=$e.awaits=$e.id=0),Ne.push(we),Xe(e,!0)}function Qe(){var e=Ne[Ne.length-1];Ne.pop(),Xe(e,!1)}function Xe(t,n){var r=we;if((n?!$e.echoes||Me++&&t===we:!Me||--Me&&t===we)||queueMicrotask(n?Ge.bind(null,t):Qe),t!==we&&(we=t,r===ve&&(ve.env=He()),de)){var s=ve.env.Promise,i=t.env;(r.global||t.global)&&(Object.defineProperty(e,"Promise",i.PromiseProp),s.all=i.all,s.race=i.race,s.resolve=i.resolve,s.reject=i.reject,i.allSettled&&(s.allSettled=i.allSettled),i.any&&(s.any=i.any))}}function He(){var t=e.Promise;return de?{Promise:t,PromiseProp:Object.getOwnPropertyDescriptor(e,"Promise"),all:t.all,race:t.race,allSettled:t.allSettled,any:t.any,resolve:t.resolve,reject:t.reject}:{}}function Je(e,t,n,r,s){var i=we;try{return Xe(e,!0),t(n,r,s)}finally{Xe(i,!1)}}function Ze(e,t,n,r){return"function"!=typeof e?e:function(){var s=we;n&&ze(),Xe(t,!0);try{return e.apply(this,arguments)}finally{Xe(s,!1),r&&queueMicrotask(We)}}}function et(e){Promise===he&&0===$e.echoes?0===Me?e():enqueueNativeMicroTask(e):setTimeout(e,0)}-1===(""+ce).indexOf("[native code]")&&(ze=We=Q);var tt=Oe.reject;function nt(e,t,n,r){if(e.idbdb&&(e._state.openComplete||we.letThrough||e._vip)){var s=e._createTransaction(t,n,e._dbSchema);try{s.create(),e._state.PR1398_maxLoop=3}catch(s){return s.name===V.InvalidState&&e.isOpen()&&--e._state.PR1398_maxLoop>0?(console.warn("Dexie: Need to reopen db"),e.close({disableAutoOpen:!1}),e.open().then((()=>nt(e,t,n,r)))):tt(s)}return s._promise(t,((e,t)=>Ve((()=>(we.trans=s,r(e,t,s)))))).then((e=>{if("readwrite"===t)try{s.idbtrans.commit()}catch{}return"readonly"===t?e:s._completion.then((()=>e))}))}if(e._state.openComplete)return tt(new W.DatabaseClosed(e._state.dbOpenError));if(!e._state.isBeingOpened){if(!e._state.autoOpen)return tt(new W.DatabaseClosed);e.open().catch(Q)}return e._state.dbReadyPromise.then((()=>nt(e,t,n,r)))}const rt=String.fromCharCode(65535),st="Invalid key provided. Keys must be of type string, number, Date or Array.",it=[];function ot(e,t){return e?t?function(){return e.apply(this,arguments)&&t.apply(this,arguments)}:e:t}const at={type:3,lower:-1/0,lowerOpen:!1,upper:[[]],upperOpen:!1};function ut(e){return"string"!=typeof e||/\./.test(e)?e=>e:t=>(void 0===t[e]&&e in t&&delete(t=K(t))[e],t)}function lt(){throw W.Type()}function ct(e,t){try{const n=ht(e),r=ht(t);if(n!==r)return"Array"===n?1:"Array"===r?-1:"binary"===n?1:"binary"===r?-1:"string"===n?1:"string"===r?-1:"Date"===n?1:"Date"!==r?NaN:-1;switch(n){case"number":case"Date":case"string":return e>t?1:er._promise(e,o,n)),{trans:r,transless:we.transless||we}):nt(this.db,e,[this.name],o);return i&&(t._consoleTask=i,t=t.catch((e=>(console.trace(e),tt(e))))),t}finally{a&&Te()}}get(e,t){return e&&e.constructor===Object?this.where(e).first(t):null==e?tt(new W.Type("Invalid argument to Table.get()")):this._trans("readonly",(t=>this.core.get({trans:t,key:e}).then((e=>this.hook.reading.fire(e))))).then(t)}where(e){if("string"==typeof e)return new this.db.WhereClause(this,e);if(n(e))return new this.db.WhereClause(this,`[${e.join("+")}]`);const r=t(e);if(1===r.length)return this.where(r[0]).equals(e[r[0]]);const s=this.schema.indexes.concat(this.schema.primKey).filter((e=>{if(e.compound&&r.every((t=>e.keyPath.indexOf(t)>=0))){for(let t=0;te.keyPath.length-t.keyPath.length))[0];if(s&&this.db._maxKey!==rt){const t=s.keyPath.slice(0,r.length);return this.where(t).equals(t.map((t=>e[t])))}!s&&se&&console.warn(`The query ${JSON.stringify(e)} on ${this.name} would benefit from a compound index [${r.join("+")}]`);const{idxByName:i}=this.schema,o=this.db._deps.indexedDB;function a(e,t){return 0===o.cmp(e,t)}const[u,l]=r.reduce((([t,r],s)=>{const o=i[s],u=e[s];return[t||o,t||!o?ot(r,o&&o.multi?e=>{const t=g(e,s);return n(t)&&t.some((e=>a(u,e)))}:e=>a(u,g(e,s))):r]}),[null,null]);return u?this.where(u.name).equals(e[u.keyPath]).filter(l):s?this.filter(l):this.where(r).equals("")}filter(e){return this.toCollection().and(e)}count(e){return this.toCollection().count(e)}offset(e){return this.toCollection().offset(e)}limit(e){return this.toCollection().limit(e)}each(e){return this.toCollection().each(e)}toArray(e){return this.toCollection().toArray(e)}toCollection(){return new this.db.Collection(new this.db.WhereClause(this))}orderBy(e){return new this.db.Collection(new this.db.WhereClause(this,n(e)?`[${e.join("+")}]`:e))}reverse(){return this.toCollection().reverse()}mapToClass(e){const{db:t,name:n}=this;this.schema.mappedClass=e,e.prototype instanceof lt&&(e=class extends e{get db(){return t}table(){return n}});const r=new Set;for(let t=e.prototype;t;t=s(t))Object.getOwnPropertyNames(t).forEach((e=>r.add(e)));const i=t=>{if(!t)return t;const n=Object.create(e.prototype);for(let e in t)if(!r.has(e))try{n[e]=t[e]}catch(e){}return n};return this.schema.readHook&&this.hook.reading.unsubscribe(this.schema.readHook),this.schema.readHook=i,this.hook("reading",i),e}defineClass(){return this.mapToClass((function(e){r(this,e)}))}add(e,t){const{auto:n,keyPath:r}=this.schema.primKey;let s=e;return r&&n&&(s=ut(r)(e)),this._trans("readwrite",(e=>this.core.mutate({trans:e,type:"add",keys:null!=t?[t]:null,values:[s]}))).then((e=>e.numFailures?Oe.reject(e.failures[0]):e.lastResult)).then((t=>{if(r)try{v(e,r,t)}catch(e){}return t}))}update(e,t){if("object"!=typeof e||n(e))return this.where(":id").equals(e).modify(t);{const n=g(e,this.schema.primKey.keyPath);return void 0===n?tt(new W.InvalidArgument("Given object does not contain its primary key")):this.where(":id").equals(n).modify(t)}}put(e,t){const{auto:n,keyPath:r}=this.schema.primKey;let s=e;return r&&n&&(s=ut(r)(e)),this._trans("readwrite",(e=>this.core.mutate({trans:e,type:"put",values:[s],keys:null!=t?[t]:null}))).then((e=>e.numFailures?Oe.reject(e.failures[0]):e.lastResult)).then((t=>{if(r)try{v(e,r,t)}catch(e){}return t}))}delete(e){return this._trans("readwrite",(t=>this.core.mutate({trans:t,type:"delete",keys:[e]}))).then((e=>e.numFailures?Oe.reject(e.failures[0]):void 0))}clear(){return this._trans("readwrite",(e=>this.core.mutate({trans:e,type:"deleteRange",range:at}))).then((e=>e.numFailures?Oe.reject(e.failures[0]):void 0))}bulkGet(e){return this._trans("readonly",(t=>this.core.getMany({keys:e,trans:t}).then((e=>e.map((e=>this.hook.reading.fire(e)))))))}bulkAdd(e,t,n){const r=Array.isArray(t)?t:void 0,s=(n=n||(r?void 0:t))?n.allKeys:void 0;return this._trans("readwrite",(t=>{const{auto:n,keyPath:i}=this.schema.primKey;if(i&&r)throw new W.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys");if(r&&r.length!==e.length)throw new W.InvalidArgument("Arguments objects and keys must have the same length");const o=e.length;let a=i&&n?e.map(ut(i)):e;return this.core.mutate({trans:t,type:"add",keys:r,values:a,wantResults:s}).then((({numFailures:e,results:t,lastResult:n,failures:r})=>{if(0===e)return s?t:n;throw new U(`${this.name}.bulkAdd(): ${e} of ${o} operations failed`,r)}))}))}bulkPut(e,t,n){const r=Array.isArray(t)?t:void 0,s=(n=n||(r?void 0:t))?n.allKeys:void 0;return this._trans("readwrite",(t=>{const{auto:n,keyPath:i}=this.schema.primKey;if(i&&r)throw new W.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys");if(r&&r.length!==e.length)throw new W.InvalidArgument("Arguments objects and keys must have the same length");const o=e.length;let a=i&&n?e.map(ut(i)):e;return this.core.mutate({trans:t,type:"put",keys:r,values:a,wantResults:s}).then((({numFailures:e,results:t,lastResult:n,failures:r})=>{if(0===e)return s?t:n;throw new U(`${this.name}.bulkPut(): ${e} of ${o} operations failed`,r)}))}))}bulkUpdate(e){const t=this.core,n=e.map((e=>e.key)),r=e.map((e=>e.changes)),s=[];return this._trans("readwrite",(i=>t.getMany({trans:i,keys:n,cache:"clone"}).then((o=>{const a=[],u=[];e.forEach((({key:e,changes:t},n)=>{const r=o[n];if(r){for(const n of Object.keys(t)){const s=t[n];if(n===this.schema.primKey.keyPath){if(0!==ct(s,e))throw new W.Constraint("Cannot update primary key in bulkUpdate()")}else v(r,n,s)}s.push(n),a.push(e),u.push(r)}}));const l=a.length;return t.mutate({trans:i,type:"put",keys:a,values:u,updates:{keys:n,changeSpecs:r}}).then((({numFailures:e,failures:t})=>{if(0===e)return l;for(const e of Object.keys(t)){const n=s[Number(e)];if(null!=n){const r=t[e];delete t[e],t[n]=r}}throw new U(`${this.name}.bulkUpdate(): ${e} of ${l} operations failed`,t)}))}))))}bulkDelete(e){const t=e.length;return this._trans("readwrite",(t=>this.core.mutate({trans:t,type:"delete",keys:e}))).then((({numFailures:e,lastResult:n,failures:r})=>{if(0===e)return n;throw new U(`${this.name}.bulkDelete(): ${e} of ${t} operations failed`,r)}))}}function pt(e){var r={},s=function(t,n){if(n){for(var s=arguments.length,i=new Array(s-1);--s;)i[s-1]=arguments[s];return r[t].subscribe.apply(null,i),e}if("string"==typeof t)return r[t]};s.addEventType=a;for(var i=1,o=arguments.length;iot(r(),t()):t,e.justLimit=n&&!r}function vt(e,t){if(e.isPrimKey)return t.primaryKey;const n=t.getIndexByKeyPath(e.index);if(!n)throw new W.Schema("KeyPath "+e.index+" on object store "+t.name+" is not indexed");return n}function wt(e,t,n){const r=vt(e,t.schema);return t.openCursor({trans:n,values:!e.keysOnly,reverse:"prev"===e.dir,unique:!!e.unique,query:{index:r,range:e.range}})}function _t(e,t,n,r){const s=e.replayFilter?ot(e.filter,e.replayFilter()):e.filter;if(e.or){const i={},a=(e,n,r)=>{if(!s||s(n,r,(e=>n.stop(e)),(e=>n.fail(e)))){var a=n.primaryKey,u=""+a;"[object ArrayBuffer]"===u&&(u=""+new Uint8Array(a)),o(i,u)||(i[u]=!0,t(e,n,r))}};return Promise.all([e.or._iterate(a,n),xt(wt(e,r,n),e.algorithm,a,!e.keysOnly&&e.valueMapper)])}return xt(wt(e,r,n),ot(e.algorithm,s),t,!e.keysOnly&&e.valueMapper)}function xt(e,t,n,r){var s=Re(r?(e,t,s)=>n(r(e),t,s):n);return e.then((e=>{if(e)return e.start((()=>{var n=()=>e.continue();t&&!t(e,(e=>n=e),(t=>{e.stop(t),n=Q}),(t=>{e.fail(t),n=Q}))||s(e.value,e,(e=>n=e)),n()}))}))}const kt=Symbol();class Ot{execute(e){if(void 0!==this.add){const t=this.add;if(n(t))return[...n(e)?e:[],...t].sort();if("number"==typeof t)return(Number(e)||0)+t;if("bigint"==typeof t)try{return BigInt(e)+t}catch{return BigInt(0)+t}throw new TypeError(`Invalid term ${t}`)}if(void 0!==this.remove){const t=this.remove;if(n(t))return n(e)?e.filter((e=>!t.includes(e))).sort():[];if("number"==typeof t)return Number(e)-t;if("bigint"==typeof t)try{return BigInt(e)-t}catch{return BigInt(0)-t}throw new TypeError(`Invalid subtrahend ${t}`)}const t=this.replacePrefix?.[0];return t&&"string"==typeof e&&e.startsWith(t)?this.replacePrefix[1]+e.substring(t.length):e}constructor(e){Object.assign(this,e)}}class Pt{_read(e,t){var n=this._ctx;return n.error?n.table._trans(null,tt.bind(null,n.error)):n.table._trans("readonly",e).then(t)}_write(e){var t=this._ctx;return t.error?t.table._trans(null,tt.bind(null,t.error)):t.table._trans("readwrite",e,"locked")}_addAlgorithm(e){var t=this._ctx;t.algorithm=ot(t.algorithm,e)}_iterate(e,t){return _t(this._ctx,e,t,this._ctx.table.core)}clone(e){var t=Object.create(this.constructor.prototype),n=Object.create(this._ctx);return e&&r(n,e),t._ctx=n,t}raw(){return this._ctx.valueMapper=null,this}each(e){var t=this._ctx;return this._read((n=>_t(t,e,n,t.table.core)))}count(e){return this._read((e=>{const t=this._ctx,n=t.table.core;if(mt(t,!0))return n.count({trans:e,query:{index:vt(t,n.schema),range:t.range}}).then((e=>Math.min(e,t.limit)));var r=0;return _t(t,(()=>(++r,!1)),e,n).then((()=>r))})).then(e)}sortBy(e,t){const n=e.split(".").reverse(),r=n[0],s=n.length-1;function i(e,t){return t?i(e[n[t]],t-1):e[r]}var o="next"===this._ctx.dir?1:-1;function a(e,t){var n=i(e,s),r=i(t,s);return nr?o:0}return this.toArray((function(e){return e.sort(a)})).then(t)}toArray(e){return this._read((e=>{var t=this._ctx;if("next"===t.dir&&mt(t,!0)&&t.limit>0){const{valueMapper:n}=t,r=vt(t,t.table.core.schema);return t.table.core.query({trans:e,limit:t.limit,values:!0,query:{index:r,range:t.range}}).then((({result:e})=>n?e.map(n):e))}{const n=[];return _t(t,(e=>n.push(e)),e,t.table.core).then((()=>n))}}),e)}offset(e){var t=this._ctx;return e<=0||(t.offset+=e,mt(t)?gt(t,(()=>{var t=e;return(e,n)=>0===t||(1===t?(--t,!1):(n((()=>{e.advance(t),t=0})),!1))})):gt(t,(()=>{var t=e;return()=>--t<0}))),this}limit(e){return this._ctx.limit=Math.min(this._ctx.limit,e),gt(this._ctx,(()=>{var t=e;return function(e,n,r){return--t<=0&&n(r),t>=0}}),!0),this}until(e,t){return bt(this._ctx,(function(n,r,s){return!e(n.value)||(r(s),t)})),this}first(e){return this.limit(1).toArray((function(e){return e[0]})).then(e)}last(e){return this.reverse().first(e)}filter(e){var t,n;return bt(this._ctx,(function(t){return e(t.value)})),t=this._ctx,n=e,t.isMatch=ot(t.isMatch,n),this}and(e){return this.filter(e)}or(e){return new this.db.WhereClause(this._ctx.table,e,this)}reverse(){return this._ctx.dir="prev"===this._ctx.dir?"next":"prev",this._ondirectionchange&&this._ondirectionchange(this._ctx.dir),this}desc(){return this.reverse()}eachKey(e){var t=this._ctx;return t.keysOnly=!t.isMatch,this.each((function(t,n){e(n.key,n)}))}eachUniqueKey(e){return this._ctx.unique="unique",this.eachKey(e)}eachPrimaryKey(e){var t=this._ctx;return t.keysOnly=!t.isMatch,this.each((function(t,n){e(n.primaryKey,n)}))}keys(e){var t=this._ctx;t.keysOnly=!t.isMatch;var n=[];return this.each((function(e,t){n.push(t.key)})).then((function(){return n})).then(e)}primaryKeys(e){var t=this._ctx;if("next"===t.dir&&mt(t,!0)&&t.limit>0)return this._read((e=>{var n=vt(t,t.table.core.schema);return t.table.core.query({trans:e,values:!1,limit:t.limit,query:{index:n,range:t.range}})})).then((({result:e})=>e)).then(e);t.keysOnly=!t.isMatch;var n=[];return this.each((function(e,t){n.push(t.primaryKey)})).then((function(){return n})).then(e)}uniqueKeys(e){return this._ctx.unique="unique",this.keys(e)}firstKey(e){return this.limit(1).keys((function(e){return e[0]})).then(e)}lastKey(e){return this.reverse().firstKey(e)}distinct(){var e=this._ctx,t=e.index&&e.table.schema.idxByName[e.index];if(!t||!t.multi)return this;var n={};return bt(this._ctx,(function(e){var t=e.primaryKey.toString(),r=o(n,t);return n[t]=!0,!r})),this}modify(e){var n=this._ctx;return this._write((r=>{var s;if("function"==typeof e)s=e;else{var i=t(e),o=i.length;s=function(t){let n=!1;for(let r=0;r{const{failures:r,numFailures:s}=n;d+=e-s;for(let e of t(r))h.push(r[e])};return this.clone().primaryKeys().then((t=>{const i=mt(n)&&n.limit===1/0&&("function"!=typeof e||e===Et)&&{index:n.index,range:n.range},o=n=>{const h=Math.min(c,t.length-n);return a.getMany({trans:r,keys:t.slice(n,n+h),cache:"immutable"}).then((d=>{const f=[],y=[],m=u?[]:null,b=[];for(let e=0;e0&&a.mutate({trans:r,type:"add",values:f}).then((e=>{for(let t in e.failures)b.splice(parseInt(t),1);p(f.length,e)}))).then((()=>(y.length>0||i&&"object"==typeof e)&&a.mutate({trans:r,type:"put",keys:m,values:y,criteria:i,changeSpec:"function"!=typeof e&&e,isAdditionalChunk:n>0}).then((e=>p(y.length,e))))).then((()=>(b.length>0||i&&e===Et)&&a.mutate({trans:r,type:"delete",keys:b,criteria:i,isAdditionalChunk:n>0}).then((e=>p(b.length,e))))).then((()=>t.length>n+h&&o(n+c)))}))};return o(0).then((()=>{if(h.length>0)throw new L("Error modifying one or more objects",h,d,f);return t.length}))}))}))}delete(){var e=this._ctx,t=e.range;return mt(e)&&(e.isPrimKey||3===t.type)?this._write((n=>{const{primaryKey:r}=e.table.core.schema,s=t;return e.table.core.count({trans:n,query:{index:r,range:s}}).then((t=>e.table.core.mutate({trans:n,type:"deleteRange",range:s}).then((({failures:e,lastResult:n,results:r,numFailures:s})=>{if(s)throw new L("Could not delete some values",Object.keys(e).map((t=>e[t])),t-s);return t-s}))))})):this.modify(Et)}}const Et=(e,t)=>t.value=null;function Kt(e,t){return et?-1:e===t?0:1}function Ct(e,t,n){var r=e instanceof It?new e.Collection(e):e;return r._ctx.error=n?new n(t):new TypeError(t),r}function At(e){return new e.Collection(e,(()=>Tt(""))).limit(0)}function jt(e,t,n,r,s,i){for(var o=Math.min(e.length,r.length),a=-1,u=0;u=0?e.substr(0,a)+t[a]+n.substr(a+1):null;s(e[u],l)<0&&(a=u)}return o"string"==typeof e)))return Ct(e,"String expected.");function d(e){s=function(e){return"next"===e?e=>e.toUpperCase():e=>e.toLowerCase()}(e),i=function(e){return"next"===e?e=>e.toLowerCase():e=>e.toUpperCase()}(e),o="next"===e?Kt:St;var t=n.map((function(e){return{lower:i(e),upper:s(e)}})).sort((function(e,t){return o(e.lower,t.lower)}));a=t.map((function(e){return e.upper})),u=t.map((function(e){return e.lower})),l=e,c="next"===e?"":r}d("next");var f=new e.Collection(e,(()=>qt(a[0],u[h-1]+r)));f._ondirectionchange=function(e){d(e)};var p=0;return f._addAlgorithm((function(e,n,r){var s=e.key;if("string"!=typeof s)return!1;var d=i(s);if(t(d,u,p))return!0;for(var f=null,y=p;y0)&&(f=m)}return n(null!==f?function(){e.continue(f+c)}:r),!1})),f}function qt(e,t,n,r){return{type:2,lower:e,upper:t,lowerOpen:n,upperOpen:r}}function Tt(e){return{type:1,lower:e,upper:e}}class It{get Collection(){return this._ctx.table.db.Collection}between(e,t,n,r){n=!1!==n,r=!0===r;try{return this._cmp(e,t)>0||0===this._cmp(e,t)&&(n||r)&&(!n||!r)?At(this):new this.Collection(this,(()=>qt(e,t,!n,!r)))}catch(e){return Ct(this,st)}}equals(e){return null==e?Ct(this,st):new this.Collection(this,(()=>Tt(e)))}above(e){return null==e?Ct(this,st):new this.Collection(this,(()=>qt(e,void 0,!0)))}aboveOrEqual(e){return null==e?Ct(this,st):new this.Collection(this,(()=>qt(e,void 0,!1)))}below(e){return null==e?Ct(this,st):new this.Collection(this,(()=>qt(void 0,e,!1,!0)))}belowOrEqual(e){return null==e?Ct(this,st):new this.Collection(this,(()=>qt(void 0,e)))}startsWith(e){return"string"!=typeof e?Ct(this,"String expected."):this.between(e,e+rt,!0,!0)}startsWithIgnoreCase(e){return""===e?this.startsWith(e):Dt(this,((e,t)=>0===e.indexOf(t[0])),[e],rt)}equalsIgnoreCase(e){return Dt(this,((e,t)=>e===t[0]),[e],"")}anyOfIgnoreCase(){var e=I.apply(T,arguments);return 0===e.length?At(this):Dt(this,((e,t)=>-1!==t.indexOf(e)),e,"")}startsWithAnyOfIgnoreCase(){var e=I.apply(T,arguments);return 0===e.length?At(this):Dt(this,((e,t)=>t.some((t=>0===e.indexOf(t)))),e,rt)}anyOf(){const e=I.apply(T,arguments);let t=this._cmp;try{e.sort(t)}catch(e){return Ct(this,st)}if(0===e.length)return At(this);const n=new this.Collection(this,(()=>qt(e[0],e[e.length-1])));n._ondirectionchange=n=>{t="next"===n?this._ascending:this._descending,e.sort(t)};let r=0;return n._addAlgorithm(((n,s,i)=>{const o=n.key;for(;t(o,e[r])>0;)if(++r,r===e.length)return s(i),!1;return 0===t(o,e[r])||(s((()=>{n.continue(e[r])})),!1)})),n}notEqual(e){return this.inAnyRange([[-(1/0),e],[e,this.db._maxKey]],{includeLowers:!1,includeUppers:!1})}noneOf(){const e=I.apply(T,arguments);if(0===e.length)return new this.Collection(this);try{e.sort(this._ascending)}catch(e){return Ct(this,st)}const t=e.reduce(((e,t)=>e?e.concat([[e[e.length-1][1],t]]):[[-(1/0),t]]),null);return t.push([e[e.length-1],this.db._maxKey]),this.inAnyRange(t,{includeLowers:!1,includeUppers:!1})}inAnyRange(e,t){const n=this._cmp,r=this._ascending,s=this._descending,i=this._min,o=this._max;if(0===e.length)return At(this);if(!e.every((e=>void 0!==e[0]&&void 0!==e[1]&&r(e[0],e[1])<=0)))return Ct(this,"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower",W.InvalidArgument);const a=!t||!1!==t.includeLowers,u=t&&!0===t.includeUppers;let l,c=r;function h(e,t){return c(e[0],t[0])}try{l=e.reduce((function(e,t){let r=0,s=e.length;for(;r0){s[0]=i(s[0],t[0]),s[1]=o(s[1],t[1]);break}}return r===s&&e.push(t),e}),[]),l.sort(h)}catch(e){return Ct(this,st)}let d=0;const f=u?e=>r(e,l[d][1])>0:e=>r(e,l[d][1])>=0,p=a?e=>s(e,l[d][0])>0:e=>s(e,l[d][0])>=0;let y=f;const m=new this.Collection(this,(()=>qt(l[0][0],l[l.length-1][1],!a,!u)));return m._ondirectionchange=e=>{"next"===e?(y=f,c=r):(y=p,c=s),l.sort(h)},m._addAlgorithm(((e,t,n)=>{for(var s=e.key;y(s);)if(++d,d===l.length)return t(n),!1;return!!function(e){return!f(e)&&!p(e)}(s)||(0===this._cmp(s,l[d][1])||0===this._cmp(s,l[d][0])||t((()=>{c===r?e.continue(l[d][0]):e.continue(l[d][1])})),!1)})),m}startsWithAnyOf(){const e=I.apply(T,arguments);return e.every((e=>"string"==typeof e))?0===e.length?At(this):this.inAnyRange(e.map((e=>[e,e+rt]))):Ct(this,"startsWithAnyOf() only works with strings")}}function Bt(e){return Re((function(t){return Rt(t),e(t.target.error),!1}))}function Rt(e){e.stopPropagation&&e.stopPropagation(),e.preventDefault&&e.preventDefault()}const $t=pt(null,"storagemutated");class Ft{_lock(){return m(!we.global),++this._reculock,1!==this._reculock||we.global||(we.lockOwnerFor=this),this}_unlock(){if(m(!we.global),0==--this._reculock)for(we.global||(we.lockOwnerFor=null);this._blockedFuncs.length>0&&!this._locked();){var e=this._blockedFuncs.shift();try{Je(e[1],e[0])}catch(e){}}return this}_locked(){return this._reculock&&we.lockOwnerFor!==this}create(e){if(!this.mode)return this;const t=this.db.idbdb,n=this.db._state.dbOpenError;if(m(!this.idbtrans),!e&&!t)switch(n&&n.name){case"DatabaseClosedError":throw new W.DatabaseClosed(n);case"MissingAPIError":throw new W.MissingAPI(n.message,n);default:throw new W.OpenFailed(n)}if(!this.active)throw new W.TransactionInactive;return m(null===this._completion._state),(e=this.idbtrans=e||(this.db.core?this.db.core.transaction(this.storeNames,this.mode,{durability:this.chromeTransactionDurability}):t.transaction(this.storeNames,this.mode,{durability:this.chromeTransactionDurability}))).onerror=Re((t=>{Rt(t),this._reject(e.error)})),e.onabort=Re((t=>{Rt(t),this.active&&this._reject(new W.Abort(e.error)),this.active=!1,this.on("abort").fire(t)})),e.oncomplete=Re((()=>{this.active=!1,this._resolve(),"mutatedParts"in e&&$t.storagemutated.fire(e.mutatedParts)})),this}_promise(e,t,n){if("readwrite"===e&&"readwrite"!==this.mode)return tt(new W.ReadOnly("Transaction is readonly"));if(!this.active)return tt(new W.TransactionInactive);if(this._locked())return new Oe(((r,s)=>{this._blockedFuncs.push([()=>{this._promise(e,t,n).then(r,s)},we])}));if(n)return Ve((()=>{var e=new Oe(((e,n)=>{this._lock();const r=t(e,n,this);r&&r.then&&r.then(e,n)}));return e.finally((()=>this._unlock())),e._lib=!0,e}));var r=new Oe(((e,n)=>{var r=t(e,n,this);r&&r.then&&r.then(e,n)}));return r._lib=!0,r}_root(){return this.parent?this.parent._root():this}waitFor(e){var t=this._root();const n=Oe.resolve(e);if(t._waitingFor)t._waitingFor=t._waitingFor.then((()=>n));else{t._waitingFor=n,t._waitingQueue=[];var r=t.idbtrans.objectStore(t.storeNames[0]);!function e(){for(++t._spinCount;t._waitingQueue.length;)t._waitingQueue.shift()();t._waitingFor&&(r.get(-1/0).onsuccess=e)}()}var s=t._waitingFor;return new Oe(((e,r)=>{n.then((n=>t._waitingQueue.push(Re(e.bind(null,n)))),(e=>t._waitingQueue.push(Re(r.bind(null,e))))).finally((()=>{t._waitingFor===s&&(t._waitingFor=null)}))}))}abort(){this.active&&(this.active=!1,this.idbtrans&&this.idbtrans.abort(),this._reject(new W.Abort))}table(e){const t=this._memoizedTables||(this._memoizedTables={});if(o(t,e))return t[e];const n=this.schema[e];if(!n)throw new W.NotFound("Table "+e+" not part of transaction");const r=new this.db.Table(e,n,this);return r.core=this.db.core.table(e),t[e]=r,r}}function Nt(e,t,n,r,s,i,o){return{name:e,keyPath:t,unique:n,multi:r,auto:s,compound:i,src:(n&&!o?"&":"")+(r?"*":"")+(s?"++":"")+Mt(t)}}function Mt(e){return"string"==typeof e?e:e?"["+[].join.call(e,"+")+"]":""}function Lt(e,t,n){return{name:e,primKey:t,indexes:n,mappedClass:null,idxByName:(r=n,s=e=>[e.name,e],r.reduce(((e,t,n)=>{var r=s(t,n);return r&&(e[r[0]]=r[1]),e}),{}))};var r,s}let Ut=e=>{try{return e.only([[]]),Ut=()=>[[]],[[]]}catch(e){return Ut=()=>rt,rt}};function Vt(e){return null==e?()=>{}:"string"==typeof e?function(e){return 1===e.split(".").length?t=>t[e]:t=>g(t,e)}(e):t=>g(t,e)}function zt(e){return[].slice.call(e)}let Wt=0;function Yt(e){return null==e?":id":"string"==typeof e?e:`[${e.join("+")}]`}function Gt(e,t,r){function s(e){if(3===e.type)return null;if(4===e.type)throw new Error("Cannot convert never type to IDBKeyRange");const{lower:n,upper:r,lowerOpen:s,upperOpen:i}=e;return void 0===n?void 0===r?null:t.upperBound(r,!!i):void 0===r?t.lowerBound(n,!!s):t.bound(n,r,!!s,!!i)}const{schema:i,hasGetAll:o}=function(e,t){const r=zt(e.objectStoreNames);return{schema:{name:e.name,tables:r.map((e=>t.objectStore(e))).map((e=>{const{keyPath:t,autoIncrement:r}=e,s=n(t),i=null==t,o={},a={name:e.name,primaryKey:{name:null,isPrimaryKey:!0,outbound:i,compound:s,keyPath:t,autoIncrement:r,unique:!0,extractKey:Vt(t)},indexes:zt(e.indexNames).map((t=>e.index(t))).map((e=>{const{name:t,unique:r,multiEntry:s,keyPath:i}=e,a={name:t,compound:n(i),keyPath:i,unique:r,multiEntry:s,extractKey:Vt(i)};return o[Yt(i)]=a,a})),getIndexByKeyPath:e=>o[Yt(e)]};return o[":id"]=a.primaryKey,null!=t&&(o[Yt(t)]=a.primaryKey),a}))},hasGetAll:r.length>0&&"getAll"in t.objectStore(r[0])&&!("undefined"!=typeof navigator&&/Safari/.test(navigator.userAgent)&&!/(Chrome\/|Edge\/)/.test(navigator.userAgent)&&[].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1]<604)}}(e,r),a=i.tables.map((e=>function(e){const t=e.name;return{name:t,schema:e,mutate:function({trans:e,type:n,keys:r,values:i,range:o}){return new Promise(((a,u)=>{a=Re(a);const l=e.objectStore(t),c=null==l.keyPath,h="put"===n||"add"===n;if(!h&&"delete"!==n&&"deleteRange"!==n)throw new Error("Invalid operation type: "+n);const{length:d}=r||i||{length:1};if(r&&i&&r.length!==i.length)throw new Error("Given keys array must have same length as given values array.");if(0===d)return a({numFailures:0,failures:{},results:[],lastResult:void 0});let f;const p=[],y=[];let m=0;const b=e=>{++m,Rt(e)};if("deleteRange"===n){if(4===o.type)return a({numFailures:m,failures:y,results:[],lastResult:void 0});3===o.type?p.push(f=l.clear()):p.push(f=l.delete(s(o)))}else{const[e,t]=h?c?[i,r]:[i,null]:[r,null];if(h)for(let r=0;r{const t=e.target.result;p.forEach(((e,t)=>null!=e.error&&(y[t]=e.error))),a({numFailures:m,failures:y,results:"delete"===n?r:p.map((e=>e.result)),lastResult:t})};f.onerror=e=>{b(e),g(e)},f.onsuccess=g}))},getMany:({trans:e,keys:n})=>new Promise(((r,s)=>{r=Re(r);const i=e.objectStore(t),o=n.length,a=new Array(o);let u,l=0,c=0;const h=e=>{const t=e.target;a[t._pos]=t.result,++c===l&&r(a)},d=Bt(s);for(let e=0;enew Promise(((r,s)=>{r=Re(r);const i=e.objectStore(t).get(n);i.onsuccess=e=>r(e.target.result),i.onerror=Bt(s)})),query:function(e){return n=>new Promise(((r,i)=>{r=Re(r);const{trans:o,values:a,limit:u,query:l}=n,c=u===1/0?void 0:u,{index:h,range:d}=l,f=o.objectStore(t),p=h.isPrimaryKey?f:f.index(h.name),y=s(d);if(0===u)return r({result:[]});if(e){const e=a?p.getAll(y,c):p.getAllKeys(y,c);e.onsuccess=e=>r({result:e.target.result}),e.onerror=Bt(i)}else{let e=0;const t=a||!("openKeyCursor"in p)?p.openCursor(y):p.openKeyCursor(y),n=[];t.onsuccess=s=>{const i=t.result;return i?(n.push(a?i.value:i.primaryKey),++e===u?r({result:n}):void i.continue()):r({result:n})},t.onerror=Bt(i)}}))}(o),openCursor:function({trans:e,values:n,query:r,reverse:i,unique:o}){return new Promise(((a,u)=>{a=Re(a);const{index:l,range:c}=r,h=e.objectStore(t),d=l.isPrimaryKey?h:h.index(l.name),f=i?o?"prevunique":"prev":o?"nextunique":"next",p=n||!("openKeyCursor"in d)?d.openCursor(s(c),f):d.openKeyCursor(s(c),f);p.onerror=Bt(u),p.onsuccess=Re((t=>{const n=p.result;if(!n)return void a(null);n.___id=++Wt,n.done=!1;const r=n.continue.bind(n);let s=n.continuePrimaryKey;s&&(s=s.bind(n));const i=n.advance.bind(n),o=()=>{throw new Error("Cursor not stopped")};n.trans=e,n.stop=n.continue=n.continuePrimaryKey=n.advance=()=>{throw new Error("Cursor not started")},n.fail=Re(u),n.next=function(){let e=1;return this.start((()=>e--?this.continue():this.stop())).then((()=>this))},n.start=e=>{const t=new Promise(((e,t)=>{e=Re(e),p.onerror=Bt(t),n.fail=t,n.stop=t=>{n.stop=n.continue=n.continuePrimaryKey=n.advance=o,e(t)}})),a=()=>{if(p.result)try{e()}catch(e){n.fail(e)}else n.done=!0,n.start=()=>{throw new Error("Cursor behind last entry")},n.stop()};return p.onsuccess=Re((e=>{p.onsuccess=a,a()})),n.continue=r,n.continuePrimaryKey=s,n.advance=i,a(),t},a(n)}),u)}))},count({query:e,trans:n}){const{index:r,range:i}=e;return new Promise(((e,o)=>{const a=n.objectStore(t),u=r.isPrimaryKey?a:a.index(r.name),l=s(i),c=l?u.count(l):u.count();c.onsuccess=Re((t=>e(t.target.result))),c.onerror=Bt(o)}))}}}(e))),u={};return a.forEach((e=>u[e.name]=e)),{stack:"dbcore",transaction:e.transaction.bind(e),table(e){if(!u[e])throw new Error(`Table '${e}' not found`);return u[e]},MIN_KEY:-1/0,MAX_KEY:Ut(t),schema:i}}function Qt(e,t){const n=t.db,r=function(e,t,{IDBKeyRange:n,indexedDB:r},s){const i=function(e,t){return t.reduce(((e,{create:t})=>({...e,...t(e)})),e)}(Gt(t,n,s),e.dbcore);return{dbcore:i}}(e._middlewares,n,e._deps,t);e.core=r.dbcore,e.tables.forEach((t=>{const n=t.name;e.core.schema.tables.some((e=>e.name===n))&&(t.core=e.core.table(n),e[n]instanceof e.Table&&(e[n].core=t.core))}))}function Xt(e,t,n,r){n.forEach((n=>{const s=r[n];t.forEach((t=>{const r=d(t,n);(!r||"value"in r&&void 0===r.value)&&(t===e.Transaction.prototype||t instanceof e.Transaction?l(t,n,{get(){return this.table(n)},set(e){u(this,n,{value:e,writable:!0,configurable:!0,enumerable:!0})}}):t[n]=new e.Table(n,s))}))}))}function Ht(e,t){t.forEach((t=>{for(let n in t)t[n]instanceof e.Table&&delete t[n]}))}function Jt(e,t){return e._cfg.version-t._cfg.version}function Zt(e,n,r,s){const i=e._dbSchema;r.objectStoreNames.contains("$meta")&&!i.$meta&&(i.$meta=Lt("$meta",an("")[0],[]),e._storeNames.push("$meta"));const o=e._createTransaction("readwrite",e._storeNames,i);o.create(r),o._completion.catch(s);const a=o._reject.bind(o),u=we.transless||we;Ve((()=>{if(we.trans=o,we.transless=u,0!==n)return Qt(e,r),function(e,t,n){return t.storeNames.includes("$meta")?t.table("$meta").get("version").then((e=>null!=e?e:n)):Oe.resolve(n)}(0,o,n).then((n=>function(e,n,r,s){const i=[],o=e._versions;let a=e._dbSchema=sn(e,e.idbdb,s);const u=o.filter((e=>e._cfg.version>=n));if(0===u.length)return Oe.resolve();function l(){return i.length?Oe.resolve(i.shift()(r.idbtrans)).then(l):Oe.resolve()}return u.forEach((o=>{i.push((()=>{const i=a,u=o._cfg.dbschema;on(e,i,s),on(e,u,s),a=e._dbSchema=u;const l=en(i,u);l.add.forEach((e=>{tn(s,e[0],e[1].primKey,e[1].indexes)})),l.change.forEach((e=>{if(e.recreate)throw new W.Upgrade("Not yet support for changing primary key");{const t=s.objectStore(e.name);e.add.forEach((e=>rn(t,e))),e.change.forEach((e=>{t.deleteIndex(e.name),rn(t,e)})),e.del.forEach((e=>t.deleteIndex(e)))}}));const c=o._cfg.contentUpgrade;if(c&&o._cfg.version>n){Qt(e,s),r._memoizedTables={};let n=w(u);l.del.forEach((e=>{n[e]=i[e]})),Ht(e,[e.Transaction.prototype]),Xt(e,[e.Transaction.prototype],t(n),n),r.schema=n;const o=B(c);let a;o&&ze();const h=Oe.follow((()=>{if(a=c(r),a&&o){var e=We.bind(null,null);a.then(e,e)}}));return a&&"function"==typeof a.then?Oe.resolve(a):h.then((()=>a))}})),i.push((t=>{!function(e,t){[].slice.call(t.db.objectStoreNames).forEach((n=>null==e[n]&&t.db.deleteObjectStore(n)))}(o._cfg.dbschema,t),Ht(e,[e.Transaction.prototype]),Xt(e,[e.Transaction.prototype],e._storeNames,e._dbSchema),r.schema=e._dbSchema})),i.push((t=>{e.idbdb.objectStoreNames.contains("$meta")&&(Math.ceil(e.idbdb.version/10)===o._cfg.version?(e.idbdb.deleteObjectStore("$meta"),delete e._dbSchema.$meta,e._storeNames=e._storeNames.filter((e=>"$meta"!==e))):t.objectStore("$meta").put(o._cfg.version,"version"))}))})),l().then((()=>{nn(a,s)}))}(e,n,o,r))).catch(a);t(i).forEach((e=>{tn(r,e,i[e].primKey,i[e].indexes)})),Qt(e,r),Oe.follow((()=>e.on.populate.fire(o))).catch(a)}))}function en(e,t){const n={del:[],add:[],change:[]};let r;for(r in e)t[r]||n.del.push(r);for(r in t){const s=e[r],i=t[r];if(s){const e={name:r,def:i,recreate:!1,del:[],add:[],change:[]};if(""+(s.primKey.keyPath||"")!=""+(i.primKey.keyPath||"")||s.primKey.auto!==i.primKey.auto)e.recreate=!0,n.change.push(e);else{const t=s.idxByName,r=i.idxByName;let o;for(o in t)r[o]||e.del.push(o);for(o in r){const n=t[o],s=r[o];n?n.src!==s.src&&e.change.push(s):e.add.push(s)}(e.del.length>0||e.add.length>0||e.change.length>0)&&n.change.push(e)}}else n.add.push([r,i])}return n}function tn(e,t,n,r){const s=e.db.createObjectStore(t,n.keyPath?{keyPath:n.keyPath,autoIncrement:n.auto}:{autoIncrement:n.auto});return r.forEach((e=>rn(s,e))),s}function nn(e,n){t(e).forEach((t=>{n.db.objectStoreNames.contains(t)||(se&&console.debug("Dexie: Creating missing table",t),tn(n,t,e[t].primKey,e[t].indexes))}))}function rn(e,t){e.createIndex(t.name,t.keyPath,{unique:t.unique,multiEntry:t.multi})}function sn(e,t,n){const r={};return p(t.objectStoreNames,0).forEach((e=>{const t=n.objectStore(e);let s=t.keyPath;const i=Nt(Mt(s),s||"",!0,!1,!!t.autoIncrement,s&&"string"!=typeof s,!0),o=[];for(let e=0;e{const r=(e=e.trim()).replace(/([&*]|\+\+)/g,""),s=/^\[/.test(r)?r.match(/^\[(.*)\]$/)[1].split("+"):r;return Nt(r,s||null,/\&/.test(e),/\*/.test(e),/\+\+/.test(e),n(s),0===t)}))}class un{_parseStoresSpec(e,n){t(e).forEach((t=>{if(null!==e[t]){var r=an(e[t]),s=r.shift();if(s.unique=!0,s.multi)throw new W.Schema("Primary key cannot be multi-valued");r.forEach((e=>{if(e.auto)throw new W.Schema("Only primary key can be marked as autoIncrement (++)");if(!e.keyPath)throw new W.Schema("Index must have a name and cannot be an empty string")})),n[t]=Lt(t,s,r)}}))}stores(e){const n=this.db;this._cfg.storesSource=this._cfg.storesSource?r(this._cfg.storesSource,e):e;const s=n._versions,i={};let o={};return s.forEach((e=>{r(i,e._cfg.storesSource),o=e._cfg.dbschema={},e._parseStoresSpec(i,o)})),n._dbSchema=o,Ht(n,[n._allTables,n,n.Transaction.prototype]),Xt(n,[n._allTables,n,n.Transaction.prototype,this._cfg.tables],t(o),o),n._storeNames=t(o),this}upgrade(e){return this._cfg.contentUpgrade=re(this._cfg.contentUpgrade||Q,e),this}}function ln(e,t){let n=e._dbNamesDB;return n||(n=e._dbNamesDB=new Hn("__dbnames",{addons:[],indexedDB:e,IDBKeyRange:t}),n.version(1).stores({dbnames:"name"})),n.table("dbnames")}function cn(e){return e&&"function"==typeof e.databases}function hn(e){return Ve((function(){return we.letThrough=!0,e()}))}function dn(){var e;return!navigator.userAgentData&&/Safari\//.test(navigator.userAgent)&&!/Chrom(e|ium)\//.test(navigator.userAgent)&&indexedDB.databases?new Promise((function(t){var n=function(){return indexedDB.databases().finally(t)};e=setInterval(n,100),n()})).finally((function(){return clearInterval(e)})):Promise.resolve()}function fn(e){return!("from"in e)}const pn=function(e,t){if(!this){const t=new pn;return e&&"d"in e&&r(t,e),t}r(this,arguments.length?{d:1,from:e,to:arguments.length>1?t:e}:{d:0})};function yn(e,t,n){const s=ct(t,n);if(isNaN(s))return;if(s>0)throw RangeError();if(fn(e))return r(e,{from:t,to:n,d:1});const i=e.l,o=e.r;if(ct(n,e.from)<0)return i?yn(i,t,n):e.l={from:t,to:n,d:1,l:null,r:null},vn(e);if(ct(t,e.to)>0)return o?yn(o,t,n):e.r={from:t,to:n,d:1,l:null,r:null},vn(e);ct(t,e.from)<0&&(e.from=t,e.l=null,e.d=o?o.d+1:1),ct(n,e.to)>0&&(e.to=n,e.r=null,e.d=e.l?e.l.d+1:1);const a=!e.r;i&&!e.l&&mn(e,i),o&&a&&mn(e,o)}function mn(e,t){fn(t)||function e(t,{from:n,to:r,l:s,r:i}){yn(t,n,r),s&&e(t,s),i&&e(t,i)}(e,t)}function bn(e,t){const n=gn(t);let r=n.next();if(r.done)return!1;let s=r.value;const i=gn(e);let o=i.next(s.from),a=o.value;for(;!r.done&&!o.done;){if(ct(a.from,s.to)<=0&&ct(a.to,s.from)>=0)return!0;ct(s.from,a.from)<0?s=(r=n.next(a.from)).value:a=(o=i.next(s.from)).value}return!1}function gn(e){let t=fn(e)?null:{s:0,n:e};return{next(e){const n=arguments.length>0;for(;t;)switch(t.s){case 0:if(t.s=1,n)for(;t.n.l&&ct(e,t.n.from)<0;)t={up:t,n:t.n.l,s:1};else for(;t.n.l;)t={up:t,n:t.n.l,s:1};case 1:if(t.s=2,!n||ct(e,t.n.to)<=0)return{value:t.n,done:!1};case 2:if(t.n.r){t.s=3,t={up:t,n:t.n.r,s:0};continue}case 3:t=t.up}return{done:!0}}}}function vn(e){const t=(e.r?.d||0)-(e.l?.d||0),n=t>1?"r":t<-1?"l":"";if(n){const t="r"===n?"l":"r",r={...e},s=e[n];e.from=s.from,e.to=s.to,e[n]=s[n],r[n]=s[t],e[t]=r,r.d=wn(r)}e.d=wn(e)}function wn({r:e,l:t}){return(e?t?Math.max(e.d,t.d):e.d:t?t.d:0)+1}function _n(e,n){return t(n).forEach((t=>{e[t]?mn(e[t],n[t]):e[t]=P(n[t])})),e}function xn(e,t){return e.all||t.all||Object.keys(e).some((n=>t[n]&&bn(t[n],e[n])))}a(pn.prototype,{add(e){return mn(this,e),this},addKey(e){return yn(this,e,e),this},addKeys(e){return e.forEach((e=>yn(this,e,e))),this},[j](){return gn(this)}});const kn={};let On={},Pn=!1;function En(e,t=!1){_n(On,e),Pn||(Pn=!0,setTimeout((()=>{Pn=!1;const e=On;On={},Kn(e,!1)}),0))}function Kn(e,t=!1){const n=new Set;if(e.all)for(const r of Object.values(kn))Sn(r,e,n,t);else for(const r in e){const s=/^idb\:\/\/(.*)\/(.*)\//.exec(r);if(s){const[,r,i]=s,o=kn[`idb://${r}/${i}`];o&&Sn(o,e,n,t)}}n.forEach((e=>e()))}function Sn(e,t,n,r){const s=[];for(const[i,o]of Object.entries(e.queries.query)){const e=[];for(const s of o)xn(t,s.obsSet)?s.subscribers.forEach((e=>n.add(e))):r&&e.push(s);r&&s.push([i,e])}if(r)for(const[t,n]of s)e.queries.query[t]=n}function Cn(e){const n=e._state,{indexedDB:r}=e._deps;if(n.isBeingOpened||e.idbdb)return n.dbReadyPromise.then((()=>n.dbOpenError?tt(n.dbOpenError):e));n.isBeingOpened=!0,n.dbOpenError=null,n.openComplete=!1;const s=n.openCanceller;let i=Math.round(10*e.verno),o=!1;function a(){if(n.openCanceller!==s)throw new W.DatabaseClosed("db.open() was cancelled")}let u=n.dbReadyResolve,l=null,c=!1;const h=()=>new Oe(((s,u)=>{if(a(),!r)throw new W.MissingAPI;const d=e.name,f=n.autoSchema||!i?r.open(d):r.open(d,i);if(!f)throw new W.MissingAPI;f.onerror=Bt(u),f.onblocked=Re(e._fireOnBlocked),f.onupgradeneeded=Re((t=>{if(l=f.transaction,n.autoSchema&&!e._options.allowEmptyDB){f.onerror=Rt,l.abort(),f.result.close();const e=r.deleteDatabase(d);e.onsuccess=e.onerror=Re((()=>{u(new W.NoSuchDatabase(`Database ${d} doesnt exist`))}))}else{l.onerror=Bt(u);const n=t.oldVersion>Math.pow(2,62)?0:t.oldVersion;c=n<1,e.idbdb=f.result,o&&function(e,t){nn(e._dbSchema,t),t.db.version%10!=0||t.objectStoreNames.contains("$meta")||t.db.createObjectStore("$meta").add(Math.ceil(t.db.version/10-1),"version");const n=sn(0,e.idbdb,t);on(e,e._dbSchema,t);const r=en(n,e._dbSchema);for(const e of r.change){if(e.change.length||e.recreate)return void console.warn(`Unable to patch indexes of table ${e.name} because it has changes on the type of index or primary key.`);const n=t.objectStore(e.name);e.add.forEach((t=>{se&&console.debug(`Dexie upgrade patch: Creating missing index ${e.name}.${t.src}`),rn(n,t)}))}}(e,l),Zt(e,n/10,l,u)}}),u),f.onsuccess=Re((()=>{l=null;const r=e.idbdb=f.result,a=p(r.objectStoreNames);if(a.length>0)try{const l=r.transaction(1===(u=a).length?u[0]:u,"readonly");if(n.autoSchema)!function(e,n,r){e.verno=n.version/10;const s=e._dbSchema=sn(0,n,r);e._storeNames=p(n.objectStoreNames,0),Xt(e,[e._allTables],t(s),s)}(e,r,l);else if(on(e,e._dbSchema,l),!function(e,t){const n=en(sn(0,e.idbdb,t),e._dbSchema);return!(n.add.length||n.change.some((e=>e.add.length||e.change.length)))}(e,l)&&!o)return console.warn("Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this."),r.close(),i=r.version+1,o=!0,s(h());Qt(e,l)}catch(e){}var u;it.push(e),r.onversionchange=Re((t=>{n.vcFired=!0,e.on("versionchange").fire(t)})),r.onclose=Re((t=>{e.on("close").fire(t)})),c&&function({indexedDB:e,IDBKeyRange:t},n){!cn(e)&&"__dbnames"!==n&&ln(e,t).put({name:n}).catch(Q)}(e._deps,d),s()}),u)})).catch((e=>{switch(e?.name){case"UnknownError":if(n.PR1398_maxLoop>0)return n.PR1398_maxLoop--,console.warn("Dexie: Workaround for Chrome UnknownError on open()"),h();break;case"VersionError":if(i>0)return i=0,h()}return Oe.reject(e)}));return Oe.race([s,("undefined"==typeof navigator?Oe.resolve():dn()).then(h)]).then((()=>(a(),n.onReadyBeingFired=[],Oe.resolve(hn((()=>e.on.ready.fire(e.vip)))).then((function t(){if(n.onReadyBeingFired.length>0){let r=n.onReadyBeingFired.reduce(re,Q);return n.onReadyBeingFired=[],Oe.resolve(hn((()=>r(e.vip)))).then(t)}}))))).finally((()=>{n.openCanceller===s&&(n.onReadyBeingFired=null,n.isBeingOpened=!1)})).catch((t=>{n.dbOpenError=t;try{l&&l.abort()}catch{}return s===n.openCanceller&&e._close(),tt(t)})).finally((()=>{n.openComplete=!0,u()})).then((()=>{if(c){const t={};e.tables.forEach((n=>{n.schema.indexes.forEach((r=>{r.name&&(t[`idb://${e.name}/${n.name}/${r.name}`]=new pn(-1/0,[[[]]]))})),t[`idb://${e.name}/${n.name}/`]=t[`idb://${e.name}/${n.name}/:dels`]=new pn(-1/0,[[[]]])})),$t("storagemutated").fire(t),Kn(t,!0)}return e}))}function An(e){var t=t=>e.next(t),r=i(t),s=i((t=>e.throw(t)));function i(e){return t=>{var i=e(t),o=i.value;return i.done?o:o&&"function"==typeof o.then?o.then(r,s):n(o)?Promise.all(o).then(r,s):r(o)}}return i(t)()}function jn(e,t,n){var r=arguments.length;if(r<2)throw new W.InvalidArgument("Too few arguments");for(var s=new Array(r-1);--r;)s[r-1]=arguments[r];n=s.pop();var i=x(s);return[e,i,n]}function Dn(e,t,n,r,s){return Oe.resolve().then((()=>{const i=we.transless||we,o=e._createTransaction(t,n,e._dbSchema,r);o.explicit=!0;const a={trans:o,transless:i};if(r)o.idbtrans=r.idbtrans;else try{o.create(),o.idbtrans._explicit=!0,e._state.PR1398_maxLoop=3}catch(r){return r.name===V.InvalidState&&e.isOpen()&&--e._state.PR1398_maxLoop>0?(console.warn("Dexie: Need to reopen db"),e.close({disableAutoOpen:!1}),e.open().then((()=>Dn(e,t,n,null,s)))):tt(r)}const u=B(s);let l;u&&ze();const c=Oe.follow((()=>{if(l=s.call(o,o),l)if(u){var e=We.bind(null,null);l.then(e,e)}else"function"==typeof l.next&&"function"==typeof l.throw&&(l=An(l))}),a);return(l&&"function"==typeof l.then?Oe.resolve(l).then((e=>o.active?e:tt(new W.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn")))):c.then((()=>l))).then((e=>(r&&o._resolve(),o._completion.then((()=>e))))).catch((e=>(o._reject(e),tt(e))))}))}function qn(e,t,r){const s=n(e)?e.slice():[e];for(let e=0;e0,c={...n,name:l?`${r}(virtual-from:${n.name})`:n.name,lowLevelIndex:n,isVirtual:l,keyTail:t,keyLength:u,extractKey:Vt(e),unique:!l&&n.unique};if(a.push(c),c.isPrimaryKey||i.push(c),u>1){o(2===u?e[0]:e.slice(0,u-1),t+1,n)}return a.sort(((e,t)=>e.keyTail-t.keyTail)),c}const a=o(r.primaryKey.keyPath,0,r.primaryKey);s[":id"]=[a];for(const e of r.indexes)o(e.keyPath,0,e);function u(t){const n=t.query.index;return n.isVirtual?{...t,query:{index:n.lowLevelIndex,range:(r=t.query.range,s=n.keyTail,{type:1===r.type?2:r.type,lower:qn(r.lower,r.lowerOpen?e.MAX_KEY:e.MIN_KEY,s),lowerOpen:!0,upper:qn(r.upper,r.upperOpen?e.MIN_KEY:e.MAX_KEY,s),upperOpen:!0})}}:t;var r,s}const l={...n,schema:{...r,primaryKey:a,indexes:i,getIndexByKeyPath:function(e){const t=s[Yt(e)];return t&&t[0]}},count:e=>n.count(u(e)),query:e=>n.query(u(e)),openCursor(t){const{keyTail:r,isVirtual:s,keyLength:i}=t.query.index;if(!s)return n.openCursor(t);return n.openCursor(u(t)).then((n=>n&&function(n){const s=Object.create(n,{continue:{value:function(s){null!=s?n.continue(qn(s,t.reverse?e.MAX_KEY:e.MIN_KEY,r)):t.unique?n.continue(n.key.slice(0,i).concat(t.reverse?e.MIN_KEY:e.MAX_KEY,r)):n.continue()}},continuePrimaryKey:{value(t,s){n.continuePrimaryKey(qn(t,e.MAX_KEY,r),s)}},primaryKey:{get:()=>n.primaryKey},key:{get(){const e=n.key;return 1===i?e[0]:e.slice(0,i)}},value:{get:()=>n.value}});return s}(n)))}};return l}}}};function In(e,n,r,s){return r=r||{},s=s||"",t(e).forEach((t=>{if(o(n,t)){var i=e[t],a=n[t];if("object"==typeof i&&"object"==typeof a&&i&&a){const e=A(i);e!==A(a)?r[s+t]=n[t]:"Object"===e?In(i,a,r,s+t+"."):i!==a&&(r[s+t]=n[t])}else i!==a&&(r[s+t]=n[t])}else r[s+t]=void 0})),t(n).forEach((t=>{o(e,t)||(r[s+t]=n[t])})),r}function Bn(e,t){return"delete"===t.type?t.keys:t.keys||t.values.map(e.extractKey)}const Rn={stack:"dbcore",name:"HooksMiddleware",level:2,create:e=>({...e,table(t){const n=e.table(t),{primaryKey:r}=n.schema,s={...n,mutate(e){const s=we.trans,{deleting:i,creating:a,updating:u}=s.table(t).hook;switch(e.type){case"add":if(a.fire===Q)break;return s._promise("readwrite",(()=>l(e)),!0);case"put":if(a.fire===Q&&u.fire===Q)break;return s._promise("readwrite",(()=>l(e)),!0);case"delete":if(i.fire===Q)break;return s._promise("readwrite",(()=>l(e)),!0);case"deleteRange":if(i.fire===Q)break;return s._promise("readwrite",(()=>function(e){return c(e.trans,e.range,1e4)}(e)),!0)}return n.mutate(e);function l(e){const t=we.trans,s=e.keys||Bn(r,e);if(!s)throw new Error("Keys missing");return"delete"!==(e="add"===e.type||"put"===e.type?{...e,keys:s}:{...e}).type&&(e.values=[...e.values]),e.keys&&(e.keys=[...e.keys]),function(e,t,n){return"add"===t.type?Promise.resolve([]):e.getMany({trans:t.trans,keys:n,cache:"immutable"})}(n,e,s).then((l=>{const c=s.map(((n,s)=>{const c=l[s],h={onerror:null,onsuccess:null};if("delete"===e.type)i.fire.call(h,n,c,t);else if("add"===e.type||void 0===c){const i=a.fire.call(h,n,e.values[s],t);null==n&&null!=i&&(n=i,e.keys[s]=n,r.outbound||v(e.values[s],r.keyPath,n))}else{const r=In(c,e.values[s]),i=u.fire.call(h,r,n,c,t);if(i){const t=e.values[s];Object.keys(i).forEach((e=>{o(t,e)?t[e]=i[e]:v(t,e,i[e])}))}}return h}));return n.mutate(e).then((({failures:t,results:n,numFailures:r,lastResult:i})=>{for(let r=0;r(c.forEach((t=>t.onerror&&t.onerror(e))),Promise.reject(e))))}))}function c(e,t,s){return n.query({trans:e,values:!1,query:{index:r,range:t},limit:s}).then((({result:n})=>l({type:"delete",keys:n,trans:e}).then((r=>r.numFailures>0?Promise.reject(r.failures[0]):n.length({table:t=>{const n=e.table(t);return{...n,getMany:e=>{if(!e.cache)return n.getMany(e);const t=$n(e.keys,e.trans._cache,"clone"===e.cache);return t?Oe.resolve(t):n.getMany(e).then((t=>(e.trans._cache={keys:e.keys,values:"clone"===e.cache?K(t):t},t)))},mutate:e=>("add"!==e.type&&(e.trans._cache=null),n.mutate(e))}}})};function Nn(e,t){return"readonly"===e.trans.mode&&!!e.subscr&&!e.trans.explicit&&"disabled"!==e.trans.db._options.cache&&!t.schema.primaryKey.outbound}function Mn(e,t){switch(e){case"query":return t.values&&!t.unique;case"get":case"getMany":case"count":case"openCursor":return!1}}const Ln={stack:"dbcore",level:0,name:"Observability",create:e=>{const r=e.schema.name,s=new pn(e.MIN_KEY,e.MAX_KEY);return{...e,transaction:(t,n,r)=>{if(we.subscr&&"readonly"!==n)throw new W.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${we.querier}`);return e.transaction(t,n,r)},table:i=>{const o=e.table(i),{schema:a}=o,{primaryKey:u,indexes:l}=a,{extractKey:c,outbound:h}=u,d=u.autoIncrement&&l.filter((e=>e.compound&&e.keyPath.includes(u.keyPath))),f={...o,mutate:e=>{const t=e.trans,l=e.mutatedParts||(e.mutatedParts={}),c=e=>{const t=`idb://${r}/${i}/${e}`;return l[t]||(l[t]=new pn)},h=c(""),f=c(":dels"),{type:p}=e;let[y,m]="deleteRange"===e.type?[e.range]:"delete"===e.type?[e.keys]:e.values.length<50?[Bn(u,e).filter((e=>e)),e.values]:[];const b=e.trans._cache;if(n(y)){h.addKeys(y);const e="delete"===p||y.length===m.length?$n(y,b):null;e||f.addKeys(y),(e||m)&&function(e,t,r,s){function i(t){const i=e(t.name||"");function o(e){return null!=e?t.extractKey(e):null}const a=e=>t.multiEntry&&n(e)?e.forEach((e=>i.addKey(e))):i.addKey(e);(r||s).forEach(((e,t)=>{const n=r&&o(r[t]),i=s&&o(s[t]);0!==ct(n,i)&&(null!=n&&a(n),null!=i&&a(i))}))}t.indexes.forEach(i)}(c,a,e,m)}else if(y){const e={from:y.lower,to:y.upper};f.add(e),h.add(e)}else h.add(s),f.add(s),a.indexes.forEach((e=>c(e.name).add(s)));return o.mutate(e).then((n=>(!y||"add"!==e.type&&"put"!==e.type||(h.addKeys(n.results),d&&d.forEach((t=>{const r=e.values.map((e=>t.extractKey(e))),s=t.keyPath.findIndex((e=>e===u.keyPath));n.results.forEach((e=>r[s]=e)),c(t.name).addKeys(r)}))),t.mutatedParts=_n(t.mutatedParts||{},l),n)))}},p=({query:{index:t,range:n}})=>[t,new pn(n.lower??e.MIN_KEY,n.upper??e.MAX_KEY)],y={get:e=>[u,new pn(e.key)],getMany:e=>[u,(new pn).addKeys(e.keys)],count:p,query:p,openCursor:p};return t(y).forEach((e=>{f[e]=function(t){const{subscr:n}=we,a=!!n;let u=Nn(we,o)&&Mn(e,t);const l=u?t.obsSet={}:n;if(a){const n=e=>{const t=`idb://${r}/${i}/${e}`;return l[t]||(l[t]=new pn)},a=n(""),u=n(":dels"),[d,f]=y[e](t);if("query"===e&&d.isPrimaryKey&&!t.values?u.add(f):n(d.name||"").add(f),!d.isPrimaryKey){if("count"!==e){const n="query"===e&&h&&t.values&&o.query({...t,values:!1});return o[e].apply(this,arguments).then((r=>{if("query"===e){if(h&&t.values)return n.then((({result:e})=>(a.addKeys(e),r)));const e=t.values?r.result.map(c):r.result;t.values?a.addKeys(e):u.addKeys(e)}else if("openCursor"===e){const e=r,n=t.values;return e&&Object.create(e,{key:{get:()=>(u.addKey(e.primaryKey),e.key)},primaryKey:{get(){const t=e.primaryKey;return u.addKey(t),t}},value:{get:()=>(n&&a.addKey(e.primaryKey),e.value)}})}return r}))}u.add(s)}}return o[e].apply(this,arguments)}})),f}}}};function Un(e,t,r){if(0===r.numFailures)return t;if("deleteRange"===t.type)return null;const s=t.keys?t.keys.length:"values"in t&&t.values?t.values.length:1;if(r.numFailures===s)return null;const i={...t};return n(i.keys)&&(i.keys=i.keys.filter(((e,t)=>!(t in r.failures)))),"values"in i&&n(i.values)&&(i.values=i.values.filter(((e,t)=>!(t in r.failures)))),i}function Vn(e,t){return function(e,t){return void 0===t.lower||(t.lowerOpen?ct(e,t.lower)>0:ct(e,t.lower)>=0)}(e,t)&&function(e,t){return void 0===t.upper||(t.upperOpen?ct(e,t.upper)<0:ct(e,t.upper)<=0)}(e,t)}function zn(e,t,r,s,i,o){if(!r||0===r.length)return e;const a=t.query.index,{multiEntry:u}=a,l=t.query.range,c=s.schema.primaryKey.extractKey,h=a.extractKey,d=(a.lowLevelIndex||a).extractKey;let f=r.reduce(((e,r)=>{let s=e;const i="add"===r.type||"put"===r.type?r.values.filter((e=>{const t=h(e);return u&&n(t)?t.some((e=>Vn(e,l))):Vn(t,l)})).map((e=>(e=K(e),o&&Object.freeze(e),e))):[];switch(r.type){case"add":s=e.concat(t.values?i:i.map((e=>c(e))));break;case"put":const n=(new pn).addKeys(r.values.map((e=>c(e))));s=e.filter((e=>{const r=t.values?c(e):e;return!bn(new pn(r),n)})).concat(t.values?i:i.map((e=>c(e))));break;case"delete":const o=(new pn).addKeys(r.keys);s=e.filter((e=>{const n=t.values?c(e):e;return!bn(new pn(n),o)}));break;case"deleteRange":const a=r.range;s=e.filter((e=>!Vn(c(e),a)))}return s}),e);return f===e?e:(f.sort(((e,t)=>ct(d(e),d(t))||ct(c(e),c(t)))),t.limit&&t.limit<1/0&&(f.length>t.limit?f.length=t.limit:e.length===t.limit&&f.length=0}function Gn(e,t,n,r){e.subscribers.add(n),r.addEventListener("abort",(()=>{e.subscribers.delete(n),0===e.subscribers.size&&function(e,t){setTimeout((()=>{0===e.subscribers.size&&q(t,e)}),3e3)}(e,t)}))}const Qn={stack:"dbcore",level:0,name:"Cache",create:e=>{const t=e.schema.name,n={...e,transaction:(n,r,s)=>{const i=e.transaction(n,r,s);if("readwrite"===r){const s=new AbortController,{signal:o}=s,a=o=>()=>{if(s.abort(),"readwrite"===r){const r=new Set;for(const s of n){const n=kn[`idb://${t}/${s}`];if(n){const t=e.table(s),a=n.optimisticOps.filter((e=>e.trans===i));if(i._explicit&&o&&i.mutatedParts)for(const e of Object.values(n.queries.query))for(const t of e.slice())xn(t.obsSet,i.mutatedParts)&&(q(e,t),t.subscribers.forEach((e=>r.add(e))));else if(a.length>0){n.optimisticOps=n.optimisticOps.filter((e=>e.trans!==i));for(const e of Object.values(n.queries.query))for(const n of e.slice())if(null!=n.res&&i.mutatedParts)if(o&&!n.dirty){const s=Object.isFrozen(n.res),i=zn(n.res,n.req,a,t,n,s);n.dirty?(q(e,n),n.subscribers.forEach((e=>r.add(e)))):i!==n.res&&(n.res=i,n.promise=Oe.resolve({result:i}))}else n.dirty&&q(e,n),n.subscribers.forEach((e=>r.add(e)))}}}r.forEach((e=>e()))}};i.addEventListener("abort",a(!1),{signal:o}),i.addEventListener("error",a(!1),{signal:o}),i.addEventListener("complete",a(!0),{signal:o})}return i},table(n){const r=e.table(n),s=r.schema.primaryKey,i={...r,mutate(e){const i=we.trans;if(s.outbound||"disabled"===i.db._options.cache||i.explicit)return r.mutate(e);const o=kn[`idb://${t}/${n}`];if(!o)return r.mutate(e);const a=r.mutate(e);return"add"!==e.type&&"put"!==e.type||!(e.values.length>=50||Bn(s,e).some((e=>null==e)))?(o.optimisticOps.push(e),e.mutatedParts&&En(e.mutatedParts),a.then((t=>{if(t.numFailures>0){q(o.optimisticOps,e);const n=Un(0,e,t);n&&o.optimisticOps.push(n),e.mutatedParts&&En(e.mutatedParts)}})),a.catch((()=>{q(o.optimisticOps,e),e.mutatedParts&&En(e.mutatedParts)}))):a.then((t=>{const n=Un(0,{...e,values:e.values.map(((e,n)=>{const r=s.keyPath?.includes(".")?K(e):{...e};return v(r,s.keyPath,t.results[n]),r}))},t);o.optimisticOps.push(n),queueMicrotask((()=>e.mutatedParts&&En(e.mutatedParts)))})),a},query(e){if(!Nn(we,r)||!Mn("query",e))return r.query(e);const s="immutable"===we.trans?.db._options.cache,{requery:i,signal:o}=we;let[a,u,l,c]=function(e,t,n,r){const s=kn[`idb://${e}/${t}`];if(!s)return[];const i=s.queries[n];if(!i)return[null,!1,s,null];const o=i[(r.query?r.query.index.name:null)||""];if(!o)return[null,!1,s,null];switch(n){case"query":const e=o.find((e=>e.req.limit===r.limit&&e.req.values===r.values&&Wn(e.req.query.range,r.query.range)));return e?[e,!0,s,o]:[o.find((e=>("limit"in e.req?e.req.limit:1/0)>=r.limit&&(!r.values||e.req.values)&&Yn(e.req.query.range,r.query.range))),!1,s,o];case"count":const t=o.find((e=>Wn(e.req.query.range,r.query.range)));return[t,!!t,s,o]}}(t,n,"query",e);if(a&&u)a.obsSet=e.obsSet;else{const i=r.query(e).then((e=>{const t=e.result;if(a&&(a.res=t),s){for(let e=0,n=t.length;e(c&&a&&q(c,a),Promise.reject(e))));a={obsSet:e.obsSet,promise:i,subscribers:new Set,type:"query",req:e,dirty:!1},c?c.push(a):(c=[a],l||(l=kn[`idb://${t}/${n}`]={queries:{query:{},count:{}},objs:new Map,optimisticOps:[],unsignaledParts:{}}),l.queries.query[e.query.index.name||""]=c)}return Gn(a,c,i,o),a.promise.then((t=>({result:zn(t.result,e,l?.optimisticOps,r,a,s)})))}};return i}};return n}};function Xn(e,t){return new Proxy(e,{get:(e,n,r)=>"db"===n?t:Reflect.get(e,n,r)})}class Hn{constructor(e,t){this._middlewares={},this.verno=0;const n=Hn.dependencies;this._options=t={addons:Hn.addons,autoOpen:!0,indexedDB:n.indexedDB,IDBKeyRange:n.IDBKeyRange,cache:"cloned",...t},this._deps={indexedDB:t.indexedDB,IDBKeyRange:t.IDBKeyRange};const{addons:r}=t;this._dbSchema={},this._versions=[],this._storeNames=[],this._allTables={},this.idbdb=null,this._novip=this;const s={dbOpenError:null,isBeingOpened:!1,onReadyBeingFired:null,openComplete:!1,dbReadyResolve:Q,dbReadyPromise:null,cancelOpen:Q,openCanceller:null,autoSchema:!0,PR1398_maxLoop:3,autoOpen:t.autoOpen};var i;s.dbReadyPromise=new Oe((e=>{s.dbReadyResolve=e})),s.openCanceller=new Oe(((e,t)=>{s.cancelOpen=t})),this._state=s,this.name=e,this.on=pt(this,"populate","blocked","versionchange","close",{ready:[re,Q]}),this.on.ready.subscribe=y(this.on.ready.subscribe,(e=>(t,n)=>{Hn.vip((()=>{const r=this._state;if(r.openComplete)r.dbOpenError||Oe.resolve().then(t),n&&e(t);else if(r.onReadyBeingFired)r.onReadyBeingFired.push(t),n&&e(t);else{e(t);const r=this;n||e((function e(){r.on.ready.unsubscribe(t),r.on.ready.unsubscribe(e)}))}}))})),this.Collection=(i=this,yt(Pt.prototype,(function(e,t){this.db=i;let n=at,r=null;if(t)try{n=t()}catch(e){r=e}const s=e._ctx,o=s.table,a=o.hook.reading.fire;this._ctx={table:o,index:s.index,isPrimKey:!s.index||o.schema.primKey.keyPath&&s.index===o.schema.primKey.name,range:n,keysOnly:!1,dir:"next",unique:"",algorithm:null,filter:null,replayFilter:null,justLimit:!0,isMatch:null,offset:0,limit:1/0,error:r,or:s.or,valueMapper:a!==X?a:null}}))),this.Table=function(e){return yt(ft.prototype,(function(t,n,r){this.db=e,this._tx=r,this.name=t,this.schema=n,this.hook=e._allTables[t]?e._allTables[t].hook:pt(null,{creating:[Z,Q],reading:[H,X],updating:[te,Q],deleting:[ee,Q]})}))}(this),this.Transaction=function(e){return yt(Ft.prototype,(function(t,n,r,s,i){this.db=e,this.mode=t,this.storeNames=n,this.schema=r,this.chromeTransactionDurability=s,this.idbtrans=null,this.on=pt(this,"complete","error","abort"),this.parent=i||null,this.active=!0,this._reculock=0,this._blockedFuncs=[],this._resolve=null,this._reject=null,this._waitingFor=null,this._waitingQueue=null,this._spinCount=0,this._completion=new Oe(((e,t)=>{this._resolve=e,this._reject=t})),this._completion.then((()=>{this.active=!1,this.on.complete.fire()}),(e=>{var t=this.active;return this.active=!1,this.on.error.fire(e),this.parent?this.parent._reject(e):t&&this.idbtrans&&this.idbtrans.abort(),tt(e)}))}))}(this),this.Version=function(e){return yt(un.prototype,(function(t){this.db=e,this._cfg={version:t,storesSource:null,dbschema:{},tables:{},contentUpgrade:null}}))}(this),this.WhereClause=function(e){return yt(It.prototype,(function(t,n,r){if(this.db=e,this._ctx={table:t,index:":id"===n?null:n,or:r},this._cmp=this._ascending=ct,this._descending=(e,t)=>ct(t,e),this._max=(e,t)=>ct(e,t)>0?e:t,this._min=(e,t)=>ct(e,t)<0?e:t,this._IDBKeyRange=e._deps.IDBKeyRange,!this._IDBKeyRange)throw new W.MissingAPI}))}(this),this.on("versionchange",(e=>{e.newVersion>0?console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`):console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`),this.close({disableAutoOpen:!1})})),this.on("blocked",(e=>{!e.newVersion||e.newVersionnew this.Transaction(e,t,n,this._options.chromeTransactionDurability,r),this._fireOnBlocked=e=>{this.on("blocked").fire(e),it.filter((e=>e.name===this.name&&e!==this&&!e._state.vcFired)).map((t=>t.on("versionchange").fire(e)))},this.use(Fn),this.use(Qn),this.use(Ln),this.use(Tn),this.use(Rn);const o=new Proxy(this,{get:(e,t,n)=>{if("_vip"===t)return!0;if("table"===t)return e=>Xn(this.table(e),o);const r=Reflect.get(e,t,n);return r instanceof ft?Xn(r,o):"tables"===t?r.map((e=>Xn(e,o))):"_createTransaction"===t?function(){const e=r.apply(this,arguments);return Xn(e,o)}:r}});this.vip=o,r.forEach((e=>e(this)))}version(e){if(isNaN(e)||e<.1)throw new W.Type("Given version is not a positive number");if(e=Math.round(10*e)/10,this.idbdb||this._state.isBeingOpened)throw new W.Schema("Cannot add version when database is open");this.verno=Math.max(this.verno,e);const t=this._versions;var n=t.filter((t=>t._cfg.version===e))[0];return n||(n=new this.Version(e),t.push(n),t.sort(Jt),n.stores({}),this._state.autoSchema=!1,n)}_whenReady(e){return this.idbdb&&(this._state.openComplete||we.letThrough||this._vip)?e():new Oe(((e,t)=>{if(this._state.openComplete)return t(new W.DatabaseClosed(this._state.dbOpenError));if(!this._state.isBeingOpened){if(!this._state.autoOpen)return void t(new W.DatabaseClosed);this.open().catch(Q)}this._state.dbReadyPromise.then(e,t)})).then(e)}use({stack:e,create:t,level:n,name:r}){r&&this.unuse({stack:e,name:r});const s=this._middlewares[e]||(this._middlewares[e]=[]);return s.push({stack:e,create:t,level:null==n?10:n,name:r}),s.sort(((e,t)=>e.level-t.level)),this}unuse({stack:e,name:t,create:n}){return e&&this._middlewares[e]&&(this._middlewares[e]=this._middlewares[e].filter((e=>n?e.create!==n:!!t&&e.name!==t))),this}open(){return Je(ve,(()=>Cn(this)))}_close(){const e=this._state,t=it.indexOf(this);if(t>=0&&it.splice(t,1),this.idbdb){try{this.idbdb.close()}catch(e){}this.idbdb=null}e.isBeingOpened||(e.dbReadyPromise=new Oe((t=>{e.dbReadyResolve=t})),e.openCanceller=new Oe(((t,n)=>{e.cancelOpen=n})))}close({disableAutoOpen:e}={disableAutoOpen:!0}){const t=this._state;e?(t.isBeingOpened&&t.cancelOpen(new W.DatabaseClosed),this._close(),t.autoOpen=!1,t.dbOpenError=new W.DatabaseClosed):(this._close(),t.autoOpen=this._options.autoOpen||t.isBeingOpened,t.openComplete=!1,t.dbOpenError=null)}delete(e={disableAutoOpen:!0}){const t=arguments.length>0&&"object"!=typeof arguments[0],n=this._state;return new Oe(((r,s)=>{const i=()=>{this.close(e);var t=this._deps.indexedDB.deleteDatabase(this.name);t.onsuccess=Re((()=>{!function({indexedDB:e,IDBKeyRange:t},n){!cn(e)&&"__dbnames"!==n&&ln(e,t).delete(n).catch(Q)}(this._deps,this.name),r()})),t.onerror=Bt(s),t.onblocked=this._fireOnBlocked};if(t)throw new W.InvalidArgument("Invalid closeOptions argument to db.delete()");n.isBeingOpened?n.dbReadyPromise.then(i):i()}))}backendDB(){return this.idbdb}isOpen(){return null!==this.idbdb}hasBeenClosed(){const e=this._state.dbOpenError;return e&&"DatabaseClosed"===e.name}hasFailed(){return null!==this._state.dbOpenError}dynamicallyOpened(){return this._state.autoSchema}get tables(){return t(this._allTables).map((e=>this._allTables[e]))}transaction(){const e=jn.apply(this,arguments);return this._transaction.apply(this,e)}_transaction(e,t,n){let r=we.trans;r&&r.db===this&&-1===e.indexOf("!")||(r=null);const s=-1!==e.indexOf("?");let i,o;e=e.replace("!","").replace("?","");try{if(o=t.map((e=>{var t=e instanceof this.Table?e.name:e;if("string"!=typeof t)throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed");return t})),"r"==e||"readonly"===e)i="readonly";else{if("rw"!=e&&"readwrite"!=e)throw new W.InvalidArgument("Invalid transaction mode: "+e);i="readwrite"}if(r){if("readonly"===r.mode&&"readwrite"===i){if(!s)throw new W.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY");r=null}r&&o.forEach((e=>{if(r&&-1===r.storeNames.indexOf(e)){if(!s)throw new W.SubTransaction("Table "+e+" not included in parent transaction.");r=null}})),s&&r&&!r.active&&(r=null)}}catch(e){return r?r._promise(null,((t,n)=>{n(e)})):tt(e)}const a=Dn.bind(null,this,i,o,r,n);return r?r._promise(i,a,"lock"):we.trans?Je(we.transless,(()=>this._whenReady(a))):this._whenReady(a)}table(e){if(!o(this._allTables,e))throw new W.InvalidTable(`Table ${e} does not exist`);return this._allTables[e]}}const Jn="undefined"!=typeof Symbol&&"observable"in Symbol?Symbol.observable:"@@observable";class Zn{constructor(e){this._subscribe=e}subscribe(e,t,n){return this._subscribe(e&&"function"!=typeof e?e:{next:e,error:t,complete:n})}[Jn](){return this}}let er;try{er={indexedDB:e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB,IDBKeyRange:e.IDBKeyRange||e.webkitIDBKeyRange}}catch(e){er={indexedDB:null,IDBKeyRange:null}}function tr(e){let t,n=!1;const r=new Zn((r=>{const s=B(e);let i,a=!1,u={},l={};const c={get closed(){return a},unsubscribe:()=>{a||(a=!0,i&&i.abort(),h&&$t.storagemutated.unsubscribe(f))}};r.start&&r.start(c);let h=!1;const d=()=>et(p);const f=e=>{_n(u,e),xn(l,u)&&d()},p=()=>{if(a||!er.indexedDB)return;u={};const c={};i&&i.abort(),i=new AbortController;const p={subscr:c,signal:i.signal,requery:d,querier:e,trans:null},y=function(t){const n=qe();try{s&&ze();let r=Ve(e,t);return s&&(r=r.finally(We)),r}finally{n&&Te()}}(p);Promise.resolve(y).then((e=>{n=!0,t=e,a||p.signal.aborted||(u={},l=c,function(e){for(const t in e)if(o(e,t))return!1;return!0}(l)||h||($t("storagemutated",f),h=!0),et((()=>!a&&r.next&&r.next(e))))}),(e=>{n=!1,["DatabaseClosedError","AbortError"].includes(e?.name)||a||et((()=>{a||r.error&&r.error(e)}))}))};return setTimeout(d,0),c}));return r.hasValue=()=>n,r.getValue=()=>t,r}const nr=Hn;function rr(e){let t=ir;try{ir=!0,$t.storagemutated.fire(e),Kn(e,!0)}finally{ir=t}}a(nr,{...G,delete:e=>new nr(e,{addons:[]}).delete(),exists:e=>new nr(e,{addons:[]}).open().then((e=>(e.close(),!0))).catch("NoSuchDatabaseError",(()=>!1)),getDatabaseNames(e){try{return function({indexedDB:e,IDBKeyRange:t}){return cn(e)?Promise.resolve(e.databases()).then((e=>e.map((e=>e.name)).filter((e=>"__dbnames"!==e)))):ln(e,t).toCollection().primaryKeys()}(nr.dependencies).then(e)}catch{return tt(new W.MissingAPI)}},defineClass:()=>function(e){r(this,e)},ignoreTransaction:e=>we.trans?Je(we.transless,e):e(),vip:hn,async:function(e){return function(){try{var t=An(e.apply(this,arguments));return t&&"function"==typeof t.then?t:Oe.resolve(t)}catch(e){return tt(e)}}},spawn:function(e,t,n){try{var r=An(e.apply(n,t||[]));return r&&"function"==typeof r.then?r:Oe.resolve(r)}catch(e){return tt(e)}},currentTransaction:{get:()=>we.trans||null},waitFor:function(e,t){const n=Oe.resolve("function"==typeof e?nr.ignoreTransaction(e):e).timeout(t||6e4);return we.trans?we.trans.waitFor(n):n},Promise:Oe,debug:{get:()=>se,set:e=>{ie(e)}},derive:c,extend:r,props:a,override:y,Events:pt,on:$t,liveQuery:tr,extendObservabilitySet:_n,getByKeyPath:g,setByKeyPath:v,delByKeyPath:function(e,t){"string"==typeof t?v(e,t,void 0):"length"in t&&[].map.call(t,(function(t){v(e,t,void 0)}))},shallowClone:w,deepClone:K,getObjectDiff:In,cmp:ct,asap:b,minKey:-(1/0),addons:[],connections:it,errnames:V,dependencies:er,cache:kn,semVer:"4.0.7",version:"4.0.7".split(".").map((e=>parseInt(e))).reduce(((e,t,n)=>e+t/Math.pow(10,2*n)))}),nr.maxKey=Ut(nr.dependencies.IDBKeyRange),"undefined"!=typeof dispatchEvent&&"undefined"!=typeof addEventListener&&($t("storagemutated",(e=>{if(!ir){let t;t=new CustomEvent("x-storagemutated-1",{detail:e}),ir=!0,dispatchEvent(t),ir=!1}})),addEventListener("x-storagemutated-1",(({detail:e})=>{ir||rr(e)})));let sr,ir=!1,or=()=>{};function ar(e){return new Ot({add:e})}function ur(e){return new Ot({remove:e})}function lr(e,t){return new Ot({replacePrefix:[e,t]})}"undefined"!=typeof BroadcastChannel&&(or=()=>{sr=new BroadcastChannel("x-storagemutated-1"),sr.onmessage=e=>e.data&&rr(e.data)},or(),"function"==typeof sr.unref&&sr.unref(),$t("storagemutated",(e=>{ir||sr.postMessage(e)}))),"undefined"!=typeof addEventListener&&(addEventListener("pagehide",(e=>{if(!Hn.disableBfCache&&e.persisted){se&&console.debug("Dexie: handling persisted pagehide"),sr?.close();for(const e of it)e.close({disableAutoOpen:!1})}})),addEventListener("pageshow",(e=>{!Hn.disableBfCache&&e.persisted&&(se&&console.debug("Dexie: handling persisted pageshow"),or(),rr({all:new pn(-1/0,[[]])}))}))),Oe.rejectionMapper=function(e,t){if(!e||e instanceof N||e instanceof TypeError||e instanceof SyntaxError||!e.name||!Y[e.name])return e;var n=new Y[e.name](t||e.message,e);return"stack"in e&&l(n,"stack",{get:function(){return this.inner.stack}}),n},ie(se);export{Hn as Dexie,lt as Entity,kt as PropModSymbol,Ot as PropModification,pn as RangeSet,ar as add,ct as cmp,Hn as default,tr as liveQuery,mn as mergeRanges,bn as rangesOverlap,ur as remove,lr as replacePrefix}; +//# sourceMappingURL=dexie.min.mjs.map \ No newline at end of file diff --git a/src/dexie/dist/modern/dexie.min.mjs.map b/src/dexie/dist/modern/dexie.min.mjs.map new file mode 100644 index 000000000..04601b62e --- /dev/null +++ b/src/dexie/dist/modern/dexie.min.mjs.map @@ -0,0 +1 @@ +{"version":3,"sources":["dexie.mjs"],"names":["_global","globalThis","self","window","global","keys","Object","isArray","Array","extend","obj","extension","forEach","key","Promise","getProto","getPrototypeOf","_hasOwn","hasOwnProperty","hasOwn","prop","call","props","proto","Reflect","ownKeys","setProp","defineProperty","functionOrGetSet","options","get","set","configurable","value","writable","derive","Child","from","Parent","prototype","create","bind","getOwnPropertyDescriptor","getPropertyDescriptor","_slice","slice","args","start","end","override","origFunc","overridedFactory","assert","b","Error","asap$1","fn","setImmediate","setTimeout","getByKeyPath","keyPath","rv","i","l","length","val","push","period","indexOf","innerObj","substr","undefined","setByKeyPath","isFrozen","currentKeyPath","remainingKeyPath","isNaN","parseInt","splice","shallowClone","m","concat","flatten","a","apply","intrinsicTypeNames","split","map","num","t","filter","intrinsicTypes","Set","cloneSimpleObjectTree","o","k","v","has","constructor","circularRefs","deepClone","any","WeakMap","innerDeepClone","x","toString","toStringTag","iteratorSymbol","Symbol","iterator","getIteratorOf","delArrayItem","NO_CHAR_ARRAY","getArrayOf","arrayLike","it","arguments","this","next","done","isAsyncFunction","idbDomErrorNames","errorList","defaultTexts","VersionChanged","DatabaseClosed","Abort","TransactionInactive","MissingAPI","DexieError","name","msg","message","getMultiErrorMessage","failures","s","join","ModifyError","successCount","failedKeys","BulkError","pos","failuresByPos","errnames","reduce","BaseException","exceptions","fullName","msgOrInner","inner","Syntax","SyntaxError","Type","TypeError","Range","RangeError","exceptionMap","fullNameExceptions","nop","mirror","pureFunctionChain","f1","f2","callBoth","on1","on2","hookCreatingChain","res","onsuccess","onerror","res2","hookDeletingChain","hookUpdatingChain","modifications","reverseStoppableEventChain","promisableChain","then","thiz","debug","location","test","href","setDebug","INTERNAL","resolvedNativePromise","nativePromiseProto","resolvedGlobalPromise","globalP","resolve","crypto","subtle","nativeP","digest","Uint8Array","nativePromiseThen","NativePromise","patchGlobalPromise","asap","callback","microtickQueue","needsNewPhysicalTick","queueMicrotask","physicalTick","isOutsideMicroTick","unhandledErrors","rejectingErrors","rejectionMapper","globalPSD","id","ref","unhandleds","onunhandled","pgp","env","finalize","PSD","numScheduledCalls","tickFinalizers","DexiePromise","_listeners","_lib","psd","_PSD","_state","_value","handleRejection","executePromiseTask","thenProp","microTaskId","totalEchoes","onFulfilled","onRejected","possibleAwait","cleanup","decrementExpectedAwaits","reject","propagateToListener","Listener","nativeAwaitCompatibleWrap","_consoleTask","zone","promise","shouldExecuteTick","beginMicroTickScope","_then","propagateAllListeners","endMicroTickScope","ex","reason","some","p","addPossiblyUnhandledError","listeners","len","finalizePhysicalTick","listener","cb","callListener","ret","run","markErrorAsHandled","e","usePSD","wasRootExec","callbacks","item","unhandledErrs","finalizers","PromiseReject","wrap","errorCatcher","outerScope","switchToZone","catch","type","handler","err","finally","onFinally","timeout","ms","Infinity","handle","Timeout","clearTimeout","snapShot","all","values","onPossibleParallellAsync","remaining","race","newPSD","newScope","scheduler","follow","zoneProps","finalizer","run_at_end_of_this_or_next_physical_tick","allSettled","possiblePromises","results","status","AggregateError","failure","task","awaits","echoes","taskCounter","zoneStack","zoneEchoes","zone_id_counter","a1","a2","parent","PromiseProp","incrementExpectedAwaits","possiblePromise","rejection","zoneEnterEcho","targetZone","zoneLeaveEcho","pop","bEnteringZone","currentZone","GlobalPromise","targetEnv","a3","outerZone","execInGlobalContext","enqueueNativeMicroTask","tempTransaction","db","mode","storeNames","idbdb","openComplete","letThrough","_vip","trans","_createTransaction","_dbSchema","PR1398_maxLoop","InvalidState","isOpen","console","warn","close","disableAutoOpen","open","_promise","result","idbtrans","commit","_completion","dbOpenError","isBeingOpened","autoOpen","dbReadyPromise","maxString","String","fromCharCode","INVALID_KEY_ARGUMENT","connections","combine","filter1","filter2","AnyRange","lower","lowerOpen","upper","upperOpen","workaroundForUndefinedPrimKey","Entity","cmp","ta","tb","NaN","al","bl","compareUint8Arrays","getUint8Array","compareArrays","ArrayBuffer","isView","tsTag","buffer","byteOffset","byteLength","Table","_trans","writeLocked","_tx","tableName","createTask","checkTableInTransaction","schema","NotFound","_novip","transless","trace","keyOrCrit","where","first","core","hook","reading","fire","indexOrCrit","WhereClause","keyPaths","equals","compoundIndex","indexes","primKey","ix","compound","every","sort","_maxKey","keyPathsInValidOrder","kp","JSON","stringify","idxByName","idb","_deps","indexedDB","idx","filterFunction","prevIndex","prevFilterFn","index","multi","toCollection","and","count","thenShortcut","offset","limit","numRows","each","toArray","Collection","orderBy","reverse","mapToClass","mappedClass","table","inheritedProps","getOwnPropertyNames","propName","add","readHook","_","unsubscribe","defineClass","content","auto","objToAdd","mutate","numFailures","lastResult","update","keyOrObject","modify","InvalidArgument","put","delete","clear","range","bulkGet","getMany","bulkAdd","objects","keysOrOptions","wantResults","allKeys","numObjects","objectsToAdd","bulkPut","objectsToPut","bulkUpdate","keysAndChanges","coreTable","entry","changeSpecs","changes","offsetMap","cache","objs","resultKeys","resultObjs","Constraint","numEntries","updates","mappedOffset","Number","bulkDelete","numKeys","Events","ctx","evs","eventName","subscriber","subscribe","addEventType","chainFunction","defaultFunction","addConfiguredEvents","context","subscribers","cfg","makeClassConstructor","isPlainKeyRange","ignoreLimitFilter","algorithm","or","justLimit","replayFilter","addFilter","addReplayFilter","factory","isLimitFilter","curr","getIndexOrStore","coreSchema","isPrimKey","primaryKey","getIndexByKeyPath","Schema","openCursor","keysOnly","dir","unique","query","iter","coreTrans","union","cursor","advance","stop","fail","_iterate","iterate","valueMapper","cursorPromise","wrappedFn","c","continue","advancer","PropModSymbol","PropModification","execute","term","BigInt","remove","subtrahend","includes","prefixToReplace","replacePrefix","startsWith","substring","spec","assign","_read","_ctx","error","_write","_addAlgorithm","clone","raw","Math","min","sortBy","parts","lastPart","lastIndex","getval","order","sorter","aVal","bVal","offsetLeft","rowsLeft","until","bIncludeStopEntry","last","isMatch","indexName","_ondirectionchange","desc","eachKey","eachUniqueKey","eachPrimaryKey","primaryKeys","uniqueKeys","firstKey","lastKey","distinct","strKey","found","modifyer","anythingModified","origVal","outbound","extractKey","_options","modifyChunkSize","totalFailures","applyMutateResult","expectedCount","criteria","deleteCallback","nextChunk","addValues","putValues","putKeys","deleteKeys","origValue","changeSpec","isAdditionalChunk","coreRange","simpleCompare","simpleCompareReverse","collectionOrWhereClause","T","collection","emptyCollection","whereClause","rangeEqual","nextCasing","lowerKey","upperNeedle","lowerNeedle","llp","lwrKeyChar","addIgnoreCaseAlgorithm","match","needles","suffix","compare","upperNeedles","lowerNeedles","direction","nextKeySuffix","needlesLen","initDirection","toUpperCase","toLowerCase","upperFactory","lowerFactory","needleBounds","needle","nb","createRange","firstPossibleNeedle","lowestPossibleCasing","casing","between","includeLower","includeUpper","_cmp","above","aboveOrEqual","below","belowOrEqual","str","startsWithIgnoreCase","equalsIgnoreCase","anyOfIgnoreCase","startsWithAnyOfIgnoreCase","n","anyOf","_ascending","_descending","notEqual","inAnyRange","includeLowers","includeUppers","noneOf","ranges","ascending","descending","_min","max","_max","sortDirection","rangeSorter","newRange","rangePos","keyIsBeyondCurrentEntry","keyIsBeforeCurrentEntry","checkKey","keyWithinCurrentRange","startsWithAnyOf","eventRejectHandler","event","preventDefault","target","stopPropagation","globalEvents","Transaction","_lock","_reculock","lockOwnerFor","_unlock","_blockedFuncs","_locked","fnAndPSD","shift","OpenFailed","active","transaction","durability","chromeTransactionDurability","ev","_reject","onabort","on","oncomplete","_resolve","storagemutated","bWriteLock","ReadOnly","_root","waitFor","promiseLike","root","_waitingFor","_waitingQueue","store","objectStore","spin","_spinCount","currentWaitPromise","abort","memoizedTables","_memoizedTables","tableSchema","transactionBoundTable","createIndexSpec","src","nameFromKeyPath","createTableSchema","array","extractor","nameAndValue","getMaxKey","IdbKeyRange","only","getKeyExtractor","getSinglePathKeyExtractor","arrayify","_id_counter","getKeyPathAlias","createDBCore","tmpTrans","makeIDBKeyRange","upperBound","lowerBound","bound","hasGetAll","tables","objectStoreNames","autoIncrement","indexByKeyPath","isPrimaryKey","indexNames","multiEntry","navigator","userAgent","extractSchema","isAddOrPut","req","reqs","errorHandler","args1","args2","keyCount","callbackCount","successHandler","_pos","request","nonInfinitLimit","source","idbKeyRange","getAll","getAllKeys","openKeyCursor","___id","_cursorContinue","_cursorContinuePrimaryKey","continuePrimaryKey","_cursorAdvance","doThrowCursorIsStopped","gotOne","iterationPromise","resolveIteration","rejectIteration","guardedCallback","createDbCoreTable","tableMap","stack","MIN_KEY","MAX_KEY","generateMiddlewareStacks","stacks","middlewares","IDBKeyRange","dbcore","stackImpl","down","createMiddlewareStack","createMiddlewareStacks","_middlewares","tbl","setApiOnPlace","tableNames","dbschema","propDesc","enumerable","removeTablesApi","lowerVersionFirst","_cfg","version","runUpgraders","oldVersion","idbUpgradeTrans","globalSchema","contains","$meta","parseIndexSyntax","_storeNames","rejectTransaction","metaVersion","getExistingVersion","queue","versions","_versions","buildGlobalSchema","versToRun","runQueue","oldSchema","newSchema","adjustToExistingIndexNames","diff","getSchemaDiff","tuple","createTable","change","recreate","Upgrade","addIndex","deleteIndex","del","idxName","contentUpgrade","upgradeSchema","contentUpgradeIsAsync","returnValue","promiseFollowed","decrementor","storeName","deleteObjectStore","deleteRemovedTables","ceil","createMissingTables","updateTablesAndIndexes","populate","oldDef","newDef","def","oldIndexes","newIndexes","oldIdx","newIdx","createObjectStore","createIndex","j","idbindex","_hasGetAll","dexieName","indexSpec","WorkerGlobalScope","primKeyAndIndexes","indexNum","trim","replace","Version","_parseStoresSpec","stores","outSchema","storesSource","storesSpec","_allTables","upgrade","upgradeFunction","getDbNamesTable","dbNamesDB","Dexie$1","addons","dbnames","hasDatabasesNative","databases","vip","idbReady","intervalId","userAgentData","tryIdb","setInterval","clearInterval","isEmptyRange","node","RangeSet","fromOrTree","to","d","addRange","left","right","r","rebalance","rightWasCutOff","mergeRanges","newSet","_addRangeSet","rangesOverlap","rangeSet1","rangeSet2","i1","getRangeSetIterator","nextResult1","i2","nextResult2","state","keyProvided","up","rootClone","oldRootRight","computeDepth","extendObservabilitySet","part","obsSetsOverlap","os1","os2","rangeSet","addKey","addKeys","unsignaledParts","isTaskEnqueued","signalSubscribersLazily","optimistic","signalSubscribersNow","updatedParts","deleteAffectedCacheEntries","queriesToSignal","tblCache","collectTableSubscribers","exec","dbName","requery","outQueriesToSignal","updatedEntryLists","entries","queries","filteredEntries","obsSet","dexieOpen","openCanceller","nativeVerToOpen","round","verno","schemaPatchMode","throwIfCancelled","resolveDbReady","dbReadyResolve","upgradeTransaction","wasCreated","tryOpenDB","autoSchema","onblocked","_fireOnBlocked","onupgradeneeded","allowEmptyDB","delreq","deleteDatabase","NoSuchDatabase","oldVer","pow","tableChange","patchCurrentVersion","readGlobalSchema","ch","verifyInstalledSchema","onversionchange","vcFired","onclose","_onDatabaseCreated","onReadyBeingFired","ready","fireRemainders","remainders","_close","everything","awaitIterator","callNext","onSuccess","step","onError","throw","getNext","extractTransactionArgs","_tableArgs_","scopeFunc","enterTransactionScope","parentTransaction","explicit","_explicit","scopeFuncIsAsync","PrematureCommit","pad","virtualIndexMiddleware","level","indexLookup","allVirtualIndexes","addVirtualIndexes","keyTail","lowLevelIndex","keyPathAlias","indexList","keyLength","isVirtual","virtualIndex","translateRequest","virtualCursor","createVirtualCursor","getObjectDiff","prfx","ap","bp","apTypeName","getEffectiveKeys","hooksMiddleware","downCore","downTable","tableMiddleware","dxTrans","deleting","creating","updating","addPutOrDelete","deleteNextChunk","deleteRange","effectiveKeys","getExistingValues","existingValues","contexts","existingValue","generatedPrimaryKey","objectDiff","additionalChanges","requestedValue","getFromTransactionCache","cacheExistingValuesMiddleware","cachedResult","isCachableContext","subscr","isCachableRequest","observabilityMiddleware","FULL_RANGE","querier","indexesWithAutoIncPK","tableClone","mutatedParts","getRangeSet","pkRangeSet","delsRangeSet","newObjs","oldCache","oldObjs","addAffectedIndex","addKeyOrKeys","oldKey","newKey","trackAffectedIndexes","idxVals","pkPos","findIndex","pk","getRange","readSubscribers","method","isLiveQuery","cachable","queriedIndex","queriedRanges","keysPromise","resultingKeys","pKeys","wantValues","pkey","adjustOptimisticFromFailures","numBulkOps","isWithinRange","isAboveLower","isBelowUpper","applyOptimisticOps","ops","cacheEntry","immutable","queryRange","extractPrimKey","extractIndex","extractLowLevelIndex","finalResult","op","modifedResult","includedValues","freeze","keySet","keysToDelete","dirty","areRangesEqual","r1","r2","isSuperRange","lower1","lower2","lowerOpen1","lowerOpen2","compareLowers","upper1","upper2","upperOpen1","upperOpen2","compareUppers","subscribeToCacheEntry","container","signal","addEventListener","size","enqueForDeletion","cacheMiddleware","coreMW","ac","AbortController","endTransaction","wasCommitted","affectedSubscribers","optimisticOps","freezeResults","modRes","tableMW","adjustedReq","valueWithKey","exactMatch","equalEntry","find","countQuery","findCompatibleQuery","Map","vipify","vipDb","Proxy","receiver","deps","dependencies","cancelOpen","bSticky","keyRangeGenerator","keyRange","whereCtx","readingHook","createTableConstructor","complete","wasActive","createTransactionConstructor","versionNumber","createVersionConstructor","orCollection","_IDBKeyRange","createWhereClauseConstructor","newVersion","use","vipDB","tx","addon","versionInstance","_whenReady","unuse","mw","closeOptions","hasInvalidArguments","doDelete","_onDatabaseDeleted","backendDB","hasBeenClosed","hasFailed","dynamicallyOpened","_transaction","onlyIfCompatible","idbMode","SubTransaction","enterTransaction","InvalidTable","symbolObservable","observable","Observable","_subscribe","domDeps","mozIndexedDB","webkitIndexedDB","msIndexedDB","webkitIDBKeyRange","liveQuery","currentValue","hasValue","observer","abortController","closed","accumMuts","currentObs","subscription","startedListening","mutationListener","doQuery","_doQuery","aborted","objectIsEmpty","getValue","Dexie","propagateLocally","updateParts","wasMe","propagatingLocally","databaseName","exists","getDatabaseNames","infos","info","ignoreTransaction","async","generatorFn","spawn","currentTransaction","promiseOrFunction","optionalTimeout","delByKeyPath","minKey","semVer","maxKey","dispatchEvent","CustomEvent","detail","bc","createBC","BroadcastChannel","onmessage","data","unref","changedParts","postMessage","disableBfCache","persisted","domError"],"mappings":"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"} \ No newline at end of file diff --git a/src/dexie/dist/modern/dexie.mjs b/src/dexie/dist/modern/dexie.mjs new file mode 100644 index 000000000..75744312a --- /dev/null +++ b/src/dexie/dist/modern/dexie.mjs @@ -0,0 +1,5768 @@ +/* + * Dexie.js - a minimalistic wrapper for IndexedDB + * =============================================== + * + * By David Fahlander, david.fahlander@gmail.com + * + * Version 4.0.7, Sun May 26 2024 + * + * https://dexie.org + * + * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/ + */ + +const _global = typeof globalThis !== 'undefined' ? globalThis : + typeof self !== 'undefined' ? self : + typeof window !== 'undefined' ? window : + global; + +const keys = Object.keys; +const isArray = Array.isArray; +if (typeof Promise !== 'undefined' && !_global.Promise) { + _global.Promise = Promise; +} +function extend(obj, extension) { + if (typeof extension !== 'object') + return obj; + keys(extension).forEach(function (key) { + obj[key] = extension[key]; + }); + return obj; +} +const getProto = Object.getPrototypeOf; +const _hasOwn = {}.hasOwnProperty; +function hasOwn(obj, prop) { + return _hasOwn.call(obj, prop); +} +function props(proto, extension) { + if (typeof extension === 'function') + extension = extension(getProto(proto)); + (typeof Reflect === "undefined" ? keys : Reflect.ownKeys)(extension).forEach(key => { + setProp(proto, key, extension[key]); + }); +} +const defineProperty = Object.defineProperty; +function setProp(obj, prop, functionOrGetSet, options) { + defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, "get") && typeof functionOrGetSet.get === 'function' ? + { get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true } : + { value: functionOrGetSet, configurable: true, writable: true }, options)); +} +function derive(Child) { + return { + from: function (Parent) { + Child.prototype = Object.create(Parent.prototype); + setProp(Child.prototype, "constructor", Child); + return { + extend: props.bind(null, Child.prototype) + }; + } + }; +} +const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; +function getPropertyDescriptor(obj, prop) { + const pd = getOwnPropertyDescriptor(obj, prop); + let proto; + return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop); +} +const _slice = [].slice; +function slice(args, start, end) { + return _slice.call(args, start, end); +} +function override(origFunc, overridedFactory) { + return overridedFactory(origFunc); +} +function assert(b) { + if (!b) + throw new Error("Assertion Failed"); +} +function asap$1(fn) { + if (_global.setImmediate) + setImmediate(fn); + else + setTimeout(fn, 0); +} +function arrayToObject(array, extractor) { + return array.reduce((result, item, i) => { + var nameAndValue = extractor(item, i); + if (nameAndValue) + result[nameAndValue[0]] = nameAndValue[1]; + return result; + }, {}); +} +function getByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) + return obj[keyPath]; + if (!keyPath) + return obj; + if (typeof keyPath !== 'string') { + var rv = []; + for (var i = 0, l = keyPath.length; i < l; ++i) { + var val = getByKeyPath(obj, keyPath[i]); + rv.push(val); + } + return rv; + } + var period = keyPath.indexOf('.'); + if (period !== -1) { + var innerObj = obj[keyPath.substr(0, period)]; + return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1)); + } + return undefined; +} +function setByKeyPath(obj, keyPath, value) { + if (!obj || keyPath === undefined) + return; + if ('isFrozen' in Object && Object.isFrozen(obj)) + return; + if (typeof keyPath !== 'string' && 'length' in keyPath) { + assert(typeof value !== 'string' && 'length' in value); + for (var i = 0, l = keyPath.length; i < l; ++i) { + setByKeyPath(obj, keyPath[i], value[i]); + } + } + else { + var period = keyPath.indexOf('.'); + if (period !== -1) { + var currentKeyPath = keyPath.substr(0, period); + var remainingKeyPath = keyPath.substr(period + 1); + if (remainingKeyPath === "") + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) + obj.splice(currentKeyPath, 1); + else + delete obj[currentKeyPath]; + } + else + obj[currentKeyPath] = value; + else { + var innerObj = obj[currentKeyPath]; + if (!innerObj || !hasOwn(obj, currentKeyPath)) + innerObj = (obj[currentKeyPath] = {}); + setByKeyPath(innerObj, remainingKeyPath, value); + } + } + else { + if (value === undefined) { + if (isArray(obj) && !isNaN(parseInt(keyPath))) + obj.splice(keyPath, 1); + else + delete obj[keyPath]; + } + else + obj[keyPath] = value; + } + } +} +function delByKeyPath(obj, keyPath) { + if (typeof keyPath === 'string') + setByKeyPath(obj, keyPath, undefined); + else if ('length' in keyPath) + [].map.call(keyPath, function (kp) { + setByKeyPath(obj, kp, undefined); + }); +} +function shallowClone(obj) { + var rv = {}; + for (var m in obj) { + if (hasOwn(obj, m)) + rv[m] = obj[m]; + } + return rv; +} +const concat = [].concat; +function flatten(a) { + return concat.apply([], a); +} +const intrinsicTypeNames = "BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey" + .split(',').concat(flatten([8, 16, 32, 64].map(num => ["Int", "Uint", "Float"].map(t => t + num + "Array")))).filter(t => _global[t]); +const intrinsicTypes = new Set(intrinsicTypeNames.map(t => _global[t])); +function cloneSimpleObjectTree(o) { + const rv = {}; + for (const k in o) + if (hasOwn(o, k)) { + const v = o[k]; + rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v); + } + return rv; +} +function objectIsEmpty(o) { + for (const k in o) + if (hasOwn(o, k)) + return false; + return true; +} +let circularRefs = null; +function deepClone(any) { + circularRefs = new WeakMap(); + const rv = innerDeepClone(any); + circularRefs = null; + return rv; +} +function innerDeepClone(x) { + if (!x || typeof x !== 'object') + return x; + let rv = circularRefs.get(x); + if (rv) + return rv; + if (isArray(x)) { + rv = []; + circularRefs.set(x, rv); + for (var i = 0, l = x.length; i < l; ++i) { + rv.push(innerDeepClone(x[i])); + } + } + else if (intrinsicTypes.has(x.constructor)) { + rv = x; + } + else { + const proto = getProto(x); + rv = proto === Object.prototype ? {} : Object.create(proto); + circularRefs.set(x, rv); + for (var prop in x) { + if (hasOwn(x, prop)) { + rv[prop] = innerDeepClone(x[prop]); + } + } + } + return rv; +} +const { toString } = {}; +function toStringTag(o) { + return toString.call(o).slice(8, -1); +} +const iteratorSymbol = typeof Symbol !== 'undefined' ? + Symbol.iterator : + '@@iterator'; +const getIteratorOf = typeof iteratorSymbol === "symbol" ? function (x) { + var i; + return x != null && (i = x[iteratorSymbol]) && i.apply(x); +} : function () { return null; }; +function delArrayItem(a, x) { + const i = a.indexOf(x); + if (i >= 0) + a.splice(i, 1); + return i >= 0; +} +const NO_CHAR_ARRAY = {}; +function getArrayOf(arrayLike) { + var i, a, x, it; + if (arguments.length === 1) { + if (isArray(arrayLike)) + return arrayLike.slice(); + if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') + return [arrayLike]; + if ((it = getIteratorOf(arrayLike))) { + a = []; + while ((x = it.next()), !x.done) + a.push(x.value); + return a; + } + if (arrayLike == null) + return [arrayLike]; + i = arrayLike.length; + if (typeof i === 'number') { + a = new Array(i); + while (i--) + a[i] = arrayLike[i]; + return a; + } + return [arrayLike]; + } + i = arguments.length; + a = new Array(i); + while (i--) + a[i] = arguments[i]; + return a; +} +const isAsyncFunction = typeof Symbol !== 'undefined' + ? (fn) => fn[Symbol.toStringTag] === 'AsyncFunction' + : () => false; + +var dexieErrorNames = [ + 'Modify', + 'Bulk', + 'OpenFailed', + 'VersionChange', + 'Schema', + 'Upgrade', + 'InvalidTable', + 'MissingAPI', + 'NoSuchDatabase', + 'InvalidArgument', + 'SubTransaction', + 'Unsupported', + 'Internal', + 'DatabaseClosed', + 'PrematureCommit', + 'ForeignAwait' +]; +var idbDomErrorNames = [ + 'Unknown', + 'Constraint', + 'Data', + 'TransactionInactive', + 'ReadOnly', + 'Version', + 'NotFound', + 'InvalidState', + 'InvalidAccess', + 'Abort', + 'Timeout', + 'QuotaExceeded', + 'Syntax', + 'DataClone' +]; +var errorList = dexieErrorNames.concat(idbDomErrorNames); +var defaultTexts = { + VersionChanged: "Database version changed by other database connection", + DatabaseClosed: "Database has been closed", + Abort: "Transaction aborted", + TransactionInactive: "Transaction has already completed or failed", + MissingAPI: "IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb" +}; +function DexieError(name, msg) { + this.name = name; + this.message = msg; +} +derive(DexieError).from(Error).extend({ + toString: function () { return this.name + ": " + this.message; } +}); +function getMultiErrorMessage(msg, failures) { + return msg + ". Errors: " + Object.keys(failures) + .map(key => failures[key].toString()) + .filter((v, i, s) => s.indexOf(v) === i) + .join('\n'); +} +function ModifyError(msg, failures, successCount, failedKeys) { + this.failures = failures; + this.failedKeys = failedKeys; + this.successCount = successCount; + this.message = getMultiErrorMessage(msg, failures); +} +derive(ModifyError).from(DexieError); +function BulkError(msg, failures) { + this.name = "BulkError"; + this.failures = Object.keys(failures).map(pos => failures[pos]); + this.failuresByPos = failures; + this.message = getMultiErrorMessage(msg, this.failures); +} +derive(BulkError).from(DexieError); +var errnames = errorList.reduce((obj, name) => (obj[name] = name + "Error", obj), {}); +const BaseException = DexieError; +var exceptions = errorList.reduce((obj, name) => { + var fullName = name + "Error"; + function DexieError(msgOrInner, inner) { + this.name = fullName; + if (!msgOrInner) { + this.message = defaultTexts[name] || fullName; + this.inner = null; + } + else if (typeof msgOrInner === 'string') { + this.message = `${msgOrInner}${!inner ? '' : '\n ' + inner}`; + this.inner = inner || null; + } + else if (typeof msgOrInner === 'object') { + this.message = `${msgOrInner.name} ${msgOrInner.message}`; + this.inner = msgOrInner; + } + } + derive(DexieError).from(BaseException); + obj[name] = DexieError; + return obj; +}, {}); +exceptions.Syntax = SyntaxError; +exceptions.Type = TypeError; +exceptions.Range = RangeError; +var exceptionMap = idbDomErrorNames.reduce((obj, name) => { + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +function mapError(domError, message) { + if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) + return domError; + var rv = new exceptionMap[domError.name](message || domError.message, domError); + if ("stack" in domError) { + setProp(rv, "stack", { get: function () { + return this.inner.stack; + } }); + } + return rv; +} +var fullNameExceptions = errorList.reduce((obj, name) => { + if (["Syntax", "Type", "Range"].indexOf(name) === -1) + obj[name + "Error"] = exceptions[name]; + return obj; +}, {}); +fullNameExceptions.ModifyError = ModifyError; +fullNameExceptions.DexieError = DexieError; +fullNameExceptions.BulkError = BulkError; + +function nop() { } +function mirror(val) { return val; } +function pureFunctionChain(f1, f2) { + if (f1 == null || f1 === mirror) + return f2; + return function (val) { + return f2(f1(val)); + }; +} +function callBoth(on1, on2) { + return function () { + on1.apply(this, arguments); + on2.apply(this, arguments); + }; +} +function hookCreatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res !== undefined) + arguments[0] = res; + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res2 !== undefined ? res2 : res; + }; +} +function hookDeletingChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + f1.apply(this, arguments); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = this.onerror = null; + f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + }; +} +function hookUpdatingChain(f1, f2) { + if (f1 === nop) + return f2; + return function (modifications) { + var res = f1.apply(this, arguments); + extend(modifications, res); + var onsuccess = this.onsuccess, + onerror = this.onerror; + this.onsuccess = null; + this.onerror = null; + var res2 = f2.apply(this, arguments); + if (onsuccess) + this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess; + if (onerror) + this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror; + return res === undefined ? + (res2 === undefined ? undefined : res2) : + (extend(res, res2)); + }; +} +function reverseStoppableEventChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + if (f2.apply(this, arguments) === false) + return false; + return f1.apply(this, arguments); + }; +} +function promisableChain(f1, f2) { + if (f1 === nop) + return f2; + return function () { + var res = f1.apply(this, arguments); + if (res && typeof res.then === 'function') { + var thiz = this, i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + return res.then(function () { + return f2.apply(thiz, args); + }); + } + return f2.apply(this, arguments); + }; +} + +var debug = typeof location !== 'undefined' && + /^(http|https):\/\/(localhost|127\.0\.0\.1)/.test(location.href); +function setDebug(value, filter) { + debug = value; +} + +var INTERNAL = {}; +const ZONE_ECHO_LIMIT = 100, [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ? + [] : + (() => { + let globalP = Promise.resolve(); + if (typeof crypto === 'undefined' || !crypto.subtle) + return [globalP, getProto(globalP), globalP]; + const nativeP = crypto.subtle.digest("SHA-512", new Uint8Array([0])); + return [ + nativeP, + getProto(nativeP), + globalP + ]; + })(), nativePromiseThen = nativePromiseProto && nativePromiseProto.then; +const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor; +const patchGlobalPromise = !!resolvedGlobalPromise; +function schedulePhysicalTick() { + queueMicrotask(physicalTick); +} +var asap = function (callback, args) { + microtickQueue.push([callback, args]); + if (needsNewPhysicalTick) { + schedulePhysicalTick(); + needsNewPhysicalTick = false; + } +}; +var isOutsideMicroTick = true, +needsNewPhysicalTick = true, +unhandledErrors = [], +rejectingErrors = [], +rejectionMapper = mirror; +var globalPSD = { + id: 'global', + global: true, + ref: 0, + unhandleds: [], + onunhandled: nop, + pgp: false, + env: {}, + finalize: nop +}; +var PSD = globalPSD; +var microtickQueue = []; +var numScheduledCalls = 0; +var tickFinalizers = []; +function DexiePromise(fn) { + if (typeof this !== 'object') + throw new TypeError('Promises must be constructed via new'); + this._listeners = []; + this._lib = false; + var psd = (this._PSD = PSD); + if (typeof fn !== 'function') { + if (fn !== INTERNAL) + throw new TypeError('Not a function'); + this._state = arguments[1]; + this._value = arguments[2]; + if (this._state === false) + handleRejection(this, this._value); + return; + } + this._state = null; + this._value = null; + ++psd.ref; + executePromiseTask(this, fn); +} +const thenProp = { + get: function () { + var psd = PSD, microTaskId = totalEchoes; + function then(onFulfilled, onRejected) { + var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes); + const cleanup = possibleAwait && !decrementExpectedAwaits(); + var rv = new DexiePromise((resolve, reject) => { + propagateToListener(this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup), resolve, reject, psd)); + }); + if (this._consoleTask) + rv._consoleTask = this._consoleTask; + return rv; + } + then.prototype = INTERNAL; + return then; + }, + set: function (value) { + setProp(this, 'then', value && value.prototype === INTERNAL ? + thenProp : + { + get: function () { + return value; + }, + set: thenProp.set + }); + } +}; +props(DexiePromise.prototype, { + then: thenProp, + _then: function (onFulfilled, onRejected) { + propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); + }, + catch: function (onRejected) { + if (arguments.length === 1) + return this.then(null, onRejected); + var type = arguments[0], handler = arguments[1]; + return typeof type === 'function' ? this.then(null, err => + err instanceof type ? handler(err) : PromiseReject(err)) + : this.then(null, err => + err && err.name === type ? handler(err) : PromiseReject(err)); + }, + finally: function (onFinally) { + return this.then(value => { + return DexiePromise.resolve(onFinally()).then(() => value); + }, err => { + return DexiePromise.resolve(onFinally()).then(() => PromiseReject(err)); + }); + }, + timeout: function (ms, msg) { + return ms < Infinity ? + new DexiePromise((resolve, reject) => { + var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms); + this.then(resolve, reject).finally(clearTimeout.bind(null, handle)); + }) : this; + } +}); +if (typeof Symbol !== 'undefined' && Symbol.toStringTag) + setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise'); +globalPSD.env = snapShot(); +function Listener(onFulfilled, onRejected, resolve, reject, zone) { + this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null; + this.onRejected = typeof onRejected === 'function' ? onRejected : null; + this.resolve = resolve; + this.reject = reject; + this.psd = zone; +} +props(DexiePromise, { + all: function () { + var values = getArrayOf.apply(null, arguments) + .map(onPossibleParallellAsync); + return new DexiePromise(function (resolve, reject) { + if (values.length === 0) + resolve([]); + var remaining = values.length; + values.forEach((a, i) => DexiePromise.resolve(a).then(x => { + values[i] = x; + if (!--remaining) + resolve(values); + }, reject)); + }); + }, + resolve: value => { + if (value instanceof DexiePromise) + return value; + if (value && typeof value.then === 'function') + return new DexiePromise((resolve, reject) => { + value.then(resolve, reject); + }); + var rv = new DexiePromise(INTERNAL, true, value); + return rv; + }, + reject: PromiseReject, + race: function () { + var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve, reject) => { + values.map(value => DexiePromise.resolve(value).then(resolve, reject)); + }); + }, + PSD: { + get: () => PSD, + set: value => PSD = value + }, + totalEchoes: { get: () => totalEchoes }, + newPSD: newScope, + usePSD: usePSD, + scheduler: { + get: () => asap, + set: value => { asap = value; } + }, + rejectionMapper: { + get: () => rejectionMapper, + set: value => { rejectionMapper = value; } + }, + follow: (fn, zoneProps) => { + return new DexiePromise((resolve, reject) => { + return newScope((resolve, reject) => { + var psd = PSD; + psd.unhandleds = []; + psd.onunhandled = reject; + psd.finalize = callBoth(function () { + run_at_end_of_this_or_next_physical_tick(() => { + this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]); + }); + }, psd.finalize); + fn(); + }, zoneProps, resolve, reject); + }); + } +}); +if (NativePromise) { + if (NativePromise.allSettled) + setProp(DexiePromise, "allSettled", function () { + const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise(resolve => { + if (possiblePromises.length === 0) + resolve([]); + let remaining = possiblePromises.length; + const results = new Array(remaining); + possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => results[i] = { status: "fulfilled", value }, reason => results[i] = { status: "rejected", reason }) + .then(() => --remaining || resolve(results))); + }); + }); + if (NativePromise.any && typeof AggregateError !== 'undefined') + setProp(DexiePromise, "any", function () { + const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync); + return new DexiePromise((resolve, reject) => { + if (possiblePromises.length === 0) + reject(new AggregateError([])); + let remaining = possiblePromises.length; + const failures = new Array(remaining); + possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(value => resolve(value), failure => { + failures[i] = failure; + if (!--remaining) + reject(new AggregateError(failures)); + })); + }); + }); +} +function executePromiseTask(promise, fn) { + try { + fn(value => { + if (promise._state !== null) + return; + if (value === promise) + throw new TypeError('A promise cannot be resolved with itself.'); + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + if (value && typeof value.then === 'function') { + executePromiseTask(promise, (resolve, reject) => { + value instanceof DexiePromise ? + value._then(resolve, reject) : + value.then(resolve, reject); + }); + } + else { + promise._state = true; + promise._value = value; + propagateAllListeners(promise); + } + if (shouldExecuteTick) + endMicroTickScope(); + }, handleRejection.bind(null, promise)); + } + catch (ex) { + handleRejection(promise, ex); + } +} +function handleRejection(promise, reason) { + rejectingErrors.push(reason); + if (promise._state !== null) + return; + var shouldExecuteTick = promise._lib && beginMicroTickScope(); + reason = rejectionMapper(reason); + promise._state = false; + promise._value = reason; + addPossiblyUnhandledError(promise); + propagateAllListeners(promise); + if (shouldExecuteTick) + endMicroTickScope(); +} +function propagateAllListeners(promise) { + var listeners = promise._listeners; + promise._listeners = []; + for (var i = 0, len = listeners.length; i < len; ++i) { + propagateToListener(promise, listeners[i]); + } + var psd = promise._PSD; + --psd.ref || psd.finalize(); + if (numScheduledCalls === 0) { + ++numScheduledCalls; + asap(() => { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); + } +} +function propagateToListener(promise, listener) { + if (promise._state === null) { + promise._listeners.push(listener); + return; + } + var cb = promise._state ? listener.onFulfilled : listener.onRejected; + if (cb === null) { + return (promise._state ? listener.resolve : listener.reject)(promise._value); + } + ++listener.psd.ref; + ++numScheduledCalls; + asap(callListener, [cb, promise, listener]); +} +function callListener(cb, promise, listener) { + try { + var ret, value = promise._value; + if (!promise._state && rejectingErrors.length) + rejectingErrors = []; + ret = debug && promise._consoleTask ? promise._consoleTask.run(() => cb(value)) : cb(value); + if (!promise._state && rejectingErrors.indexOf(value) === -1) { + markErrorAsHandled(promise); + } + listener.resolve(ret); + } + catch (e) { + listener.reject(e); + } + finally { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + --listener.psd.ref || listener.psd.finalize(); + } +} +function physicalTick() { + usePSD(globalPSD, () => { + beginMicroTickScope() && endMicroTickScope(); + }); +} +function beginMicroTickScope() { + var wasRootExec = isOutsideMicroTick; + isOutsideMicroTick = false; + needsNewPhysicalTick = false; + return wasRootExec; +} +function endMicroTickScope() { + var callbacks, i, l; + do { + while (microtickQueue.length > 0) { + callbacks = microtickQueue; + microtickQueue = []; + l = callbacks.length; + for (i = 0; i < l; ++i) { + var item = callbacks[i]; + item[0].apply(null, item[1]); + } + } + } while (microtickQueue.length > 0); + isOutsideMicroTick = true; + needsNewPhysicalTick = true; +} +function finalizePhysicalTick() { + var unhandledErrs = unhandledErrors; + unhandledErrors = []; + unhandledErrs.forEach(p => { + p._PSD.onunhandled.call(null, p._value, p); + }); + var finalizers = tickFinalizers.slice(0); + var i = finalizers.length; + while (i) + finalizers[--i](); +} +function run_at_end_of_this_or_next_physical_tick(fn) { + function finalizer() { + fn(); + tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1); + } + tickFinalizers.push(finalizer); + ++numScheduledCalls; + asap(() => { + if (--numScheduledCalls === 0) + finalizePhysicalTick(); + }, []); +} +function addPossiblyUnhandledError(promise) { + if (!unhandledErrors.some(p => p._value === promise._value)) + unhandledErrors.push(promise); +} +function markErrorAsHandled(promise) { + var i = unhandledErrors.length; + while (i) + if (unhandledErrors[--i]._value === promise._value) { + unhandledErrors.splice(i, 1); + return; + } +} +function PromiseReject(reason) { + return new DexiePromise(INTERNAL, false, reason); +} +function wrap(fn, errorCatcher) { + var psd = PSD; + return function () { + var wasRootExec = beginMicroTickScope(), outerScope = PSD; + try { + switchToZone(psd, true); + return fn.apply(this, arguments); + } + catch (e) { + errorCatcher && errorCatcher(e); + } + finally { + switchToZone(outerScope, false); + if (wasRootExec) + endMicroTickScope(); + } + }; +} +const task = { awaits: 0, echoes: 0, id: 0 }; +var taskCounter = 0; +var zoneStack = []; +var zoneEchoes = 0; +var totalEchoes = 0; +var zone_id_counter = 0; +function newScope(fn, props, a1, a2) { + var parent = PSD, psd = Object.create(parent); + psd.parent = parent; + psd.ref = 0; + psd.global = false; + psd.id = ++zone_id_counter; + globalPSD.env; + psd.env = patchGlobalPromise ? { + Promise: DexiePromise, + PromiseProp: { value: DexiePromise, configurable: true, writable: true }, + all: DexiePromise.all, + race: DexiePromise.race, + allSettled: DexiePromise.allSettled, + any: DexiePromise.any, + resolve: DexiePromise.resolve, + reject: DexiePromise.reject, + } : {}; + if (props) + extend(psd, props); + ++parent.ref; + psd.finalize = function () { + --this.parent.ref || this.parent.finalize(); + }; + var rv = usePSD(psd, fn, a1, a2); + if (psd.ref === 0) + psd.finalize(); + return rv; +} +function incrementExpectedAwaits() { + if (!task.id) + task.id = ++taskCounter; + ++task.awaits; + task.echoes += ZONE_ECHO_LIMIT; + return task.id; +} +function decrementExpectedAwaits() { + if (!task.awaits) + return false; + if (--task.awaits === 0) + task.id = 0; + task.echoes = task.awaits * ZONE_ECHO_LIMIT; + return true; +} +if (('' + nativePromiseThen).indexOf('[native code]') === -1) { + incrementExpectedAwaits = decrementExpectedAwaits = nop; +} +function onPossibleParallellAsync(possiblePromise) { + if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) { + incrementExpectedAwaits(); + return possiblePromise.then(x => { + decrementExpectedAwaits(); + return x; + }, e => { + decrementExpectedAwaits(); + return rejection(e); + }); + } + return possiblePromise; +} +function zoneEnterEcho(targetZone) { + ++totalEchoes; + if (!task.echoes || --task.echoes === 0) { + task.echoes = task.awaits = task.id = 0; + } + zoneStack.push(PSD); + switchToZone(targetZone, true); +} +function zoneLeaveEcho() { + var zone = zoneStack[zoneStack.length - 1]; + zoneStack.pop(); + switchToZone(zone, false); +} +function switchToZone(targetZone, bEnteringZone) { + var currentZone = PSD; + if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) { + queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho); + } + if (targetZone === PSD) + return; + PSD = targetZone; + if (currentZone === globalPSD) + globalPSD.env = snapShot(); + if (patchGlobalPromise) { + var GlobalPromise = globalPSD.env.Promise; + var targetEnv = targetZone.env; + if (currentZone.global || targetZone.global) { + Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); + GlobalPromise.all = targetEnv.all; + GlobalPromise.race = targetEnv.race; + GlobalPromise.resolve = targetEnv.resolve; + GlobalPromise.reject = targetEnv.reject; + if (targetEnv.allSettled) + GlobalPromise.allSettled = targetEnv.allSettled; + if (targetEnv.any) + GlobalPromise.any = targetEnv.any; + } + } +} +function snapShot() { + var GlobalPromise = _global.Promise; + return patchGlobalPromise ? { + Promise: GlobalPromise, + PromiseProp: Object.getOwnPropertyDescriptor(_global, "Promise"), + all: GlobalPromise.all, + race: GlobalPromise.race, + allSettled: GlobalPromise.allSettled, + any: GlobalPromise.any, + resolve: GlobalPromise.resolve, + reject: GlobalPromise.reject, + } : {}; +} +function usePSD(psd, fn, a1, a2, a3) { + var outerScope = PSD; + try { + switchToZone(psd, true); + return fn(a1, a2, a3); + } + finally { + switchToZone(outerScope, false); + } +} +function nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) { + return typeof fn !== 'function' ? fn : function () { + var outerZone = PSD; + if (possibleAwait) + incrementExpectedAwaits(); + switchToZone(zone, true); + try { + return fn.apply(this, arguments); + } + finally { + switchToZone(outerZone, false); + if (cleanup) + queueMicrotask(decrementExpectedAwaits); + } + }; +} +function execInGlobalContext(cb) { + if (Promise === NativePromise && task.echoes === 0) { + if (zoneEchoes === 0) { + cb(); + } + else { + enqueueNativeMicroTask(cb); + } + } + else { + setTimeout(cb, 0); + } +} +var rejection = DexiePromise.reject; + +function tempTransaction(db, mode, storeNames, fn) { + if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) { + if (db._state.openComplete) { + return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError)); + } + if (!db._state.isBeingOpened) { + if (!db._state.autoOpen) + return rejection(new exceptions.DatabaseClosed()); + db.open().catch(nop); + } + return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn)); + } + else { + var trans = db._createTransaction(mode, storeNames, db._dbSchema); + try { + trans.create(); + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(() => tempTransaction(db, mode, storeNames, fn)); + } + return rejection(ex); + } + return trans._promise(mode, (resolve, reject) => { + return newScope(() => { + PSD.trans = trans; + return fn(resolve, reject, trans); + }); + }).then(result => { + if (mode === 'readwrite') + try { + trans.idbtrans.commit(); + } + catch { } + return mode === 'readonly' ? result : trans._completion.then(() => result); + }); + } +} + +const DEXIE_VERSION = '4.0.7'; +const maxString = String.fromCharCode(65535); +const minKey = -Infinity; +const INVALID_KEY_ARGUMENT = "Invalid key provided. Keys must be of type string, number, Date or Array."; +const STRING_EXPECTED = "String expected."; +const connections = []; +const DBNAMES_DB = '__dbnames'; +const READONLY = 'readonly'; +const READWRITE = 'readwrite'; + +function combine(filter1, filter2) { + return filter1 ? + filter2 ? + function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } : + filter1 : + filter2; +} + +const AnyRange = { + type: 3 , + lower: -Infinity, + lowerOpen: false, + upper: [[]], + upperOpen: false +}; + +function workaroundForUndefinedPrimKey(keyPath) { + return typeof keyPath === "string" && !/\./.test(keyPath) + ? (obj) => { + if (obj[keyPath] === undefined && (keyPath in obj)) { + obj = deepClone(obj); + delete obj[keyPath]; + } + return obj; + } + : (obj) => obj; +} + +function Entity() { + throw exceptions.Type(); +} + +function cmp(a, b) { + try { + const ta = type(a); + const tb = type(b); + if (ta !== tb) { + if (ta === 'Array') + return 1; + if (tb === 'Array') + return -1; + if (ta === 'binary') + return 1; + if (tb === 'binary') + return -1; + if (ta === 'string') + return 1; + if (tb === 'string') + return -1; + if (ta === 'Date') + return 1; + if (tb !== 'Date') + return NaN; + return -1; + } + switch (ta) { + case 'number': + case 'Date': + case 'string': + return a > b ? 1 : a < b ? -1 : 0; + case 'binary': { + return compareUint8Arrays(getUint8Array(a), getUint8Array(b)); + } + case 'Array': + return compareArrays(a, b); + } + } + catch { } + return NaN; +} +function compareArrays(a, b) { + const al = a.length; + const bl = b.length; + const l = al < bl ? al : bl; + for (let i = 0; i < l; ++i) { + const res = cmp(a[i], b[i]); + if (res !== 0) + return res; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function compareUint8Arrays(a, b) { + const al = a.length; + const bl = b.length; + const l = al < bl ? al : bl; + for (let i = 0; i < l; ++i) { + if (a[i] !== b[i]) + return a[i] < b[i] ? -1 : 1; + } + return al === bl ? 0 : al < bl ? -1 : 1; +} +function type(x) { + const t = typeof x; + if (t !== 'object') + return t; + if (ArrayBuffer.isView(x)) + return 'binary'; + const tsTag = toStringTag(x); + return tsTag === 'ArrayBuffer' ? 'binary' : tsTag; +} +function getUint8Array(a) { + if (a instanceof Uint8Array) + return a; + if (ArrayBuffer.isView(a)) + return new Uint8Array(a.buffer, a.byteOffset, a.byteLength); + return new Uint8Array(a); +} + +class Table { + _trans(mode, fn, writeLocked) { + const trans = this._tx || PSD.trans; + const tableName = this.name; + const task = debug && typeof console !== 'undefined' && console.createTask && console.createTask(`Dexie: ${mode === 'readonly' ? 'read' : 'write'} ${this.name}`); + function checkTableInTransaction(resolve, reject, trans) { + if (!trans.schema[tableName]) + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + return fn(trans.idbtrans, trans); + } + const wasRootExec = beginMicroTickScope(); + try { + let p = trans && trans.db._novip === this.db._novip ? + trans === PSD.trans ? + trans._promise(mode, checkTableInTransaction, writeLocked) : + newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) : + tempTransaction(this.db, mode, [this.name], checkTableInTransaction); + if (task) { + p._consoleTask = task; + p = p.catch(err => { + console.trace(err); + return rejection(err); + }); + } + return p; + } + finally { + if (wasRootExec) + endMicroTickScope(); + } + } + get(keyOrCrit, cb) { + if (keyOrCrit && keyOrCrit.constructor === Object) + return this.where(keyOrCrit).first(cb); + if (keyOrCrit == null) + return rejection(new exceptions.Type(`Invalid argument to Table.get()`)); + return this._trans('readonly', (trans) => { + return this.core.get({ trans, key: keyOrCrit }) + .then(res => this.hook.reading.fire(res)); + }).then(cb); + } + where(indexOrCrit) { + if (typeof indexOrCrit === 'string') + return new this.db.WhereClause(this, indexOrCrit); + if (isArray(indexOrCrit)) + return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`); + const keyPaths = keys(indexOrCrit); + if (keyPaths.length === 1) + return this + .where(keyPaths[0]) + .equals(indexOrCrit[keyPaths[0]]); + const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => { + if (ix.compound && + keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0)) { + for (let i = 0; i < keyPaths.length; ++i) { + if (keyPaths.indexOf(ix.keyPath[i]) === -1) + return false; + } + return true; + } + return false; + }).sort((a, b) => a.keyPath.length - b.keyPath.length)[0]; + if (compoundIndex && this.db._maxKey !== maxString) { + const keyPathsInValidOrder = compoundIndex.keyPath.slice(0, keyPaths.length); + return this + .where(keyPathsInValidOrder) + .equals(keyPathsInValidOrder.map(kp => indexOrCrit[kp])); + } + if (!compoundIndex && debug) + console.warn(`The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit from a ` + + `compound index [${keyPaths.join('+')}]`); + const { idxByName } = this.schema; + const idb = this.db._deps.indexedDB; + function equals(a, b) { + return idb.cmp(a, b) === 0; + } + const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => { + const index = idxByName[keyPath]; + const value = indexOrCrit[keyPath]; + return [ + prevIndex || index, + prevIndex || !index ? + combine(prevFilterFn, index && index.multi ? + x => { + const prop = getByKeyPath(x, keyPath); + return isArray(prop) && prop.some(item => equals(value, item)); + } : x => equals(value, getByKeyPath(x, keyPath))) + : prevFilterFn + ]; + }, [null, null]); + return idx ? + this.where(idx.name).equals(indexOrCrit[idx.keyPath]) + .filter(filterFunction) : + compoundIndex ? + this.filter(filterFunction) : + this.where(keyPaths).equals(''); + } + filter(filterFunction) { + return this.toCollection().and(filterFunction); + } + count(thenShortcut) { + return this.toCollection().count(thenShortcut); + } + offset(offset) { + return this.toCollection().offset(offset); + } + limit(numRows) { + return this.toCollection().limit(numRows); + } + each(callback) { + return this.toCollection().each(callback); + } + toArray(thenShortcut) { + return this.toCollection().toArray(thenShortcut); + } + toCollection() { + return new this.db.Collection(new this.db.WhereClause(this)); + } + orderBy(index) { + return new this.db.Collection(new this.db.WhereClause(this, isArray(index) ? + `[${index.join('+')}]` : + index)); + } + reverse() { + return this.toCollection().reverse(); + } + mapToClass(constructor) { + const { db, name: tableName } = this; + this.schema.mappedClass = constructor; + if (constructor.prototype instanceof Entity) { + constructor = class extends constructor { + get db() { return db; } + table() { return tableName; } + }; + } + const inheritedProps = new Set(); + for (let proto = constructor.prototype; proto; proto = getProto(proto)) { + Object.getOwnPropertyNames(proto).forEach(propName => inheritedProps.add(propName)); + } + const readHook = (obj) => { + if (!obj) + return obj; + const res = Object.create(constructor.prototype); + for (let m in obj) + if (!inheritedProps.has(m)) + try { + res[m] = obj[m]; + } + catch (_) { } + return res; + }; + if (this.schema.readHook) { + this.hook.reading.unsubscribe(this.schema.readHook); + } + this.schema.readHook = readHook; + this.hook("reading", readHook); + return constructor; + } + defineClass() { + function Class(content) { + extend(this, content); + } + return this.mapToClass(Class); + } + add(obj, key) { + const { auto, keyPath } = this.schema.primKey; + let objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', trans => { + return this.core.mutate({ trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd] }); + }).then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult) + .then(lastResult => { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + } + update(keyOrObject, modifications) { + if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) { + const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath); + if (key === undefined) + return rejection(new exceptions.InvalidArgument("Given object does not contain its primary key")); + return this.where(":id").equals(key).modify(modifications); + } + else { + return this.where(":id").equals(keyOrObject).modify(modifications); + } + } + put(obj, key) { + const { auto, keyPath } = this.schema.primKey; + let objToAdd = obj; + if (keyPath && auto) { + objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj); + } + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : res.lastResult) + .then(lastResult => { + if (keyPath) { + try { + setByKeyPath(obj, keyPath, lastResult); + } + catch (_) { } + } + return lastResult; + }); + } + delete(key) { + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'delete', keys: [key] })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined); + } + clear() { + return this._trans('readwrite', trans => this.core.mutate({ trans, type: 'deleteRange', range: AnyRange })) + .then(res => res.numFailures ? DexiePromise.reject(res.failures[0]) : undefined); + } + bulkGet(keys) { + return this._trans('readonly', trans => { + return this.core.getMany({ + keys, + trans + }).then(result => result.map(res => this.hook.reading.fire(res))); + }); + } + bulkAdd(objects, keysOrOptions, options) { + const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + const wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', trans => { + const { auto, keyPath } = this.schema.primKey; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkAdd(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + const numObjects = objects.length; + let objectsToAdd = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return this.core.mutate({ trans, type: 'add', keys: keys, values: objectsToAdd, wantResults }) + .then(({ numFailures, results, lastResult, failures }) => { + const result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError(`${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures); + }); + }); + } + bulkPut(objects, keysOrOptions, options) { + const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined; + options = options || (keys ? undefined : keysOrOptions); + const wantResults = options ? options.allKeys : undefined; + return this._trans('readwrite', trans => { + const { auto, keyPath } = this.schema.primKey; + if (keyPath && keys) + throw new exceptions.InvalidArgument("bulkPut(): keys argument invalid on tables with inbound keys"); + if (keys && keys.length !== objects.length) + throw new exceptions.InvalidArgument("Arguments objects and keys must have the same length"); + const numObjects = objects.length; + let objectsToPut = keyPath && auto ? + objects.map(workaroundForUndefinedPrimKey(keyPath)) : + objects; + return this.core.mutate({ trans, type: 'put', keys: keys, values: objectsToPut, wantResults }) + .then(({ numFailures, results, lastResult, failures }) => { + const result = wantResults ? results : lastResult; + if (numFailures === 0) + return result; + throw new BulkError(`${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures); + }); + }); + } + bulkUpdate(keysAndChanges) { + const coreTable = this.core; + const keys = keysAndChanges.map((entry) => entry.key); + const changeSpecs = keysAndChanges.map((entry) => entry.changes); + const offsetMap = []; + return this._trans('readwrite', (trans) => { + return coreTable.getMany({ trans, keys, cache: 'clone' }).then((objs) => { + const resultKeys = []; + const resultObjs = []; + keysAndChanges.forEach(({ key, changes }, idx) => { + const obj = objs[idx]; + if (obj) { + for (const keyPath of Object.keys(changes)) { + const value = changes[keyPath]; + if (keyPath === this.schema.primKey.keyPath) { + if (cmp(value, key) !== 0) { + throw new exceptions.Constraint(`Cannot update primary key in bulkUpdate()`); + } + } + else { + setByKeyPath(obj, keyPath, value); + } + } + offsetMap.push(idx); + resultKeys.push(key); + resultObjs.push(obj); + } + }); + const numEntries = resultKeys.length; + return coreTable + .mutate({ + trans, + type: 'put', + keys: resultKeys, + values: resultObjs, + updates: { + keys, + changeSpecs + } + }) + .then(({ numFailures, failures }) => { + if (numFailures === 0) + return numEntries; + for (const offset of Object.keys(failures)) { + const mappedOffset = offsetMap[Number(offset)]; + if (mappedOffset != null) { + const failure = failures[offset]; + delete failures[offset]; + failures[mappedOffset] = failure; + } + } + throw new BulkError(`${this.name}.bulkUpdate(): ${numFailures} of ${numEntries} operations failed`, failures); + }); + }); + }); + } + bulkDelete(keys) { + const numKeys = keys.length; + return this._trans('readwrite', trans => { + return this.core.mutate({ trans, type: 'delete', keys: keys }); + }).then(({ numFailures, lastResult, failures }) => { + if (numFailures === 0) + return lastResult; + throw new BulkError(`${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures); + }); + } +} + +function Events(ctx) { + var evs = {}; + var rv = function (eventName, subscriber) { + if (subscriber) { + var i = arguments.length, args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + evs[eventName].subscribe.apply(null, args); + return ctx; + } + else if (typeof (eventName) === 'string') { + return evs[eventName]; + } + }; + rv.addEventType = add; + for (var i = 1, l = arguments.length; i < l; ++i) { + add(arguments[i]); + } + return rv; + function add(eventName, chainFunction, defaultFunction) { + if (typeof eventName === 'object') + return addConfiguredEvents(eventName); + if (!chainFunction) + chainFunction = reverseStoppableEventChain; + if (!defaultFunction) + defaultFunction = nop; + var context = { + subscribers: [], + fire: defaultFunction, + subscribe: function (cb) { + if (context.subscribers.indexOf(cb) === -1) { + context.subscribers.push(cb); + context.fire = chainFunction(context.fire, cb); + } + }, + unsubscribe: function (cb) { + context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; }); + context.fire = context.subscribers.reduce(chainFunction, defaultFunction); + } + }; + evs[eventName] = rv[eventName] = context; + return context; + } + function addConfiguredEvents(cfg) { + keys(cfg).forEach(function (eventName) { + var args = cfg[eventName]; + if (isArray(args)) { + add(eventName, cfg[eventName][0], cfg[eventName][1]); + } + else if (args === 'asap') { + var context = add(eventName, mirror, function fire() { + var i = arguments.length, args = new Array(i); + while (i--) + args[i] = arguments[i]; + context.subscribers.forEach(function (fn) { + asap$1(function fireEvent() { + fn.apply(null, args); + }); + }); + }); + } + else + throw new exceptions.InvalidArgument("Invalid event config"); + }); + } +} + +function makeClassConstructor(prototype, constructor) { + derive(constructor).from({ prototype }); + return constructor; +} + +function createTableConstructor(db) { + return makeClassConstructor(Table.prototype, function Table(name, tableSchema, trans) { + this.db = db; + this._tx = trans; + this.name = name; + this.schema = tableSchema; + this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, { + "creating": [hookCreatingChain, nop], + "reading": [pureFunctionChain, mirror], + "updating": [hookUpdatingChain, nop], + "deleting": [hookDeletingChain, nop] + }); + }); +} + +function isPlainKeyRange(ctx, ignoreLimitFilter) { + return !(ctx.filter || ctx.algorithm || ctx.or) && + (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter); +} +function addFilter(ctx, fn) { + ctx.filter = combine(ctx.filter, fn); +} +function addReplayFilter(ctx, factory, isLimitFilter) { + var curr = ctx.replayFilter; + ctx.replayFilter = curr ? () => combine(curr(), factory()) : factory; + ctx.justLimit = isLimitFilter && !curr; +} +function addMatchFilter(ctx, fn) { + ctx.isMatch = combine(ctx.isMatch, fn); +} +function getIndexOrStore(ctx, coreSchema) { + if (ctx.isPrimKey) + return coreSchema.primaryKey; + const index = coreSchema.getIndexByKeyPath(ctx.index); + if (!index) + throw new exceptions.Schema("KeyPath " + ctx.index + " on object store " + coreSchema.name + " is not indexed"); + return index; +} +function openCursor(ctx, coreTable, trans) { + const index = getIndexOrStore(ctx, coreTable.schema); + return coreTable.openCursor({ + trans, + values: !ctx.keysOnly, + reverse: ctx.dir === 'prev', + unique: !!ctx.unique, + query: { + index, + range: ctx.range + } + }); +} +function iter(ctx, fn, coreTrans, coreTable) { + const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter; + if (!ctx.or) { + return iterate(openCursor(ctx, coreTable, coreTrans), combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper); + } + else { + const set = {}; + const union = (item, cursor, advance) => { + if (!filter || filter(cursor, advance, result => cursor.stop(result), err => cursor.fail(err))) { + var primaryKey = cursor.primaryKey; + var key = '' + primaryKey; + if (key === '[object ArrayBuffer]') + key = '' + new Uint8Array(primaryKey); + if (!hasOwn(set, key)) { + set[key] = true; + fn(item, cursor, advance); + } + } + }; + return Promise.all([ + ctx.or._iterate(union, coreTrans), + iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper) + ]); + } +} +function iterate(cursorPromise, filter, fn, valueMapper) { + var mappedFn = valueMapper ? (x, c, a) => fn(valueMapper(x), c, a) : fn; + var wrappedFn = wrap(mappedFn); + return cursorPromise.then(cursor => { + if (cursor) { + return cursor.start(() => { + var c = () => cursor.continue(); + if (!filter || filter(cursor, advancer => c = advancer, val => { cursor.stop(val); c = nop; }, e => { cursor.fail(e); c = nop; })) + wrappedFn(cursor.value, cursor, advancer => c = advancer); + c(); + }); + } + }); +} + +const PropModSymbol = Symbol(); +class PropModification { + execute(value) { + if (this.add !== undefined) { + const term = this.add; + if (isArray(term)) { + return [...(isArray(value) ? value : []), ...term].sort(); + } + if (typeof term === 'number') + return (Number(value) || 0) + term; + if (typeof term === 'bigint') { + try { + return BigInt(value) + term; + } + catch { + return BigInt(0) + term; + } + } + throw new TypeError(`Invalid term ${term}`); + } + if (this.remove !== undefined) { + const subtrahend = this.remove; + if (isArray(subtrahend)) { + return isArray(value) ? value.filter(item => !subtrahend.includes(item)).sort() : []; + } + if (typeof subtrahend === 'number') + return Number(value) - subtrahend; + if (typeof subtrahend === 'bigint') { + try { + return BigInt(value) - subtrahend; + } + catch { + return BigInt(0) - subtrahend; + } + } + throw new TypeError(`Invalid subtrahend ${subtrahend}`); + } + const prefixToReplace = this.replacePrefix?.[0]; + if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) { + return this.replacePrefix[1] + value.substring(prefixToReplace.length); + } + return value; + } + constructor(spec) { + Object.assign(this, spec); + } +} + +class Collection { + _read(fn, cb) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readonly', fn).then(cb); + } + _write(fn) { + var ctx = this._ctx; + return ctx.error ? + ctx.table._trans(null, rejection.bind(null, ctx.error)) : + ctx.table._trans('readwrite', fn, "locked"); + } + _addAlgorithm(fn) { + var ctx = this._ctx; + ctx.algorithm = combine(ctx.algorithm, fn); + } + _iterate(fn, coreTrans) { + return iter(this._ctx, fn, coreTrans, this._ctx.table.core); + } + clone(props) { + var rv = Object.create(this.constructor.prototype), ctx = Object.create(this._ctx); + if (props) + extend(ctx, props); + rv._ctx = ctx; + return rv; + } + raw() { + this._ctx.valueMapper = null; + return this; + } + each(fn) { + var ctx = this._ctx; + return this._read(trans => iter(ctx, fn, trans, ctx.table.core)); + } + count(cb) { + return this._read(trans => { + const ctx = this._ctx; + const coreTable = ctx.table.core; + if (isPlainKeyRange(ctx, true)) { + return coreTable.count({ + trans, + query: { + index: getIndexOrStore(ctx, coreTable.schema), + range: ctx.range + } + }).then(count => Math.min(count, ctx.limit)); + } + else { + var count = 0; + return iter(ctx, () => { ++count; return false; }, trans, coreTable) + .then(() => count); + } + }).then(cb); + } + sortBy(keyPath, cb) { + const parts = keyPath.split('.').reverse(), lastPart = parts[0], lastIndex = parts.length - 1; + function getval(obj, i) { + if (i) + return getval(obj[parts[i]], i - 1); + return obj[lastPart]; + } + var order = this._ctx.dir === "next" ? 1 : -1; + function sorter(a, b) { + var aVal = getval(a, lastIndex), bVal = getval(b, lastIndex); + return aVal < bVal ? -order : aVal > bVal ? order : 0; + } + return this.toArray(function (a) { + return a.sort(sorter); + }).then(cb); + } + toArray(cb) { + return this._read(trans => { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + const { valueMapper } = ctx; + const index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans, + limit: ctx.limit, + values: true, + query: { + index, + range: ctx.range + } + }).then(({ result }) => valueMapper ? result.map(valueMapper) : result); + } + else { + const a = []; + return iter(ctx, item => a.push(item), trans, ctx.table.core).then(() => a); + } + }, cb); + } + offset(offset) { + var ctx = this._ctx; + if (offset <= 0) + return this; + ctx.offset += offset; + if (isPlainKeyRange(ctx)) { + addReplayFilter(ctx, () => { + var offsetLeft = offset; + return (cursor, advance) => { + if (offsetLeft === 0) + return true; + if (offsetLeft === 1) { + --offsetLeft; + return false; + } + advance(() => { + cursor.advance(offsetLeft); + offsetLeft = 0; + }); + return false; + }; + }); + } + else { + addReplayFilter(ctx, () => { + var offsetLeft = offset; + return () => (--offsetLeft < 0); + }); + } + return this; + } + limit(numRows) { + this._ctx.limit = Math.min(this._ctx.limit, numRows); + addReplayFilter(this._ctx, () => { + var rowsLeft = numRows; + return function (cursor, advance, resolve) { + if (--rowsLeft <= 0) + advance(resolve); + return rowsLeft >= 0; + }; + }, true); + return this; + } + until(filterFunction, bIncludeStopEntry) { + addFilter(this._ctx, function (cursor, advance, resolve) { + if (filterFunction(cursor.value)) { + advance(resolve); + return bIncludeStopEntry; + } + else { + return true; + } + }); + return this; + } + first(cb) { + return this.limit(1).toArray(function (a) { return a[0]; }).then(cb); + } + last(cb) { + return this.reverse().first(cb); + } + filter(filterFunction) { + addFilter(this._ctx, function (cursor) { + return filterFunction(cursor.value); + }); + addMatchFilter(this._ctx, filterFunction); + return this; + } + and(filter) { + return this.filter(filter); + } + or(indexName) { + return new this.db.WhereClause(this._ctx.table, indexName, this); + } + reverse() { + this._ctx.dir = (this._ctx.dir === "prev" ? "next" : "prev"); + if (this._ondirectionchange) + this._ondirectionchange(this._ctx.dir); + return this; + } + desc() { + return this.reverse(); + } + eachKey(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.key, cursor); }); + } + eachUniqueKey(cb) { + this._ctx.unique = "unique"; + return this.eachKey(cb); + } + eachPrimaryKey(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); }); + } + keys(cb) { + var ctx = this._ctx; + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.key); + }).then(function () { + return a; + }).then(cb); + } + primaryKeys(cb) { + var ctx = this._ctx; + if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) { + return this._read(trans => { + var index = getIndexOrStore(ctx, ctx.table.core.schema); + return ctx.table.core.query({ + trans, + values: false, + limit: ctx.limit, + query: { + index, + range: ctx.range + } + }); + }).then(({ result }) => result).then(cb); + } + ctx.keysOnly = !ctx.isMatch; + var a = []; + return this.each(function (item, cursor) { + a.push(cursor.primaryKey); + }).then(function () { + return a; + }).then(cb); + } + uniqueKeys(cb) { + this._ctx.unique = "unique"; + return this.keys(cb); + } + firstKey(cb) { + return this.limit(1).keys(function (a) { return a[0]; }).then(cb); + } + lastKey(cb) { + return this.reverse().firstKey(cb); + } + distinct() { + var ctx = this._ctx, idx = ctx.index && ctx.table.schema.idxByName[ctx.index]; + if (!idx || !idx.multi) + return this; + var set = {}; + addFilter(this._ctx, function (cursor) { + var strKey = cursor.primaryKey.toString(); + var found = hasOwn(set, strKey); + set[strKey] = true; + return !found; + }); + return this; + } + modify(changes) { + var ctx = this._ctx; + return this._write(trans => { + var modifyer; + if (typeof changes === 'function') { + modifyer = changes; + } + else { + var keyPaths = keys(changes); + var numKeys = keyPaths.length; + modifyer = function (item) { + let anythingModified = false; + for (let i = 0; i < numKeys; ++i) { + let keyPath = keyPaths[i]; + let val = changes[keyPath]; + let origVal = getByKeyPath(item, keyPath); + if (val instanceof PropModification) { + setByKeyPath(item, keyPath, val.execute(origVal)); + anythingModified = true; + } + else if (origVal !== val) { + setByKeyPath(item, keyPath, val); + anythingModified = true; + } + } + return anythingModified; + }; + } + const coreTable = ctx.table.core; + const { outbound, extractKey } = coreTable.schema.primaryKey; + const limit = this.db._options.modifyChunkSize || 200; + const totalFailures = []; + let successCount = 0; + const failedKeys = []; + const applyMutateResult = (expectedCount, res) => { + const { failures, numFailures } = res; + successCount += expectedCount - numFailures; + for (let pos of keys(failures)) { + totalFailures.push(failures[pos]); + } + }; + return this.clone().primaryKeys().then(keys => { + const criteria = isPlainKeyRange(ctx) && + ctx.limit === Infinity && + (typeof changes !== 'function' || changes === deleteCallback) && { + index: ctx.index, + range: ctx.range + }; + const nextChunk = (offset) => { + const count = Math.min(limit, keys.length - offset); + return coreTable.getMany({ + trans, + keys: keys.slice(offset, offset + count), + cache: "immutable" + }).then(values => { + const addValues = []; + const putValues = []; + const putKeys = outbound ? [] : null; + const deleteKeys = []; + for (let i = 0; i < count; ++i) { + const origValue = values[i]; + const ctx = { + value: deepClone(origValue), + primKey: keys[offset + i] + }; + if (modifyer.call(ctx, ctx.value, ctx) !== false) { + if (ctx.value == null) { + deleteKeys.push(keys[offset + i]); + } + else if (!outbound && cmp(extractKey(origValue), extractKey(ctx.value)) !== 0) { + deleteKeys.push(keys[offset + i]); + addValues.push(ctx.value); + } + else { + putValues.push(ctx.value); + if (outbound) + putKeys.push(keys[offset + i]); + } + } + } + return Promise.resolve(addValues.length > 0 && + coreTable.mutate({ trans, type: 'add', values: addValues }) + .then(res => { + for (let pos in res.failures) { + deleteKeys.splice(parseInt(pos), 1); + } + applyMutateResult(addValues.length, res); + })).then(() => (putValues.length > 0 || (criteria && typeof changes === 'object')) && + coreTable.mutate({ + trans, + type: 'put', + keys: putKeys, + values: putValues, + criteria, + changeSpec: typeof changes !== 'function' + && changes, + isAdditionalChunk: offset > 0 + }).then(res => applyMutateResult(putValues.length, res))).then(() => (deleteKeys.length > 0 || (criteria && changes === deleteCallback)) && + coreTable.mutate({ + trans, + type: 'delete', + keys: deleteKeys, + criteria, + isAdditionalChunk: offset > 0 + }).then(res => applyMutateResult(deleteKeys.length, res))).then(() => { + return keys.length > offset + count && nextChunk(offset + limit); + }); + }); + }; + return nextChunk(0).then(() => { + if (totalFailures.length > 0) + throw new ModifyError("Error modifying one or more objects", totalFailures, successCount, failedKeys); + return keys.length; + }); + }); + }); + } + delete() { + var ctx = this._ctx, range = ctx.range; + if (isPlainKeyRange(ctx) && + (ctx.isPrimKey || range.type === 3 )) + { + return this._write(trans => { + const { primaryKey } = ctx.table.core.schema; + const coreRange = range; + return ctx.table.core.count({ trans, query: { index: primaryKey, range: coreRange } }).then(count => { + return ctx.table.core.mutate({ trans, type: 'deleteRange', range: coreRange }) + .then(({ failures, lastResult, results, numFailures }) => { + if (numFailures) + throw new ModifyError("Could not delete some values", Object.keys(failures).map(pos => failures[pos]), count - numFailures); + return count - numFailures; + }); + }); + }); + } + return this.modify(deleteCallback); + } +} +const deleteCallback = (value, ctx) => ctx.value = null; + +function createCollectionConstructor(db) { + return makeClassConstructor(Collection.prototype, function Collection(whereClause, keyRangeGenerator) { + this.db = db; + let keyRange = AnyRange, error = null; + if (keyRangeGenerator) + try { + keyRange = keyRangeGenerator(); + } + catch (ex) { + error = ex; + } + const whereCtx = whereClause._ctx; + const table = whereCtx.table; + const readingHook = table.hook.reading.fire; + this._ctx = { + table: table, + index: whereCtx.index, + isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)), + range: keyRange, + keysOnly: false, + dir: "next", + unique: "", + algorithm: null, + filter: null, + replayFilter: null, + justLimit: true, + isMatch: null, + offset: 0, + limit: Infinity, + error: error, + or: whereCtx.or, + valueMapper: readingHook !== mirror ? readingHook : null + }; + }); +} + +function simpleCompare(a, b) { + return a < b ? -1 : a === b ? 0 : 1; +} +function simpleCompareReverse(a, b) { + return a > b ? -1 : a === b ? 0 : 1; +} + +function fail(collectionOrWhereClause, err, T) { + var collection = collectionOrWhereClause instanceof WhereClause ? + new collectionOrWhereClause.Collection(collectionOrWhereClause) : + collectionOrWhereClause; + collection._ctx.error = T ? new T(err) : new TypeError(err); + return collection; +} +function emptyCollection(whereClause) { + return new whereClause.Collection(whereClause, () => rangeEqual("")).limit(0); +} +function upperFactory(dir) { + return dir === "next" ? + (s) => s.toUpperCase() : + (s) => s.toLowerCase(); +} +function lowerFactory(dir) { + return dir === "next" ? + (s) => s.toLowerCase() : + (s) => s.toUpperCase(); +} +function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) { + var length = Math.min(key.length, lowerNeedle.length); + var llp = -1; + for (var i = 0; i < length; ++i) { + var lwrKeyChar = lowerKey[i]; + if (lwrKeyChar !== lowerNeedle[i]) { + if (cmp(key[i], upperNeedle[i]) < 0) + return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1); + if (cmp(key[i], lowerNeedle[i]) < 0) + return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1); + if (llp >= 0) + return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1); + return null; + } + if (cmp(key[i], lwrKeyChar) < 0) + llp = i; + } + if (length < lowerNeedle.length && dir === "next") + return key + upperNeedle.substr(key.length); + if (length < key.length && dir === "prev") + return key.substr(0, upperNeedle.length); + return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1)); +} +function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) { + var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix, needlesLen = needles.length; + if (!needles.every(s => typeof s === 'string')) { + return fail(whereClause, STRING_EXPECTED); + } + function initDirection(dir) { + upper = upperFactory(dir); + lower = lowerFactory(dir); + compare = (dir === "next" ? simpleCompare : simpleCompareReverse); + var needleBounds = needles.map(function (needle) { + return { lower: lower(needle), upper: upper(needle) }; + }).sort(function (a, b) { + return compare(a.lower, b.lower); + }); + upperNeedles = needleBounds.map(function (nb) { return nb.upper; }); + lowerNeedles = needleBounds.map(function (nb) { return nb.lower; }); + direction = dir; + nextKeySuffix = (dir === "next" ? "" : suffix); + } + initDirection("next"); + var c = new whereClause.Collection(whereClause, () => createRange(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix)); + c._ondirectionchange = function (direction) { + initDirection(direction); + }; + var firstPossibleNeedle = 0; + c._addAlgorithm(function (cursor, advance, resolve) { + var key = cursor.key; + if (typeof key !== 'string') + return false; + var lowerKey = lower(key); + if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) { + return true; + } + else { + var lowestPossibleCasing = null; + for (var i = firstPossibleNeedle; i < needlesLen; ++i) { + var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction); + if (casing === null && lowestPossibleCasing === null) + firstPossibleNeedle = i + 1; + else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) { + lowestPossibleCasing = casing; + } + } + if (lowestPossibleCasing !== null) { + advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); }); + } + else { + advance(resolve); + } + return false; + } + }); + return c; +} +function createRange(lower, upper, lowerOpen, upperOpen) { + return { + type: 2 , + lower, + upper, + lowerOpen, + upperOpen + }; +} +function rangeEqual(value) { + return { + type: 1 , + lower: value, + upper: value + }; +} + +class WhereClause { + get Collection() { + return this._ctx.table.db.Collection; + } + between(lower, upper, includeLower, includeUpper) { + includeLower = includeLower !== false; + includeUpper = includeUpper === true; + try { + if ((this._cmp(lower, upper) > 0) || + (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper))) + return emptyCollection(this); + return new this.Collection(this, () => createRange(lower, upper, !includeLower, !includeUpper)); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + } + equals(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => rangeEqual(value)); + } + above(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(value, undefined, true)); + } + aboveOrEqual(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(value, undefined, false)); + } + below(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(undefined, value, false, true)); + } + belowOrEqual(value) { + if (value == null) + return fail(this, INVALID_KEY_ARGUMENT); + return new this.Collection(this, () => createRange(undefined, value)); + } + startsWith(str) { + if (typeof str !== 'string') + return fail(this, STRING_EXPECTED); + return this.between(str, str + maxString, true, true); + } + startsWithIgnoreCase(str) { + if (str === "") + return this.startsWith(str); + return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString); + } + equalsIgnoreCase(str) { + return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], ""); + } + anyOfIgnoreCase() { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, ""); + } + startsWithAnyOfIgnoreCase() { + var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return emptyCollection(this); + return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString); + } + anyOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + let compare = this._cmp; + try { + set.sort(compare); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + if (set.length === 0) + return emptyCollection(this); + const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1])); + c._ondirectionchange = direction => { + compare = (direction === "next" ? + this._ascending : + this._descending); + set.sort(compare); + }; + let i = 0; + c._addAlgorithm((cursor, advance, resolve) => { + const key = cursor.key; + while (compare(key, set[i]) > 0) { + ++i; + if (i === set.length) { + advance(resolve); + return false; + } + } + if (compare(key, set[i]) === 0) { + return true; + } + else { + advance(() => { cursor.continue(set[i]); }); + return false; + } + }); + return c; + } + notEqual(value) { + return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false }); + } + noneOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (set.length === 0) + return new this.Collection(this); + try { + set.sort(this._ascending); + } + catch (e) { + return fail(this, INVALID_KEY_ARGUMENT); + } + const ranges = set.reduce((res, val) => res ? + res.concat([[res[res.length - 1][1], val]]) : + [[minKey, val]], null); + ranges.push([set[set.length - 1], this.db._maxKey]); + return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false }); + } + inAnyRange(ranges, options) { + const cmp = this._cmp, ascending = this._ascending, descending = this._descending, min = this._min, max = this._max; + if (ranges.length === 0) + return emptyCollection(this); + if (!ranges.every(range => range[0] !== undefined && + range[1] !== undefined && + ascending(range[0], range[1]) <= 0)) { + return fail(this, "First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower", exceptions.InvalidArgument); + } + const includeLowers = !options || options.includeLowers !== false; + const includeUppers = options && options.includeUppers === true; + function addRange(ranges, newRange) { + let i = 0, l = ranges.length; + for (; i < l; ++i) { + const range = ranges[i]; + if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) { + range[0] = min(range[0], newRange[0]); + range[1] = max(range[1], newRange[1]); + break; + } + } + if (i === l) + ranges.push(newRange); + return ranges; + } + let sortDirection = ascending; + function rangeSorter(a, b) { return sortDirection(a[0], b[0]); } + let set; + try { + set = ranges.reduce(addRange, []); + set.sort(rangeSorter); + } + catch (ex) { + return fail(this, INVALID_KEY_ARGUMENT); + } + let rangePos = 0; + const keyIsBeyondCurrentEntry = includeUppers ? + key => ascending(key, set[rangePos][1]) > 0 : + key => ascending(key, set[rangePos][1]) >= 0; + const keyIsBeforeCurrentEntry = includeLowers ? + key => descending(key, set[rangePos][0]) > 0 : + key => descending(key, set[rangePos][0]) >= 0; + function keyWithinCurrentRange(key) { + return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key); + } + let checkKey = keyIsBeyondCurrentEntry; + const c = new this.Collection(this, () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers)); + c._ondirectionchange = direction => { + if (direction === "next") { + checkKey = keyIsBeyondCurrentEntry; + sortDirection = ascending; + } + else { + checkKey = keyIsBeforeCurrentEntry; + sortDirection = descending; + } + set.sort(rangeSorter); + }; + c._addAlgorithm((cursor, advance, resolve) => { + var key = cursor.key; + while (checkKey(key)) { + ++rangePos; + if (rangePos === set.length) { + advance(resolve); + return false; + } + } + if (keyWithinCurrentRange(key)) { + return true; + } + else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) { + return false; + } + else { + advance(() => { + if (sortDirection === ascending) + cursor.continue(set[rangePos][0]); + else + cursor.continue(set[rangePos][1]); + }); + return false; + } + }); + return c; + } + startsWithAnyOf() { + const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments); + if (!set.every(s => typeof s === 'string')) { + return fail(this, "startsWithAnyOf() only works with strings"); + } + if (set.length === 0) + return emptyCollection(this); + return this.inAnyRange(set.map((str) => [str, str + maxString])); + } +} + +function createWhereClauseConstructor(db) { + return makeClassConstructor(WhereClause.prototype, function WhereClause(table, index, orCollection) { + this.db = db; + this._ctx = { + table: table, + index: index === ":id" ? null : index, + or: orCollection + }; + this._cmp = this._ascending = cmp; + this._descending = (a, b) => cmp(b, a); + this._max = (a, b) => cmp(a, b) > 0 ? a : b; + this._min = (a, b) => cmp(a, b) < 0 ? a : b; + this._IDBKeyRange = db._deps.IDBKeyRange; + if (!this._IDBKeyRange) + throw new exceptions.MissingAPI(); + }); +} + +function eventRejectHandler(reject) { + return wrap(function (event) { + preventDefault(event); + reject(event.target.error); + return false; + }); +} +function preventDefault(event) { + if (event.stopPropagation) + event.stopPropagation(); + if (event.preventDefault) + event.preventDefault(); +} + +const DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated'; +const STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1'; +const globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME); + +class Transaction { + _lock() { + assert(!PSD.global); + ++this._reculock; + if (this._reculock === 1 && !PSD.global) + PSD.lockOwnerFor = this; + return this; + } + _unlock() { + assert(!PSD.global); + if (--this._reculock === 0) { + if (!PSD.global) + PSD.lockOwnerFor = null; + while (this._blockedFuncs.length > 0 && !this._locked()) { + var fnAndPSD = this._blockedFuncs.shift(); + try { + usePSD(fnAndPSD[1], fnAndPSD[0]); + } + catch (e) { } + } + } + return this; + } + _locked() { + return this._reculock && PSD.lockOwnerFor !== this; + } + create(idbtrans) { + if (!this.mode) + return this; + const idbdb = this.db.idbdb; + const dbOpenError = this.db._state.dbOpenError; + assert(!this.idbtrans); + if (!idbtrans && !idbdb) { + switch (dbOpenError && dbOpenError.name) { + case "DatabaseClosedError": + throw new exceptions.DatabaseClosed(dbOpenError); + case "MissingAPIError": + throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError); + default: + throw new exceptions.OpenFailed(dbOpenError); + } + } + if (!this.active) + throw new exceptions.TransactionInactive(); + assert(this._completion._state === null); + idbtrans = this.idbtrans = idbtrans || + (this.db.core + ? this.db.core.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability }) + : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })); + idbtrans.onerror = wrap(ev => { + preventDefault(ev); + this._reject(idbtrans.error); + }); + idbtrans.onabort = wrap(ev => { + preventDefault(ev); + this.active && this._reject(new exceptions.Abort(idbtrans.error)); + this.active = false; + this.on("abort").fire(ev); + }); + idbtrans.oncomplete = wrap(() => { + this.active = false; + this._resolve(); + if ('mutatedParts' in idbtrans) { + globalEvents.storagemutated.fire(idbtrans["mutatedParts"]); + } + }); + return this; + } + _promise(mode, fn, bWriteLock) { + if (mode === 'readwrite' && this.mode !== 'readwrite') + return rejection(new exceptions.ReadOnly("Transaction is readonly")); + if (!this.active) + return rejection(new exceptions.TransactionInactive()); + if (this._locked()) { + return new DexiePromise((resolve, reject) => { + this._blockedFuncs.push([() => { + this._promise(mode, fn, bWriteLock).then(resolve, reject); + }, PSD]); + }); + } + else if (bWriteLock) { + return newScope(() => { + var p = new DexiePromise((resolve, reject) => { + this._lock(); + const rv = fn(resolve, reject, this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p.finally(() => this._unlock()); + p._lib = true; + return p; + }); + } + else { + var p = new DexiePromise((resolve, reject) => { + var rv = fn(resolve, reject, this); + if (rv && rv.then) + rv.then(resolve, reject); + }); + p._lib = true; + return p; + } + } + _root() { + return this.parent ? this.parent._root() : this; + } + waitFor(promiseLike) { + var root = this._root(); + const promise = DexiePromise.resolve(promiseLike); + if (root._waitingFor) { + root._waitingFor = root._waitingFor.then(() => promise); + } + else { + root._waitingFor = promise; + root._waitingQueue = []; + var store = root.idbtrans.objectStore(root.storeNames[0]); + (function spin() { + ++root._spinCount; + while (root._waitingQueue.length) + (root._waitingQueue.shift())(); + if (root._waitingFor) + store.get(-Infinity).onsuccess = spin; + }()); + } + var currentWaitPromise = root._waitingFor; + return new DexiePromise((resolve, reject) => { + promise.then(res => root._waitingQueue.push(wrap(resolve.bind(null, res))), err => root._waitingQueue.push(wrap(reject.bind(null, err)))).finally(() => { + if (root._waitingFor === currentWaitPromise) { + root._waitingFor = null; + } + }); + }); + } + abort() { + if (this.active) { + this.active = false; + if (this.idbtrans) + this.idbtrans.abort(); + this._reject(new exceptions.Abort()); + } + } + table(tableName) { + const memoizedTables = (this._memoizedTables || (this._memoizedTables = {})); + if (hasOwn(memoizedTables, tableName)) + return memoizedTables[tableName]; + const tableSchema = this.schema[tableName]; + if (!tableSchema) { + throw new exceptions.NotFound("Table " + tableName + " not part of transaction"); + } + const transactionBoundTable = new this.db.Table(tableName, tableSchema, this); + transactionBoundTable.core = this.db.core.table(tableName); + memoizedTables[tableName] = transactionBoundTable; + return transactionBoundTable; + } +} + +function createTransactionConstructor(db) { + return makeClassConstructor(Transaction.prototype, function Transaction(mode, storeNames, dbschema, chromeTransactionDurability, parent) { + this.db = db; + this.mode = mode; + this.storeNames = storeNames; + this.schema = dbschema; + this.chromeTransactionDurability = chromeTransactionDurability; + this.idbtrans = null; + this.on = Events(this, "complete", "error", "abort"); + this.parent = parent || null; + this.active = true; + this._reculock = 0; + this._blockedFuncs = []; + this._resolve = null; + this._reject = null; + this._waitingFor = null; + this._waitingQueue = null; + this._spinCount = 0; + this._completion = new DexiePromise((resolve, reject) => { + this._resolve = resolve; + this._reject = reject; + }); + this._completion.then(() => { + this.active = false; + this.on.complete.fire(); + }, e => { + var wasActive = this.active; + this.active = false; + this.on.error.fire(e); + this.parent ? + this.parent._reject(e) : + wasActive && this.idbtrans && this.idbtrans.abort(); + return rejection(e); + }); + }); +} + +function createIndexSpec(name, keyPath, unique, multi, auto, compound, isPrimKey) { + return { + name, + keyPath, + unique, + multi, + auto, + compound, + src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? "++" : "") + nameFromKeyPath(keyPath) + }; +} +function nameFromKeyPath(keyPath) { + return typeof keyPath === 'string' ? + keyPath : + keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : ""; +} + +function createTableSchema(name, primKey, indexes) { + return { + name, + primKey, + indexes, + mappedClass: null, + idxByName: arrayToObject(indexes, index => [index.name, index]) + }; +} + +function safariMultiStoreFix(storeNames) { + return storeNames.length === 1 ? storeNames[0] : storeNames; +} +let getMaxKey = (IdbKeyRange) => { + try { + IdbKeyRange.only([[]]); + getMaxKey = () => [[]]; + return [[]]; + } + catch (e) { + getMaxKey = () => maxString; + return maxString; + } +}; + +function getKeyExtractor(keyPath) { + if (keyPath == null) { + return () => undefined; + } + else if (typeof keyPath === 'string') { + return getSinglePathKeyExtractor(keyPath); + } + else { + return obj => getByKeyPath(obj, keyPath); + } +} +function getSinglePathKeyExtractor(keyPath) { + const split = keyPath.split('.'); + if (split.length === 1) { + return obj => obj[keyPath]; + } + else { + return obj => getByKeyPath(obj, keyPath); + } +} + +function arrayify(arrayLike) { + return [].slice.call(arrayLike); +} +let _id_counter = 0; +function getKeyPathAlias(keyPath) { + return keyPath == null ? + ":id" : + typeof keyPath === 'string' ? + keyPath : + `[${keyPath.join('+')}]`; +} +function createDBCore(db, IdbKeyRange, tmpTrans) { + function extractSchema(db, trans) { + const tables = arrayify(db.objectStoreNames); + return { + schema: { + name: db.name, + tables: tables.map(table => trans.objectStore(table)).map(store => { + const { keyPath, autoIncrement } = store; + const compound = isArray(keyPath); + const outbound = keyPath == null; + const indexByKeyPath = {}; + const result = { + name: store.name, + primaryKey: { + name: null, + isPrimaryKey: true, + outbound, + compound, + keyPath, + autoIncrement, + unique: true, + extractKey: getKeyExtractor(keyPath) + }, + indexes: arrayify(store.indexNames).map(indexName => store.index(indexName)) + .map(index => { + const { name, unique, multiEntry, keyPath } = index; + const compound = isArray(keyPath); + const result = { + name, + compound, + keyPath, + unique, + multiEntry, + extractKey: getKeyExtractor(keyPath) + }; + indexByKeyPath[getKeyPathAlias(keyPath)] = result; + return result; + }), + getIndexByKeyPath: (keyPath) => indexByKeyPath[getKeyPathAlias(keyPath)] + }; + indexByKeyPath[":id"] = result.primaryKey; + if (keyPath != null) { + indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey; + } + return result; + }) + }, + hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) && + !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) + }; + } + function makeIDBKeyRange(range) { + if (range.type === 3 ) + return null; + if (range.type === 4 ) + throw new Error("Cannot convert never type to IDBKeyRange"); + const { lower, upper, lowerOpen, upperOpen } = range; + const idbRange = lower === undefined ? + upper === undefined ? + null : + IdbKeyRange.upperBound(upper, !!upperOpen) : + upper === undefined ? + IdbKeyRange.lowerBound(lower, !!lowerOpen) : + IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen); + return idbRange; + } + function createDbCoreTable(tableSchema) { + const tableName = tableSchema.name; + function mutate({ trans, type, keys, values, range }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const outbound = store.keyPath == null; + const isAddOrPut = type === "put" || type === "add"; + if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange') + throw new Error("Invalid operation type: " + type); + const { length } = keys || values || { length: 1 }; + if (keys && values && keys.length !== values.length) { + throw new Error("Given keys array must have same length as given values array."); + } + if (length === 0) + return resolve({ numFailures: 0, failures: {}, results: [], lastResult: undefined }); + let req; + const reqs = []; + const failures = []; + let numFailures = 0; + const errorHandler = event => { + ++numFailures; + preventDefault(event); + }; + if (type === 'deleteRange') { + if (range.type === 4 ) + return resolve({ numFailures, failures, results: [], lastResult: undefined }); + if (range.type === 3 ) + reqs.push(req = store.clear()); + else + reqs.push(req = store.delete(makeIDBKeyRange(range))); + } + else { + const [args1, args2] = isAddOrPut ? + outbound ? + [values, keys] : + [values, null] : + [keys, null]; + if (isAddOrPut) { + for (let i = 0; i < length; ++i) { + reqs.push(req = (args2 && args2[i] !== undefined ? + store[type](args1[i], args2[i]) : + store[type](args1[i]))); + req.onerror = errorHandler; + } + } + else { + for (let i = 0; i < length; ++i) { + reqs.push(req = store[type](args1[i])); + req.onerror = errorHandler; + } + } + } + const done = event => { + const lastResult = event.target.result; + reqs.forEach((req, i) => req.error != null && (failures[i] = req.error)); + resolve({ + numFailures, + failures, + results: type === "delete" ? keys : reqs.map(req => req.result), + lastResult + }); + }; + req.onerror = event => { + errorHandler(event); + done(event); + }; + req.onsuccess = done; + }); + } + function openCursor({ trans, values, query, reverse, unique }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const { index, range } = query; + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? + store : + store.index(index.name); + const direction = reverse ? + unique ? + "prevunique" : + "prev" : + unique ? + "nextunique" : + "next"; + const req = values || !('openKeyCursor' in source) ? + source.openCursor(makeIDBKeyRange(range), direction) : + source.openKeyCursor(makeIDBKeyRange(range), direction); + req.onerror = eventRejectHandler(reject); + req.onsuccess = wrap(ev => { + const cursor = req.result; + if (!cursor) { + resolve(null); + return; + } + cursor.___id = ++_id_counter; + cursor.done = false; + const _cursorContinue = cursor.continue.bind(cursor); + let _cursorContinuePrimaryKey = cursor.continuePrimaryKey; + if (_cursorContinuePrimaryKey) + _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor); + const _cursorAdvance = cursor.advance.bind(cursor); + const doThrowCursorIsNotStarted = () => { throw new Error("Cursor not started"); }; + const doThrowCursorIsStopped = () => { throw new Error("Cursor not stopped"); }; + cursor.trans = trans; + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted; + cursor.fail = wrap(reject); + cursor.next = function () { + let gotOne = 1; + return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this); + }; + cursor.start = (callback) => { + const iterationPromise = new Promise((resolveIteration, rejectIteration) => { + resolveIteration = wrap(resolveIteration); + req.onerror = eventRejectHandler(rejectIteration); + cursor.fail = rejectIteration; + cursor.stop = value => { + cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped; + resolveIteration(value); + }; + }); + const guardedCallback = () => { + if (req.result) { + try { + callback(); + } + catch (err) { + cursor.fail(err); + } + } + else { + cursor.done = true; + cursor.start = () => { throw new Error("Cursor behind last entry"); }; + cursor.stop(); + } + }; + req.onsuccess = wrap(ev => { + req.onsuccess = guardedCallback; + guardedCallback(); + }); + cursor.continue = _cursorContinue; + cursor.continuePrimaryKey = _cursorContinuePrimaryKey; + cursor.advance = _cursorAdvance; + guardedCallback(); + return iterationPromise; + }; + resolve(cursor); + }, reject); + }); + } + function query(hasGetAll) { + return (request) => { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const { trans, values, limit, query } = request; + const nonInfinitLimit = limit === Infinity ? undefined : limit; + const { index, range } = query; + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const idbKeyRange = makeIDBKeyRange(range); + if (limit === 0) + return resolve({ result: [] }); + if (hasGetAll) { + const req = values ? + source.getAll(idbKeyRange, nonInfinitLimit) : + source.getAllKeys(idbKeyRange, nonInfinitLimit); + req.onsuccess = event => resolve({ result: event.target.result }); + req.onerror = eventRejectHandler(reject); + } + else { + let count = 0; + const req = values || !('openKeyCursor' in source) ? + source.openCursor(idbKeyRange) : + source.openKeyCursor(idbKeyRange); + const result = []; + req.onsuccess = event => { + const cursor = req.result; + if (!cursor) + return resolve({ result }); + result.push(values ? cursor.value : cursor.primaryKey); + if (++count === limit) + return resolve({ result }); + cursor.continue(); + }; + req.onerror = eventRejectHandler(reject); + } + }); + }; + } + return { + name: tableName, + schema: tableSchema, + mutate, + getMany({ trans, keys }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const length = keys.length; + const result = new Array(length); + let keyCount = 0; + let callbackCount = 0; + let req; + const successHandler = event => { + const req = event.target; + if ((result[req._pos] = req.result) != null) + ; + if (++callbackCount === keyCount) + resolve(result); + }; + const errorHandler = eventRejectHandler(reject); + for (let i = 0; i < length; ++i) { + const key = keys[i]; + if (key != null) { + req = store.get(keys[i]); + req._pos = i; + req.onsuccess = successHandler; + req.onerror = errorHandler; + ++keyCount; + } + } + if (keyCount === 0) + resolve(result); + }); + }, + get({ trans, key }) { + return new Promise((resolve, reject) => { + resolve = wrap(resolve); + const store = trans.objectStore(tableName); + const req = store.get(key); + req.onsuccess = event => resolve(event.target.result); + req.onerror = eventRejectHandler(reject); + }); + }, + query: query(hasGetAll), + openCursor, + count({ query, trans }) { + const { index, range } = query; + return new Promise((resolve, reject) => { + const store = trans.objectStore(tableName); + const source = index.isPrimaryKey ? store : store.index(index.name); + const idbKeyRange = makeIDBKeyRange(range); + const req = idbKeyRange ? source.count(idbKeyRange) : source.count(); + req.onsuccess = wrap(ev => resolve(ev.target.result)); + req.onerror = eventRejectHandler(reject); + }); + } + }; + } + const { schema, hasGetAll } = extractSchema(db, tmpTrans); + const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema)); + const tableMap = {}; + tables.forEach(table => tableMap[table.name] = table); + return { + stack: "dbcore", + transaction: db.transaction.bind(db), + table(name) { + const result = tableMap[name]; + if (!result) + throw new Error(`Table '${name}' not found`); + return tableMap[name]; + }, + MIN_KEY: -Infinity, + MAX_KEY: getMaxKey(IdbKeyRange), + schema + }; +} + +function createMiddlewareStack(stackImpl, middlewares) { + return middlewares.reduce((down, { create }) => ({ ...down, ...create(down) }), stackImpl); +} +function createMiddlewareStacks(middlewares, idbdb, { IDBKeyRange, indexedDB }, tmpTrans) { + const dbcore = createMiddlewareStack(createDBCore(idbdb, IDBKeyRange, tmpTrans), middlewares.dbcore); + return { + dbcore + }; +} +function generateMiddlewareStacks(db, tmpTrans) { + const idbdb = tmpTrans.db; + const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans); + db.core = stacks.dbcore; + db.tables.forEach(table => { + const tableName = table.name; + if (db.core.schema.tables.some(tbl => tbl.name === tableName)) { + table.core = db.core.table(tableName); + if (db[tableName] instanceof db.Table) { + db[tableName].core = table.core; + } + } + }); +} + +function setApiOnPlace(db, objs, tableNames, dbschema) { + tableNames.forEach(tableName => { + const schema = dbschema[tableName]; + objs.forEach(obj => { + const propDesc = getPropertyDescriptor(obj, tableName); + if (!propDesc || ("value" in propDesc && propDesc.value === undefined)) { + if (obj === db.Transaction.prototype || obj instanceof db.Transaction) { + setProp(obj, tableName, { + get() { return this.table(tableName); }, + set(value) { + defineProperty(this, tableName, { value, writable: true, configurable: true, enumerable: true }); + } + }); + } + else { + obj[tableName] = new db.Table(tableName, schema); + } + } + }); + }); +} +function removeTablesApi(db, objs) { + objs.forEach(obj => { + for (let key in obj) { + if (obj[key] instanceof db.Table) + delete obj[key]; + } + }); +} +function lowerVersionFirst(a, b) { + return a._cfg.version - b._cfg.version; +} +function runUpgraders(db, oldVersion, idbUpgradeTrans, reject) { + const globalSchema = db._dbSchema; + if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) { + globalSchema.$meta = createTableSchema("$meta", parseIndexSyntax("")[0], []); + db._storeNames.push('$meta'); + } + const trans = db._createTransaction('readwrite', db._storeNames, globalSchema); + trans.create(idbUpgradeTrans); + trans._completion.catch(reject); + const rejectTransaction = trans._reject.bind(trans); + const transless = PSD.transless || PSD; + newScope(() => { + PSD.trans = trans; + PSD.transless = transless; + if (oldVersion === 0) { + keys(globalSchema).forEach(tableName => { + createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes); + }); + generateMiddlewareStacks(db, idbUpgradeTrans); + DexiePromise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction); + } + else { + generateMiddlewareStacks(db, idbUpgradeTrans); + return getExistingVersion(db, trans, oldVersion) + .then(oldVersion => updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans)) + .catch(rejectTransaction); + } + }); +} +function patchCurrentVersion(db, idbUpgradeTrans) { + createMissingTables(db._dbSchema, idbUpgradeTrans); + if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) { + idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version'); + } + const globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans); + const diff = getSchemaDiff(globalSchema, db._dbSchema); + for (const tableChange of diff.change) { + if (tableChange.change.length || tableChange.recreate) { + console.warn(`Unable to patch indexes of table ${tableChange.name} because it has changes on the type of index or primary key.`); + return; + } + const store = idbUpgradeTrans.objectStore(tableChange.name); + tableChange.add.forEach(idx => { + if (debug) + console.debug(`Dexie upgrade patch: Creating missing index ${tableChange.name}.${idx.src}`); + addIndex(store, idx); + }); + } +} +function getExistingVersion(db, trans, oldVersion) { + if (trans.storeNames.includes('$meta')) { + return trans.table('$meta').get('version').then(metaVersion => { + return metaVersion != null ? metaVersion : oldVersion; + }); + } + else { + return DexiePromise.resolve(oldVersion); + } +} +function updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans) { + const queue = []; + const versions = db._versions; + let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans); + const versToRun = versions.filter(v => v._cfg.version >= oldVersion); + if (versToRun.length === 0) { + return DexiePromise.resolve(); + } + versToRun.forEach(version => { + queue.push(() => { + const oldSchema = globalSchema; + const newSchema = version._cfg.dbschema; + adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans); + adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans); + globalSchema = db._dbSchema = newSchema; + const diff = getSchemaDiff(oldSchema, newSchema); + diff.add.forEach(tuple => { + createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes); + }); + diff.change.forEach(change => { + if (change.recreate) { + throw new exceptions.Upgrade("Not yet support for changing primary key"); + } + else { + const store = idbUpgradeTrans.objectStore(change.name); + change.add.forEach(idx => addIndex(store, idx)); + change.change.forEach(idx => { + store.deleteIndex(idx.name); + addIndex(store, idx); + }); + change.del.forEach(idxName => store.deleteIndex(idxName)); + } + }); + const contentUpgrade = version._cfg.contentUpgrade; + if (contentUpgrade && version._cfg.version > oldVersion) { + generateMiddlewareStacks(db, idbUpgradeTrans); + trans._memoizedTables = {}; + let upgradeSchema = shallowClone(newSchema); + diff.del.forEach(table => { + upgradeSchema[table] = oldSchema[table]; + }); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema); + trans.schema = upgradeSchema; + const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade); + if (contentUpgradeIsAsync) { + incrementExpectedAwaits(); + } + let returnValue; + const promiseFollowed = DexiePromise.follow(() => { + returnValue = contentUpgrade(trans); + if (returnValue) { + if (contentUpgradeIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + } + }); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue) : promiseFollowed.then(() => returnValue)); + } + }); + queue.push(idbtrans => { + const newSchema = version._cfg.dbschema; + deleteRemovedTables(newSchema, idbtrans); + removeTablesApi(db, [db.Transaction.prototype]); + setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema); + trans.schema = db._dbSchema; + }); + queue.push(idbtrans => { + if (db.idbdb.objectStoreNames.contains('$meta')) { + if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) { + db.idbdb.deleteObjectStore('$meta'); + delete db._dbSchema.$meta; + db._storeNames = db._storeNames.filter(name => name !== '$meta'); + } + else { + idbtrans.objectStore('$meta').put(version._cfg.version, 'version'); + } + } + }); + }); + function runQueue() { + return queue.length ? DexiePromise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : + DexiePromise.resolve(); + } + return runQueue().then(() => { + createMissingTables(globalSchema, idbUpgradeTrans); + }); +} +function getSchemaDiff(oldSchema, newSchema) { + const diff = { + del: [], + add: [], + change: [] + }; + let table; + for (table in oldSchema) { + if (!newSchema[table]) + diff.del.push(table); + } + for (table in newSchema) { + const oldDef = oldSchema[table], newDef = newSchema[table]; + if (!oldDef) { + diff.add.push([table, newDef]); + } + else { + const change = { + name: table, + def: newDef, + recreate: false, + del: [], + add: [], + change: [] + }; + if (( + '' + (oldDef.primKey.keyPath || '')) !== ('' + (newDef.primKey.keyPath || '')) || + (oldDef.primKey.auto !== newDef.primKey.auto)) { + change.recreate = true; + diff.change.push(change); + } + else { + const oldIndexes = oldDef.idxByName; + const newIndexes = newDef.idxByName; + let idxName; + for (idxName in oldIndexes) { + if (!newIndexes[idxName]) + change.del.push(idxName); + } + for (idxName in newIndexes) { + const oldIdx = oldIndexes[idxName], newIdx = newIndexes[idxName]; + if (!oldIdx) + change.add.push(newIdx); + else if (oldIdx.src !== newIdx.src) + change.change.push(newIdx); + } + if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) { + diff.change.push(change); + } + } + } + } + return diff; +} +function createTable(idbtrans, tableName, primKey, indexes) { + const store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? + { keyPath: primKey.keyPath, autoIncrement: primKey.auto } : + { autoIncrement: primKey.auto }); + indexes.forEach(idx => addIndex(store, idx)); + return store; +} +function createMissingTables(newSchema, idbtrans) { + keys(newSchema).forEach(tableName => { + if (!idbtrans.db.objectStoreNames.contains(tableName)) { + if (debug) + console.debug('Dexie: Creating missing table', tableName); + createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes); + } + }); +} +function deleteRemovedTables(newSchema, idbtrans) { + [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName => newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName)); +} +function addIndex(store, idx) { + store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi }); +} +function buildGlobalSchema(db, idbdb, tmpTrans) { + const globalSchema = {}; + const dbStoreNames = slice(idbdb.objectStoreNames, 0); + dbStoreNames.forEach(storeName => { + const store = tmpTrans.objectStore(storeName); + let keyPath = store.keyPath; + const primKey = createIndexSpec(nameFromKeyPath(keyPath), keyPath || "", true, false, !!store.autoIncrement, keyPath && typeof keyPath !== "string", true); + const indexes = []; + for (let j = 0; j < store.indexNames.length; ++j) { + const idbindex = store.index(store.indexNames[j]); + keyPath = idbindex.keyPath; + var index = createIndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== "string", false); + indexes.push(index); + } + globalSchema[storeName] = createTableSchema(storeName, primKey, indexes); + }); + return globalSchema; +} +function readGlobalSchema(db, idbdb, tmpTrans) { + db.verno = idbdb.version / 10; + const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans); + db._storeNames = slice(idbdb.objectStoreNames, 0); + setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema); +} +function verifyInstalledSchema(db, tmpTrans) { + const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans); + const diff = getSchemaDiff(installedSchema, db._dbSchema); + return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length)); +} +function adjustToExistingIndexNames(db, schema, idbtrans) { + const storeNames = idbtrans.db.objectStoreNames; + for (let i = 0; i < storeNames.length; ++i) { + const storeName = storeNames[i]; + const store = idbtrans.objectStore(storeName); + db._hasGetAll = 'getAll' in store; + for (let j = 0; j < store.indexNames.length; ++j) { + const indexName = store.indexNames[j]; + const keyPath = store.index(indexName).keyPath; + const dexieName = typeof keyPath === 'string' ? keyPath : "[" + slice(keyPath).join('+') + "]"; + if (schema[storeName]) { + const indexSpec = schema[storeName].idxByName[dexieName]; + if (indexSpec) { + indexSpec.name = indexName; + delete schema[storeName].idxByName[dexieName]; + schema[storeName].idxByName[indexName] = indexSpec; + } + } + } + } + if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) && + !/(Chrome\/|Edge\/)/.test(navigator.userAgent) && + _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && + [].concat(navigator.userAgent.match(/Safari\/(\d*)/))[1] < 604) { + db._hasGetAll = false; + } +} +function parseIndexSyntax(primKeyAndIndexes) { + return primKeyAndIndexes.split(',').map((index, indexNum) => { + index = index.trim(); + const name = index.replace(/([&*]|\+\+)/g, ""); + const keyPath = /^\[/.test(name) ? name.match(/^\[(.*)\]$/)[1].split('+') : name; + return createIndexSpec(name, keyPath || null, /\&/.test(index), /\*/.test(index), /\+\+/.test(index), isArray(keyPath), indexNum === 0); + }); +} + +class Version { + _parseStoresSpec(stores, outSchema) { + keys(stores).forEach(tableName => { + if (stores[tableName] !== null) { + var indexes = parseIndexSyntax(stores[tableName]); + var primKey = indexes.shift(); + primKey.unique = true; + if (primKey.multi) + throw new exceptions.Schema("Primary key cannot be multi-valued"); + indexes.forEach(idx => { + if (idx.auto) + throw new exceptions.Schema("Only primary key can be marked as autoIncrement (++)"); + if (!idx.keyPath) + throw new exceptions.Schema("Index must have a name and cannot be an empty string"); + }); + outSchema[tableName] = createTableSchema(tableName, primKey, indexes); + } + }); + } + stores(stores) { + const db = this.db; + this._cfg.storesSource = this._cfg.storesSource ? + extend(this._cfg.storesSource, stores) : + stores; + const versions = db._versions; + const storesSpec = {}; + let dbschema = {}; + versions.forEach(version => { + extend(storesSpec, version._cfg.storesSource); + dbschema = (version._cfg.dbschema = {}); + version._parseStoresSpec(storesSpec, dbschema); + }); + db._dbSchema = dbschema; + removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]); + setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema); + db._storeNames = keys(dbschema); + return this; + } + upgrade(upgradeFunction) { + this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction); + return this; + } +} + +function createVersionConstructor(db) { + return makeClassConstructor(Version.prototype, function Version(versionNumber) { + this.db = db; + this._cfg = { + version: versionNumber, + storesSource: null, + dbschema: {}, + tables: {}, + contentUpgrade: null + }; + }); +} + +function getDbNamesTable(indexedDB, IDBKeyRange) { + let dbNamesDB = indexedDB["_dbNamesDB"]; + if (!dbNamesDB) { + dbNamesDB = indexedDB["_dbNamesDB"] = new Dexie$1(DBNAMES_DB, { + addons: [], + indexedDB, + IDBKeyRange, + }); + dbNamesDB.version(1).stores({ dbnames: "name" }); + } + return dbNamesDB.table("dbnames"); +} +function hasDatabasesNative(indexedDB) { + return indexedDB && typeof indexedDB.databases === "function"; +} +function getDatabaseNames({ indexedDB, IDBKeyRange, }) { + return hasDatabasesNative(indexedDB) + ? Promise.resolve(indexedDB.databases()).then((infos) => infos + .map((info) => info.name) + .filter((name) => name !== DBNAMES_DB)) + : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys(); +} +function _onDatabaseCreated({ indexedDB, IDBKeyRange }, name) { + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).put({ name }).catch(nop); +} +function _onDatabaseDeleted({ indexedDB, IDBKeyRange }, name) { + !hasDatabasesNative(indexedDB) && + name !== DBNAMES_DB && + getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop); +} + +function vip(fn) { + return newScope(function () { + PSD.letThrough = true; + return fn(); + }); +} + +function idbReady() { + var isSafari = !navigator.userAgentData && + /Safari\//.test(navigator.userAgent) && + !/Chrom(e|ium)\//.test(navigator.userAgent); + if (!isSafari || !indexedDB.databases) + return Promise.resolve(); + var intervalId; + return new Promise(function (resolve) { + var tryIdb = function () { return indexedDB.databases().finally(resolve); }; + intervalId = setInterval(tryIdb, 100); + tryIdb(); + }).finally(function () { return clearInterval(intervalId); }); +} + +function isEmptyRange(node) { + return !("from" in node); +} +const RangeSet = function (fromOrTree, to) { + if (this) { + extend(this, arguments.length ? { d: 1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree } : { d: 0 }); + } + else { + const rv = new RangeSet(); + if (fromOrTree && ("d" in fromOrTree)) { + extend(rv, fromOrTree); + } + return rv; + } +}; +props(RangeSet.prototype, { + add(rangeSet) { + mergeRanges(this, rangeSet); + return this; + }, + addKey(key) { + addRange(this, key, key); + return this; + }, + addKeys(keys) { + keys.forEach(key => addRange(this, key, key)); + return this; + }, + [iteratorSymbol]() { + return getRangeSetIterator(this); + } +}); +function addRange(target, from, to) { + const diff = cmp(from, to); + if (isNaN(diff)) + return; + if (diff > 0) + throw RangeError(); + if (isEmptyRange(target)) + return extend(target, { from, to, d: 1 }); + const left = target.l; + const right = target.r; + if (cmp(to, target.from) < 0) { + left + ? addRange(left, from, to) + : (target.l = { from, to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.to) > 0) { + right + ? addRange(right, from, to) + : (target.r = { from, to, d: 1, l: null, r: null }); + return rebalance(target); + } + if (cmp(from, target.from) < 0) { + target.from = from; + target.l = null; + target.d = right ? right.d + 1 : 1; + } + if (cmp(to, target.to) > 0) { + target.to = to; + target.r = null; + target.d = target.l ? target.l.d + 1 : 1; + } + const rightWasCutOff = !target.r; + if (left && !target.l) { + mergeRanges(target, left); + } + if (right && rightWasCutOff) { + mergeRanges(target, right); + } +} +function mergeRanges(target, newSet) { + function _addRangeSet(target, { from, to, l, r }) { + addRange(target, from, to); + if (l) + _addRangeSet(target, l); + if (r) + _addRangeSet(target, r); + } + if (!isEmptyRange(newSet)) + _addRangeSet(target, newSet); +} +function rangesOverlap(rangeSet1, rangeSet2) { + const i1 = getRangeSetIterator(rangeSet2); + let nextResult1 = i1.next(); + if (nextResult1.done) + return false; + let a = nextResult1.value; + const i2 = getRangeSetIterator(rangeSet1); + let nextResult2 = i2.next(a.from); + let b = nextResult2.value; + while (!nextResult1.done && !nextResult2.done) { + if (cmp(b.from, a.to) <= 0 && cmp(b.to, a.from) >= 0) + return true; + cmp(a.from, b.from) < 0 + ? (a = (nextResult1 = i1.next(b.from)).value) + : (b = (nextResult2 = i2.next(a.from)).value); + } + return false; +} +function getRangeSetIterator(node) { + let state = isEmptyRange(node) ? null : { s: 0, n: node }; + return { + next(key) { + const keyProvided = arguments.length > 0; + while (state) { + switch (state.s) { + case 0: + state.s = 1; + if (keyProvided) { + while (state.n.l && cmp(key, state.n.from) < 0) + state = { up: state, n: state.n.l, s: 1 }; + } + else { + while (state.n.l) + state = { up: state, n: state.n.l, s: 1 }; + } + case 1: + state.s = 2; + if (!keyProvided || cmp(key, state.n.to) <= 0) + return { value: state.n, done: false }; + case 2: + if (state.n.r) { + state.s = 3; + state = { up: state, n: state.n.r, s: 0 }; + continue; + } + case 3: + state = state.up; + } + } + return { done: true }; + }, + }; +} +function rebalance(target) { + const diff = (target.r?.d || 0) - (target.l?.d || 0); + const r = diff > 1 ? "r" : diff < -1 ? "l" : ""; + if (r) { + const l = r === "r" ? "l" : "r"; + const rootClone = { ...target }; + const oldRootRight = target[r]; + target.from = oldRootRight.from; + target.to = oldRootRight.to; + target[r] = oldRootRight[r]; + rootClone[r] = oldRootRight[l]; + target[l] = rootClone; + rootClone.d = computeDepth(rootClone); + } + target.d = computeDepth(target); +} +function computeDepth({ r, l }) { + return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1; +} + +function extendObservabilitySet(target, newSet) { + keys(newSet).forEach(part => { + if (target[part]) + mergeRanges(target[part], newSet[part]); + else + target[part] = cloneSimpleObjectTree(newSet[part]); + }); + return target; +} + +function obsSetsOverlap(os1, os2) { + return os1.all || os2.all || Object.keys(os1).some((key) => os2[key] && rangesOverlap(os2[key], os1[key])); +} + +const cache = {}; + +let unsignaledParts = {}; +let isTaskEnqueued = false; +function signalSubscribersLazily(part, optimistic = false) { + extendObservabilitySet(unsignaledParts, part); + if (!isTaskEnqueued) { + isTaskEnqueued = true; + setTimeout(() => { + isTaskEnqueued = false; + const parts = unsignaledParts; + unsignaledParts = {}; + signalSubscribersNow(parts, false); + }, 0); + } +} +function signalSubscribersNow(updatedParts, deleteAffectedCacheEntries = false) { + const queriesToSignal = new Set(); + if (updatedParts.all) { + for (const tblCache of Object.values(cache)) { + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + else { + for (const key in updatedParts) { + const parts = /^idb\:\/\/(.*)\/(.*)\//.exec(key); + if (parts) { + const [, dbName, tableName] = parts; + const tblCache = cache[`idb://${dbName}/${tableName}`]; + if (tblCache) + collectTableSubscribers(tblCache, updatedParts, queriesToSignal, deleteAffectedCacheEntries); + } + } + } + queriesToSignal.forEach((requery) => requery()); +} +function collectTableSubscribers(tblCache, updatedParts, outQueriesToSignal, deleteAffectedCacheEntries) { + const updatedEntryLists = []; + for (const [indexName, entries] of Object.entries(tblCache.queries.query)) { + const filteredEntries = []; + for (const entry of entries) { + if (obsSetsOverlap(updatedParts, entry.obsSet)) { + entry.subscribers.forEach((requery) => outQueriesToSignal.add(requery)); + } + else if (deleteAffectedCacheEntries) { + filteredEntries.push(entry); + } + } + if (deleteAffectedCacheEntries) + updatedEntryLists.push([indexName, filteredEntries]); + } + if (deleteAffectedCacheEntries) { + for (const [indexName, filteredEntries] of updatedEntryLists) { + tblCache.queries.query[indexName] = filteredEntries; + } + } +} + +function dexieOpen(db) { + const state = db._state; + const { indexedDB } = db._deps; + if (state.isBeingOpened || db.idbdb) + return state.dbReadyPromise.then(() => state.dbOpenError ? + rejection(state.dbOpenError) : + db); + state.isBeingOpened = true; + state.dbOpenError = null; + state.openComplete = false; + const openCanceller = state.openCanceller; + let nativeVerToOpen = Math.round(db.verno * 10); + let schemaPatchMode = false; + function throwIfCancelled() { + if (state.openCanceller !== openCanceller) + throw new exceptions.DatabaseClosed('db.open() was cancelled'); + } + let resolveDbReady = state.dbReadyResolve, + upgradeTransaction = null, wasCreated = false; + const tryOpenDB = () => new DexiePromise((resolve, reject) => { + throwIfCancelled(); + if (!indexedDB) + throw new exceptions.MissingAPI(); + const dbName = db.name; + const req = state.autoSchema || !nativeVerToOpen ? + indexedDB.open(dbName) : + indexedDB.open(dbName, nativeVerToOpen); + if (!req) + throw new exceptions.MissingAPI(); + req.onerror = eventRejectHandler(reject); + req.onblocked = wrap(db._fireOnBlocked); + req.onupgradeneeded = wrap(e => { + upgradeTransaction = req.transaction; + if (state.autoSchema && !db._options.allowEmptyDB) { + req.onerror = preventDefault; + upgradeTransaction.abort(); + req.result.close(); + const delreq = indexedDB.deleteDatabase(dbName); + delreq.onsuccess = delreq.onerror = wrap(() => { + reject(new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`)); + }); + } + else { + upgradeTransaction.onerror = eventRejectHandler(reject); + const oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; + wasCreated = oldVer < 1; + db.idbdb = req.result; + if (schemaPatchMode) { + patchCurrentVersion(db, upgradeTransaction); + } + runUpgraders(db, oldVer / 10, upgradeTransaction, reject); + } + }, reject); + req.onsuccess = wrap(() => { + upgradeTransaction = null; + const idbdb = db.idbdb = req.result; + const objectStoreNames = slice(idbdb.objectStoreNames); + if (objectStoreNames.length > 0) + try { + const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly'); + if (state.autoSchema) + readGlobalSchema(db, idbdb, tmpTrans); + else { + adjustToExistingIndexNames(db, db._dbSchema, tmpTrans); + if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) { + console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this.`); + idbdb.close(); + nativeVerToOpen = idbdb.version + 1; + schemaPatchMode = true; + return resolve(tryOpenDB()); + } + } + generateMiddlewareStacks(db, tmpTrans); + } + catch (e) { + } + connections.push(db); + idbdb.onversionchange = wrap(ev => { + state.vcFired = true; + db.on("versionchange").fire(ev); + }); + idbdb.onclose = wrap(ev => { + db.on("close").fire(ev); + }); + if (wasCreated) + _onDatabaseCreated(db._deps, dbName); + resolve(); + }, reject); + }).catch(err => { + switch (err?.name) { + case "UnknownError": + if (state.PR1398_maxLoop > 0) { + state.PR1398_maxLoop--; + console.warn('Dexie: Workaround for Chrome UnknownError on open()'); + return tryOpenDB(); + } + break; + case "VersionError": + if (nativeVerToOpen > 0) { + nativeVerToOpen = 0; + return tryOpenDB(); + } + break; + } + return DexiePromise.reject(err); + }); + return DexiePromise.race([ + openCanceller, + (typeof navigator === 'undefined' ? DexiePromise.resolve() : idbReady()).then(tryOpenDB) + ]).then(() => { + throwIfCancelled(); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(() => db.on.ready.fire(db.vip))).then(function fireRemainders() { + if (state.onReadyBeingFired.length > 0) { + let remainders = state.onReadyBeingFired.reduce(promisableChain, nop); + state.onReadyBeingFired = []; + return DexiePromise.resolve(vip(() => remainders(db.vip))).then(fireRemainders); + } + }); + }).finally(() => { + if (state.openCanceller === openCanceller) { + state.onReadyBeingFired = null; + state.isBeingOpened = false; + } + }).catch(err => { + state.dbOpenError = err; + try { + upgradeTransaction && upgradeTransaction.abort(); + } + catch { } + if (openCanceller === state.openCanceller) { + db._close(); + } + return rejection(err); + }).finally(() => { + state.openComplete = true; + resolveDbReady(); + }).then(() => { + if (wasCreated) { + const everything = {}; + db.tables.forEach(table => { + table.schema.indexes.forEach(idx => { + if (idx.name) + everything[`idb://${db.name}/${table.name}/${idx.name}`] = new RangeSet(-Infinity, [[[]]]); + }); + everything[`idb://${db.name}/${table.name}/`] = everything[`idb://${db.name}/${table.name}/:dels`] = new RangeSet(-Infinity, [[[]]]); + }); + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything); + signalSubscribersNow(everything, true); + } + return db; + }); +} + +function awaitIterator(iterator) { + var callNext = result => iterator.next(result), doThrow = error => iterator.throw(error), onSuccess = step(callNext), onError = step(doThrow); + function step(getNext) { + return (val) => { + var next = getNext(val), value = next.value; + return next.done ? value : + (!value || typeof value.then !== 'function' ? + isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : + value.then(onSuccess, onError)); + }; + } + return step(callNext)(); +} + +function extractTransactionArgs(mode, _tableArgs_, scopeFunc) { + var i = arguments.length; + if (i < 2) + throw new exceptions.InvalidArgument("Too few arguments"); + var args = new Array(i - 1); + while (--i) + args[i - 1] = arguments[i]; + scopeFunc = args.pop(); + var tables = flatten(args); + return [mode, tables, scopeFunc]; +} +function enterTransactionScope(db, mode, storeNames, parentTransaction, scopeFunc) { + return DexiePromise.resolve().then(() => { + const transless = PSD.transless || PSD; + const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction); + trans.explicit = true; + const zoneProps = { + trans: trans, + transless: transless + }; + if (parentTransaction) { + trans.idbtrans = parentTransaction.idbtrans; + } + else { + try { + trans.create(); + trans.idbtrans._explicit = true; + db._state.PR1398_maxLoop = 3; + } + catch (ex) { + if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) { + console.warn('Dexie: Need to reopen db'); + db.close({ disableAutoOpen: false }); + return db.open().then(() => enterTransactionScope(db, mode, storeNames, null, scopeFunc)); + } + return rejection(ex); + } + } + const scopeFuncIsAsync = isAsyncFunction(scopeFunc); + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + let returnValue; + const promiseFollowed = DexiePromise.follow(() => { + returnValue = scopeFunc.call(trans, trans); + if (returnValue) { + if (scopeFuncIsAsync) { + var decrementor = decrementExpectedAwaits.bind(null, null); + returnValue.then(decrementor, decrementor); + } + else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') { + returnValue = awaitIterator(returnValue); + } + } + }, zoneProps); + return (returnValue && typeof returnValue.then === 'function' ? + DexiePromise.resolve(returnValue).then(x => trans.active ? + x + : rejection(new exceptions.PrematureCommit("Transaction committed too early. See http://bit.ly/2kdckMn"))) + : promiseFollowed.then(() => returnValue)).then(x => { + if (parentTransaction) + trans._resolve(); + return trans._completion.then(() => x); + }).catch(e => { + trans._reject(e); + return rejection(e); + }); + }); +} + +function pad(a, value, count) { + const result = isArray(a) ? a.slice() : [a]; + for (let i = 0; i < count; ++i) + result.push(value); + return result; +} +function createVirtualIndexMiddleware(down) { + return { + ...down, + table(tableName) { + const table = down.table(tableName); + const { schema } = table; + const indexLookup = {}; + const allVirtualIndexes = []; + function addVirtualIndexes(keyPath, keyTail, lowLevelIndex) { + const keyPathAlias = getKeyPathAlias(keyPath); + const indexList = (indexLookup[keyPathAlias] = indexLookup[keyPathAlias] || []); + const keyLength = keyPath == null ? 0 : typeof keyPath === 'string' ? 1 : keyPath.length; + const isVirtual = keyTail > 0; + const virtualIndex = { + ...lowLevelIndex, + name: isVirtual + ? `${keyPathAlias}(virtual-from:${lowLevelIndex.name})` + : lowLevelIndex.name, + lowLevelIndex, + isVirtual, + keyTail, + keyLength, + extractKey: getKeyExtractor(keyPath), + unique: !isVirtual && lowLevelIndex.unique + }; + indexList.push(virtualIndex); + if (!virtualIndex.isPrimaryKey) { + allVirtualIndexes.push(virtualIndex); + } + if (keyLength > 1) { + const virtualKeyPath = keyLength === 2 ? + keyPath[0] : + keyPath.slice(0, keyLength - 1); + addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex); + } + indexList.sort((a, b) => a.keyTail - b.keyTail); + return virtualIndex; + } + const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey); + indexLookup[":id"] = [primaryKey]; + for (const index of schema.indexes) { + addVirtualIndexes(index.keyPath, 0, index); + } + function findBestIndex(keyPath) { + const result = indexLookup[getKeyPathAlias(keyPath)]; + return result && result[0]; + } + function translateRange(range, keyTail) { + return { + type: range.type === 1 ? + 2 : + range.type, + lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail), + lowerOpen: true, + upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail), + upperOpen: true + }; + } + function translateRequest(req) { + const index = req.query.index; + return index.isVirtual ? { + ...req, + query: { + index: index.lowLevelIndex, + range: translateRange(req.query.range, index.keyTail) + } + } : req; + } + const result = { + ...table, + schema: { + ...schema, + primaryKey, + indexes: allVirtualIndexes, + getIndexByKeyPath: findBestIndex + }, + count(req) { + return table.count(translateRequest(req)); + }, + query(req) { + return table.query(translateRequest(req)); + }, + openCursor(req) { + const { keyTail, isVirtual, keyLength } = req.query.index; + if (!isVirtual) + return table.openCursor(req); + function createVirtualCursor(cursor) { + function _continue(key) { + key != null ? + cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) : + req.unique ? + cursor.continue(cursor.key.slice(0, keyLength) + .concat(req.reverse + ? down.MIN_KEY + : down.MAX_KEY, keyTail)) : + cursor.continue(); + } + const virtualCursor = Object.create(cursor, { + continue: { value: _continue }, + continuePrimaryKey: { + value(key, primaryKey) { + cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey); + } + }, + primaryKey: { + get() { + return cursor.primaryKey; + } + }, + key: { + get() { + const key = cursor.key; + return keyLength === 1 ? + key[0] : + key.slice(0, keyLength); + } + }, + value: { + get() { + return cursor.value; + } + } + }); + return virtualCursor; + } + return table.openCursor(translateRequest(req)) + .then(cursor => cursor && createVirtualCursor(cursor)); + } + }; + return result; + } + }; +} +const virtualIndexMiddleware = { + stack: "dbcore", + name: "VirtualIndexMiddleware", + level: 1, + create: createVirtualIndexMiddleware +}; + +function getObjectDiff(a, b, rv, prfx) { + rv = rv || {}; + prfx = prfx || ''; + keys(a).forEach((prop) => { + if (!hasOwn(b, prop)) { + rv[prfx + prop] = undefined; + } + else { + var ap = a[prop], bp = b[prop]; + if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) { + const apTypeName = toStringTag(ap); + const bpTypeName = toStringTag(bp); + if (apTypeName !== bpTypeName) { + rv[prfx + prop] = b[prop]; + } + else if (apTypeName === 'Object') { + getObjectDiff(ap, bp, rv, prfx + prop + '.'); + } + else if (ap !== bp) { + rv[prfx + prop] = b[prop]; + } + } + else if (ap !== bp) + rv[prfx + prop] = b[prop]; + } + }); + keys(b).forEach((prop) => { + if (!hasOwn(a, prop)) { + rv[prfx + prop] = b[prop]; + } + }); + return rv; +} + +function getEffectiveKeys(primaryKey, req) { + if (req.type === 'delete') + return req.keys; + return req.keys || req.values.map(primaryKey.extractKey); +} + +const hooksMiddleware = { + stack: "dbcore", + name: "HooksMiddleware", + level: 2, + create: (downCore) => ({ + ...downCore, + table(tableName) { + const downTable = downCore.table(tableName); + const { primaryKey } = downTable.schema; + const tableMiddleware = { + ...downTable, + mutate(req) { + const dxTrans = PSD.trans; + const { deleting, creating, updating } = dxTrans.table(tableName).hook; + switch (req.type) { + case 'add': + if (creating.fire === nop) + break; + return dxTrans._promise('readwrite', () => addPutOrDelete(req), true); + case 'put': + if (creating.fire === nop && updating.fire === nop) + break; + return dxTrans._promise('readwrite', () => addPutOrDelete(req), true); + case 'delete': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', () => addPutOrDelete(req), true); + case 'deleteRange': + if (deleting.fire === nop) + break; + return dxTrans._promise('readwrite', () => deleteRange(req), true); + } + return downTable.mutate(req); + function addPutOrDelete(req) { + const dxTrans = PSD.trans; + const keys = req.keys || getEffectiveKeys(primaryKey, req); + if (!keys) + throw new Error("Keys missing"); + req = req.type === 'add' || req.type === 'put' ? + { ...req, keys } : + { ...req }; + if (req.type !== 'delete') + req.values = [...req.values]; + if (req.keys) + req.keys = [...req.keys]; + return getExistingValues(downTable, req, keys).then(existingValues => { + const contexts = keys.map((key, i) => { + const existingValue = existingValues[i]; + const ctx = { onerror: null, onsuccess: null }; + if (req.type === 'delete') { + deleting.fire.call(ctx, key, existingValue, dxTrans); + } + else if (req.type === 'add' || existingValue === undefined) { + const generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans); + if (key == null && generatedPrimaryKey != null) { + key = generatedPrimaryKey; + req.keys[i] = key; + if (!primaryKey.outbound) { + setByKeyPath(req.values[i], primaryKey.keyPath, key); + } + } + } + else { + const objectDiff = getObjectDiff(existingValue, req.values[i]); + const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans); + if (additionalChanges) { + const requestedValue = req.values[i]; + Object.keys(additionalChanges).forEach(keyPath => { + if (hasOwn(requestedValue, keyPath)) { + requestedValue[keyPath] = additionalChanges[keyPath]; + } + else { + setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]); + } + }); + } + } + return ctx; + }); + return downTable.mutate(req).then(({ failures, results, numFailures, lastResult }) => { + for (let i = 0; i < keys.length; ++i) { + const primKey = results ? results[i] : keys[i]; + const ctx = contexts[i]; + if (primKey == null) { + ctx.onerror && ctx.onerror(failures[i]); + } + else { + ctx.onsuccess && ctx.onsuccess(req.type === 'put' && existingValues[i] ? + req.values[i] : + primKey + ); + } + } + return { failures, results, numFailures, lastResult }; + }).catch(error => { + contexts.forEach(ctx => ctx.onerror && ctx.onerror(error)); + return Promise.reject(error); + }); + }); + } + function deleteRange(req) { + return deleteNextChunk(req.trans, req.range, 10000); + } + function deleteNextChunk(trans, range, limit) { + return downTable.query({ trans, values: false, query: { index: primaryKey, range }, limit }) + .then(({ result }) => { + return addPutOrDelete({ type: 'delete', keys: result, trans }).then(res => { + if (res.numFailures > 0) + return Promise.reject(res.failures[0]); + if (result.length < limit) { + return { failures: [], numFailures: 0, lastResult: undefined }; + } + else { + return deleteNextChunk(trans, { ...range, lower: result[result.length - 1], lowerOpen: true }, limit); + } + }); + }); + } + } + }; + return tableMiddleware; + }, + }) +}; +function getExistingValues(table, req, effectiveKeys) { + return req.type === "add" + ? Promise.resolve([]) + : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: "immutable" }); +} + +function getFromTransactionCache(keys, cache, clone) { + try { + if (!cache) + return null; + if (cache.keys.length < keys.length) + return null; + const result = []; + for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) { + if (cmp(cache.keys[i], keys[j]) !== 0) + continue; + result.push(clone ? deepClone(cache.values[i]) : cache.values[i]); + ++j; + } + return result.length === keys.length ? result : null; + } + catch { + return null; + } +} +const cacheExistingValuesMiddleware = { + stack: "dbcore", + level: -1, + create: (core) => { + return { + table: (tableName) => { + const table = core.table(tableName); + return { + ...table, + getMany: (req) => { + if (!req.cache) { + return table.getMany(req); + } + const cachedResult = getFromTransactionCache(req.keys, req.trans["_cache"], req.cache === "clone"); + if (cachedResult) { + return DexiePromise.resolve(cachedResult); + } + return table.getMany(req).then((res) => { + req.trans["_cache"] = { + keys: req.keys, + values: req.cache === "clone" ? deepClone(res) : res, + }; + return res; + }); + }, + mutate: (req) => { + if (req.type !== "add") + req.trans["_cache"] = null; + return table.mutate(req); + }, + }; + }, + }; + }, +}; + +function isCachableContext(ctx, table) { + return (ctx.trans.mode === 'readonly' && + !!ctx.subscr && + !ctx.trans.explicit && + ctx.trans.db._options.cache !== 'disabled' && + !table.schema.primaryKey.outbound); +} + +function isCachableRequest(type, req) { + switch (type) { + case 'query': + return req.values && !req.unique; + case 'get': + return false; + case 'getMany': + return false; + case 'count': + return false; + case 'openCursor': + return false; + } +} + +const observabilityMiddleware = { + stack: "dbcore", + level: 0, + name: "Observability", + create: (core) => { + const dbName = core.schema.name; + const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY); + return { + ...core, + transaction: (stores, mode, options) => { + if (PSD.subscr && mode !== 'readonly') { + throw new exceptions.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${PSD.querier}`); + } + return core.transaction(stores, mode, options); + }, + table: (tableName) => { + const table = core.table(tableName); + const { schema } = table; + const { primaryKey, indexes } = schema; + const { extractKey, outbound } = primaryKey; + const indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter((index) => index.compound && index.keyPath.includes(primaryKey.keyPath)); + const tableClone = { + ...table, + mutate: (req) => { + const trans = req.trans; + const mutatedParts = req.mutatedParts || (req.mutatedParts = {}); + const getRangeSet = (indexName) => { + const part = `idb://${dbName}/${tableName}/${indexName}`; + return (mutatedParts[part] || + (mutatedParts[part] = new RangeSet())); + }; + const pkRangeSet = getRangeSet(""); + const delsRangeSet = getRangeSet(":dels"); + const { type } = req; + let [keys, newObjs] = req.type === "deleteRange" + ? [req.range] + : req.type === "delete" + ? [req.keys] + : req.values.length < 50 + ? [getEffectiveKeys(primaryKey, req).filter(id => id), req.values] + : []; + const oldCache = req.trans["_cache"]; + if (isArray(keys)) { + pkRangeSet.addKeys(keys); + const oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null; + if (!oldObjs) { + delsRangeSet.addKeys(keys); + } + if (oldObjs || newObjs) { + trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs); + } + } + else if (keys) { + const range = { from: keys.lower, to: keys.upper }; + delsRangeSet.add(range); + pkRangeSet.add(range); + } + else { + pkRangeSet.add(FULL_RANGE); + delsRangeSet.add(FULL_RANGE); + schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE)); + } + return table.mutate(req).then((res) => { + if (keys && (req.type === 'add' || req.type === 'put')) { + pkRangeSet.addKeys(res.results); + if (indexesWithAutoIncPK) { + indexesWithAutoIncPK.forEach(idx => { + const idxVals = req.values.map(v => idx.extractKey(v)); + const pkPos = idx.keyPath.findIndex(prop => prop === primaryKey.keyPath); + res.results.forEach(pk => idxVals[pkPos] = pk); + getRangeSet(idx.name).addKeys(idxVals); + }); + } + } + trans.mutatedParts = extendObservabilitySet(trans.mutatedParts || {}, mutatedParts); + return res; + }); + }, + }; + const getRange = ({ query: { index, range }, }) => [ + index, + new RangeSet(range.lower ?? core.MIN_KEY, range.upper ?? core.MAX_KEY), + ]; + const readSubscribers = { + get: (req) => [primaryKey, new RangeSet(req.key)], + getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)], + count: getRange, + query: getRange, + openCursor: getRange, + }; + keys(readSubscribers).forEach((method) => { + tableClone[method] = function (req) { + const { subscr } = PSD; + const isLiveQuery = !!subscr; + let cachable = isCachableContext(PSD, table) && isCachableRequest(method, req); + const obsSet = cachable + ? req.obsSet = {} + : subscr; + if (isLiveQuery) { + const getRangeSet = (indexName) => { + const part = `idb://${dbName}/${tableName}/${indexName}`; + return (obsSet[part] || + (obsSet[part] = new RangeSet())); + }; + const pkRangeSet = getRangeSet(""); + const delsRangeSet = getRangeSet(":dels"); + const [queriedIndex, queriedRanges] = readSubscribers[method](req); + if (method === 'query' && queriedIndex.isPrimaryKey && !req.values) { + delsRangeSet.add(queriedRanges); + } + else { + getRangeSet(queriedIndex.name || "").add(queriedRanges); + } + if (!queriedIndex.isPrimaryKey) { + if (method === "count") { + delsRangeSet.add(FULL_RANGE); + } + else { + const keysPromise = method === "query" && + outbound && + req.values && + table.query({ + ...req, + values: false, + }); + return table[method].apply(this, arguments).then((res) => { + if (method === "query") { + if (outbound && req.values) { + return keysPromise.then(({ result: resultingKeys }) => { + pkRangeSet.addKeys(resultingKeys); + return res; + }); + } + const pKeys = req.values + ? res.result.map(extractKey) + : res.result; + if (req.values) { + pkRangeSet.addKeys(pKeys); + } + else { + delsRangeSet.addKeys(pKeys); + } + } + else if (method === "openCursor") { + const cursor = res; + const wantValues = req.values; + return (cursor && + Object.create(cursor, { + key: { + get() { + delsRangeSet.addKey(cursor.primaryKey); + return cursor.key; + }, + }, + primaryKey: { + get() { + const pkey = cursor.primaryKey; + delsRangeSet.addKey(pkey); + return pkey; + }, + }, + value: { + get() { + wantValues && pkRangeSet.addKey(cursor.primaryKey); + return cursor.value; + }, + }, + })); + } + return res; + }); + } + } + } + return table[method].apply(this, arguments); + }; + }); + return tableClone; + }, + }; + }, +}; +function trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs) { + function addAffectedIndex(ix) { + const rangeSet = getRangeSet(ix.name || ""); + function extractKey(obj) { + return obj != null ? ix.extractKey(obj) : null; + } + const addKeyOrKeys = (key) => ix.multiEntry && isArray(key) + ? key.forEach(key => rangeSet.addKey(key)) + : rangeSet.addKey(key); + (oldObjs || newObjs).forEach((_, i) => { + const oldKey = oldObjs && extractKey(oldObjs[i]); + const newKey = newObjs && extractKey(newObjs[i]); + if (cmp(oldKey, newKey) !== 0) { + if (oldKey != null) + addKeyOrKeys(oldKey); + if (newKey != null) + addKeyOrKeys(newKey); + } + }); + } + schema.indexes.forEach(addAffectedIndex); +} + +function adjustOptimisticFromFailures(tblCache, req, res) { + if (res.numFailures === 0) + return req; + if (req.type === 'deleteRange') { + return null; + } + const numBulkOps = req.keys + ? req.keys.length + : 'values' in req && req.values + ? req.values.length + : 1; + if (res.numFailures === numBulkOps) { + return null; + } + const clone = { ...req }; + if (isArray(clone.keys)) { + clone.keys = clone.keys.filter((_, i) => !(i in res.failures)); + } + if ('values' in clone && isArray(clone.values)) { + clone.values = clone.values.filter((_, i) => !(i in res.failures)); + } + return clone; +} + +function isAboveLower(key, range) { + return range.lower === undefined + ? true + : range.lowerOpen + ? cmp(key, range.lower) > 0 + : cmp(key, range.lower) >= 0; +} +function isBelowUpper(key, range) { + return range.upper === undefined + ? true + : range.upperOpen + ? cmp(key, range.upper) < 0 + : cmp(key, range.upper) <= 0; +} +function isWithinRange(key, range) { + return isAboveLower(key, range) && isBelowUpper(key, range); +} + +function applyOptimisticOps(result, req, ops, table, cacheEntry, immutable) { + if (!ops || ops.length === 0) + return result; + const index = req.query.index; + const { multiEntry } = index; + const queryRange = req.query.range; + const primaryKey = table.schema.primaryKey; + const extractPrimKey = primaryKey.extractKey; + const extractIndex = index.extractKey; + const extractLowLevelIndex = (index.lowLevelIndex || index).extractKey; + let finalResult = ops.reduce((result, op) => { + let modifedResult = result; + const includedValues = op.type === 'add' || op.type === 'put' + ? op.values.filter((v) => { + const key = extractIndex(v); + return multiEntry && isArray(key) + ? key.some((k) => isWithinRange(k, queryRange)) + : isWithinRange(key, queryRange); + }).map(v => { + v = deepClone(v); + if (immutable) + Object.freeze(v); + return v; + }) + : []; + switch (op.type) { + case 'add': + modifedResult = result.concat(req.values + ? includedValues + : includedValues.map((v) => extractPrimKey(v))); + break; + case 'put': + const keySet = new RangeSet().addKeys(op.values.map((v) => extractPrimKey(v))); + modifedResult = result + .filter((item) => { + const key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keySet); + }) + .concat(req.values + ? includedValues + : includedValues.map((v) => extractPrimKey(v))); + break; + case 'delete': + const keysToDelete = new RangeSet().addKeys(op.keys); + modifedResult = result.filter((item) => { + const key = req.values ? extractPrimKey(item) : item; + return !rangesOverlap(new RangeSet(key), keysToDelete); + }); + break; + case 'deleteRange': + const range = op.range; + modifedResult = result.filter((item) => !isWithinRange(extractPrimKey(item), range)); + break; + } + return modifedResult; + }, result); + if (finalResult === result) + return result; + finalResult.sort((a, b) => cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) || + cmp(extractPrimKey(a), extractPrimKey(b))); + if (req.limit && req.limit < Infinity) { + if (finalResult.length > req.limit) { + finalResult.length = req.limit; + } + else if (result.length === req.limit && finalResult.length < req.limit) { + cacheEntry.dirty = true; + } + } + return immutable ? Object.freeze(finalResult) : finalResult; +} + +function areRangesEqual(r1, r2) { + return (cmp(r1.lower, r2.lower) === 0 && + cmp(r1.upper, r2.upper) === 0 && + !!r1.lowerOpen === !!r2.lowerOpen && + !!r1.upperOpen === !!r2.upperOpen); +} + +function compareLowers(lower1, lower2, lowerOpen1, lowerOpen2) { + if (lower1 === undefined) + return lower2 !== undefined ? -1 : 0; + if (lower2 === undefined) + return 1; + const c = cmp(lower1, lower2); + if (c === 0) { + if (lowerOpen1 && lowerOpen2) + return 0; + if (lowerOpen1) + return 1; + if (lowerOpen2) + return -1; + } + return c; +} +function compareUppers(upper1, upper2, upperOpen1, upperOpen2) { + if (upper1 === undefined) + return upper2 !== undefined ? 1 : 0; + if (upper2 === undefined) + return -1; + const c = cmp(upper1, upper2); + if (c === 0) { + if (upperOpen1 && upperOpen2) + return 0; + if (upperOpen1) + return -1; + if (upperOpen2) + return 1; + } + return c; +} +function isSuperRange(r1, r2) { + return (compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 && + compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0); +} + +function findCompatibleQuery(dbName, tableName, type, req) { + const tblCache = cache[`idb://${dbName}/${tableName}`]; + if (!tblCache) + return []; + const queries = tblCache.queries[type]; + if (!queries) + return [null, false, tblCache, null]; + const indexName = req.query ? req.query.index.name : null; + const entries = queries[indexName || '']; + if (!entries) + return [null, false, tblCache, null]; + switch (type) { + case 'query': + const equalEntry = entries.find((entry) => entry.req.limit === req.limit && + entry.req.values === req.values && + areRangesEqual(entry.req.query.range, req.query.range)); + if (equalEntry) + return [ + equalEntry, + true, + tblCache, + entries, + ]; + const superEntry = entries.find((entry) => { + const limit = 'limit' in entry.req ? entry.req.limit : Infinity; + return (limit >= req.limit && + (req.values ? entry.req.values : true) && + isSuperRange(entry.req.query.range, req.query.range)); + }); + return [superEntry, false, tblCache, entries]; + case 'count': + const countQuery = entries.find((entry) => areRangesEqual(entry.req.query.range, req.query.range)); + return [countQuery, !!countQuery, tblCache, entries]; + } +} + +function subscribeToCacheEntry(cacheEntry, container, requery, signal) { + cacheEntry.subscribers.add(requery); + signal.addEventListener("abort", () => { + cacheEntry.subscribers.delete(requery); + if (cacheEntry.subscribers.size === 0) { + enqueForDeletion(cacheEntry, container); + } + }); +} +function enqueForDeletion(cacheEntry, container) { + setTimeout(() => { + if (cacheEntry.subscribers.size === 0) { + delArrayItem(container, cacheEntry); + } + }, 3000); +} + +const cacheMiddleware = { + stack: 'dbcore', + level: 0, + name: 'Cache', + create: (core) => { + const dbName = core.schema.name; + const coreMW = { + ...core, + transaction: (stores, mode, options) => { + const idbtrans = core.transaction(stores, mode, options); + if (mode === 'readwrite') { + const ac = new AbortController(); + const { signal } = ac; + const endTransaction = (wasCommitted) => () => { + ac.abort(); + if (mode === 'readwrite') { + const affectedSubscribers = new Set(); + for (const storeName of stores) { + const tblCache = cache[`idb://${dbName}/${storeName}`]; + if (tblCache) { + const table = core.table(storeName); + const ops = tblCache.optimisticOps.filter((op) => op.trans === idbtrans); + if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) { + for (const entries of Object.values(tblCache.queries.query)) { + for (const entry of entries.slice()) { + if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) { + delArrayItem(entries, entry); + entry.subscribers.forEach((requery) => affectedSubscribers.add(requery)); + } + } + } + } + else if (ops.length > 0) { + tblCache.optimisticOps = tblCache.optimisticOps.filter((op) => op.trans !== idbtrans); + for (const entries of Object.values(tblCache.queries.query)) { + for (const entry of entries.slice()) { + if (entry.res != null && + idbtrans.mutatedParts +) { + if (wasCommitted && !entry.dirty) { + const freezeResults = Object.isFrozen(entry.res); + const modRes = applyOptimisticOps(entry.res, entry.req, ops, table, entry, freezeResults); + if (entry.dirty) { + delArrayItem(entries, entry); + entry.subscribers.forEach((requery) => affectedSubscribers.add(requery)); + } + else if (modRes !== entry.res) { + entry.res = modRes; + entry.promise = DexiePromise.resolve({ result: modRes }); + } + } + else { + if (entry.dirty) { + delArrayItem(entries, entry); + } + entry.subscribers.forEach((requery) => affectedSubscribers.add(requery)); + } + } + } + } + } + } + } + affectedSubscribers.forEach((requery) => requery()); + } + }; + idbtrans.addEventListener('abort', endTransaction(false), { + signal, + }); + idbtrans.addEventListener('error', endTransaction(false), { + signal, + }); + idbtrans.addEventListener('complete', endTransaction(true), { + signal, + }); + } + return idbtrans; + }, + table(tableName) { + const downTable = core.table(tableName); + const primKey = downTable.schema.primaryKey; + const tableMW = { + ...downTable, + mutate(req) { + const trans = PSD.trans; + if (primKey.outbound || + trans.db._options.cache === 'disabled' || + trans.explicit + ) { + return downTable.mutate(req); + } + const tblCache = cache[`idb://${dbName}/${tableName}`]; + if (!tblCache) + return downTable.mutate(req); + const promise = downTable.mutate(req); + if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(key => key == null))) { + promise.then((res) => { + const reqWithResolvedKeys = { + ...req, + values: req.values.map((value, i) => { + const valueWithKey = primKey.keyPath?.includes('.') + ? deepClone(value) + : { + ...value, + }; + setByKeyPath(valueWithKey, primKey.keyPath, res.results[i]); + return valueWithKey; + }) + }; + const adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res); + tblCache.optimisticOps.push(adjustedReq); + queueMicrotask(() => req.mutatedParts && signalSubscribersLazily(req.mutatedParts)); + }); + } + else { + tblCache.optimisticOps.push(req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + promise.then((res) => { + if (res.numFailures > 0) { + delArrayItem(tblCache.optimisticOps, req); + const adjustedReq = adjustOptimisticFromFailures(tblCache, req, res); + if (adjustedReq) { + tblCache.optimisticOps.push(adjustedReq); + } + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + } + }); + promise.catch(() => { + delArrayItem(tblCache.optimisticOps, req); + req.mutatedParts && signalSubscribersLazily(req.mutatedParts); + }); + } + return promise; + }, + query(req) { + if (!isCachableContext(PSD, downTable) || !isCachableRequest("query", req)) + return downTable.query(req); + const freezeResults = PSD.trans?.db._options.cache === 'immutable'; + const { requery, signal } = PSD; + let [cacheEntry, exactMatch, tblCache, container] = findCompatibleQuery(dbName, tableName, 'query', req); + if (cacheEntry && exactMatch) { + cacheEntry.obsSet = req.obsSet; + } + else { + const promise = downTable.query(req).then((res) => { + const result = res.result; + if (cacheEntry) + cacheEntry.res = result; + if (freezeResults) { + for (let i = 0, l = result.length; i < l; ++i) { + Object.freeze(result[i]); + } + Object.freeze(result); + } + else { + res.result = deepClone(result); + } + return res; + }).catch(error => { + if (container && cacheEntry) + delArrayItem(container, cacheEntry); + return Promise.reject(error); + }); + cacheEntry = { + obsSet: req.obsSet, + promise, + subscribers: new Set(), + type: 'query', + req, + dirty: false, + }; + if (container) { + container.push(cacheEntry); + } + else { + container = [cacheEntry]; + if (!tblCache) { + tblCache = cache[`idb://${dbName}/${tableName}`] = { + queries: { + query: {}, + count: {}, + }, + objs: new Map(), + optimisticOps: [], + unsignaledParts: {} + }; + } + tblCache.queries.query[req.query.index.name || ''] = container; + } + } + subscribeToCacheEntry(cacheEntry, container, requery, signal); + return cacheEntry.promise.then((res) => { + return { + result: applyOptimisticOps(res.result, req, tblCache?.optimisticOps, downTable, cacheEntry, freezeResults), + }; + }); + }, + }; + return tableMW; + }, + }; + return coreMW; + }, +}; + +function vipify(target, vipDb) { + return new Proxy(target, { + get(target, prop, receiver) { + if (prop === 'db') + return vipDb; + return Reflect.get(target, prop, receiver); + } + }); +} + +class Dexie$1 { + constructor(name, options) { + this._middlewares = {}; + this.verno = 0; + const deps = Dexie$1.dependencies; + this._options = options = { + addons: Dexie$1.addons, + autoOpen: true, + indexedDB: deps.indexedDB, + IDBKeyRange: deps.IDBKeyRange, + cache: 'cloned', + ...options + }; + this._deps = { + indexedDB: options.indexedDB, + IDBKeyRange: options.IDBKeyRange + }; + const { addons, } = options; + this._dbSchema = {}; + this._versions = []; + this._storeNames = []; + this._allTables = {}; + this.idbdb = null; + this._novip = this; + const state = { + dbOpenError: null, + isBeingOpened: false, + onReadyBeingFired: null, + openComplete: false, + dbReadyResolve: nop, + dbReadyPromise: null, + cancelOpen: nop, + openCanceller: null, + autoSchema: true, + PR1398_maxLoop: 3, + autoOpen: options.autoOpen, + }; + state.dbReadyPromise = new DexiePromise(resolve => { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise((_, reject) => { + state.cancelOpen = reject; + }); + this._state = state; + this.name = name; + this.on = Events(this, "populate", "blocked", "versionchange", "close", { ready: [promisableChain, nop] }); + this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => { + return (subscriber, bSticky) => { + Dexie$1.vip(() => { + const state = this._state; + if (state.openComplete) { + if (!state.dbOpenError) + DexiePromise.resolve().then(subscriber); + if (bSticky) + subscribe(subscriber); + } + else if (state.onReadyBeingFired) { + state.onReadyBeingFired.push(subscriber); + if (bSticky) + subscribe(subscriber); + } + else { + subscribe(subscriber); + const db = this; + if (!bSticky) + subscribe(function unsubscribe() { + db.on.ready.unsubscribe(subscriber); + db.on.ready.unsubscribe(unsubscribe); + }); + } + }); + }; + }); + this.Collection = createCollectionConstructor(this); + this.Table = createTableConstructor(this); + this.Transaction = createTransactionConstructor(this); + this.Version = createVersionConstructor(this); + this.WhereClause = createWhereClauseConstructor(this); + this.on("versionchange", ev => { + if (ev.newVersion > 0) + console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`); + else + console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`); + this.close({ disableAutoOpen: false }); + }); + this.on("blocked", ev => { + if (!ev.newVersion || ev.newVersion < ev.oldVersion) + console.warn(`Dexie.delete('${this.name}') was blocked`); + else + console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`); + }); + this._maxKey = getMaxKey(options.IDBKeyRange); + this._createTransaction = (mode, storeNames, dbschema, parentTransaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction); + this._fireOnBlocked = ev => { + this.on("blocked").fire(ev); + connections + .filter(c => c.name === this.name && c !== this && !c._state.vcFired) + .map(c => c.on("versionchange").fire(ev)); + }; + this.use(cacheExistingValuesMiddleware); + this.use(cacheMiddleware); + this.use(observabilityMiddleware); + this.use(virtualIndexMiddleware); + this.use(hooksMiddleware); + const vipDB = new Proxy(this, { + get: (_, prop, receiver) => { + if (prop === '_vip') + return true; + if (prop === 'table') + return (tableName) => vipify(this.table(tableName), vipDB); + const rv = Reflect.get(_, prop, receiver); + if (rv instanceof Table) + return vipify(rv, vipDB); + if (prop === 'tables') + return rv.map(t => vipify(t, vipDB)); + if (prop === '_createTransaction') + return function () { + const tx = rv.apply(this, arguments); + return vipify(tx, vipDB); + }; + return rv; + } + }); + this.vip = vipDB; + addons.forEach(addon => addon(this)); + } + version(versionNumber) { + if (isNaN(versionNumber) || versionNumber < 0.1) + throw new exceptions.Type(`Given version is not a positive number`); + versionNumber = Math.round(versionNumber * 10) / 10; + if (this.idbdb || this._state.isBeingOpened) + throw new exceptions.Schema("Cannot add version when database is open"); + this.verno = Math.max(this.verno, versionNumber); + const versions = this._versions; + var versionInstance = versions.filter(v => v._cfg.version === versionNumber)[0]; + if (versionInstance) + return versionInstance; + versionInstance = new this.Version(versionNumber); + versions.push(versionInstance); + versions.sort(lowerVersionFirst); + versionInstance.stores({}); + this._state.autoSchema = false; + return versionInstance; + } + _whenReady(fn) { + return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new DexiePromise((resolve, reject) => { + if (this._state.openComplete) { + return reject(new exceptions.DatabaseClosed(this._state.dbOpenError)); + } + if (!this._state.isBeingOpened) { + if (!this._state.autoOpen) { + reject(new exceptions.DatabaseClosed()); + return; + } + this.open().catch(nop); + } + this._state.dbReadyPromise.then(resolve, reject); + }).then(fn); + } + use({ stack, create, level, name }) { + if (name) + this.unuse({ stack, name }); + const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []); + middlewares.push({ stack, create, level: level == null ? 10 : level, name }); + middlewares.sort((a, b) => a.level - b.level); + return this; + } + unuse({ stack, name, create }) { + if (stack && this._middlewares[stack]) { + this._middlewares[stack] = this._middlewares[stack].filter(mw => create ? mw.create !== create : + name ? mw.name !== name : + false); + } + return this; + } + open() { + return usePSD(globalPSD, + () => dexieOpen(this)); + } + _close() { + const state = this._state; + const idx = connections.indexOf(this); + if (idx >= 0) + connections.splice(idx, 1); + if (this.idbdb) { + try { + this.idbdb.close(); + } + catch (e) { } + this.idbdb = null; + } + if (!state.isBeingOpened) { + state.dbReadyPromise = new DexiePromise(resolve => { + state.dbReadyResolve = resolve; + }); + state.openCanceller = new DexiePromise((_, reject) => { + state.cancelOpen = reject; + }); + } + } + close({ disableAutoOpen } = { disableAutoOpen: true }) { + const state = this._state; + if (disableAutoOpen) { + if (state.isBeingOpened) { + state.cancelOpen(new exceptions.DatabaseClosed()); + } + this._close(); + state.autoOpen = false; + state.dbOpenError = new exceptions.DatabaseClosed(); + } + else { + this._close(); + state.autoOpen = this._options.autoOpen || + state.isBeingOpened; + state.openComplete = false; + state.dbOpenError = null; + } + } + delete(closeOptions = { disableAutoOpen: true }) { + const hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; + const state = this._state; + return new DexiePromise((resolve, reject) => { + const doDelete = () => { + this.close(closeOptions); + var req = this._deps.indexedDB.deleteDatabase(this.name); + req.onsuccess = wrap(() => { + _onDatabaseDeleted(this._deps, this.name); + resolve(); + }); + req.onerror = eventRejectHandler(reject); + req.onblocked = this._fireOnBlocked; + }; + if (hasInvalidArguments) + throw new exceptions.InvalidArgument("Invalid closeOptions argument to db.delete()"); + if (state.isBeingOpened) { + state.dbReadyPromise.then(doDelete); + } + else { + doDelete(); + } + }); + } + backendDB() { + return this.idbdb; + } + isOpen() { + return this.idbdb !== null; + } + hasBeenClosed() { + const dbOpenError = this._state.dbOpenError; + return dbOpenError && (dbOpenError.name === 'DatabaseClosed'); + } + hasFailed() { + return this._state.dbOpenError !== null; + } + dynamicallyOpened() { + return this._state.autoSchema; + } + get tables() { + return keys(this._allTables).map(name => this._allTables[name]); + } + transaction() { + const args = extractTransactionArgs.apply(this, arguments); + return this._transaction.apply(this, args); + } + _transaction(mode, tables, scopeFunc) { + let parentTransaction = PSD.trans; + if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) + parentTransaction = null; + const onlyIfCompatible = mode.indexOf('?') !== -1; + mode = mode.replace('!', '').replace('?', ''); + let idbMode, storeNames; + try { + storeNames = tables.map(table => { + var storeName = table instanceof this.Table ? table.name : table; + if (typeof storeName !== 'string') + throw new TypeError("Invalid table argument to Dexie.transaction(). Only Table or String are allowed"); + return storeName; + }); + if (mode == "r" || mode === READONLY) + idbMode = READONLY; + else if (mode == "rw" || mode == READWRITE) + idbMode = READWRITE; + else + throw new exceptions.InvalidArgument("Invalid transaction mode: " + mode); + if (parentTransaction) { + if (parentTransaction.mode === READONLY && idbMode === READWRITE) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY"); + } + if (parentTransaction) { + storeNames.forEach(storeName => { + if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) { + if (onlyIfCompatible) { + parentTransaction = null; + } + else + throw new exceptions.SubTransaction("Table " + storeName + + " not included in parent transaction."); + } + }); + } + if (onlyIfCompatible && parentTransaction && !parentTransaction.active) { + parentTransaction = null; + } + } + } + catch (e) { + return parentTransaction ? + parentTransaction._promise(null, (_, reject) => { reject(e); }) : + rejection(e); + } + const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc); + return (parentTransaction ? + parentTransaction._promise(idbMode, enterTransaction, "lock") : + PSD.trans ? + usePSD(PSD.transless, () => this._whenReady(enterTransaction)) : + this._whenReady(enterTransaction)); + } + table(tableName) { + if (!hasOwn(this._allTables, tableName)) { + throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); + } + return this._allTables[tableName]; + } +} + +const symbolObservable = typeof Symbol !== "undefined" && "observable" in Symbol + ? Symbol.observable + : "@@observable"; +class Observable { + constructor(subscribe) { + this._subscribe = subscribe; + } + subscribe(x, error, complete) { + return this._subscribe(!x || typeof x === "function" ? { next: x, error, complete } : x); + } + [symbolObservable]() { + return this; + } +} + +let domDeps; +try { + domDeps = { + indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB, + IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange + }; +} +catch (e) { + domDeps = { indexedDB: null, IDBKeyRange: null }; +} + +function liveQuery(querier) { + let hasValue = false; + let currentValue; + const observable = new Observable((observer) => { + const scopeFuncIsAsync = isAsyncFunction(querier); + function execute(ctx) { + const wasRootExec = beginMicroTickScope(); + try { + if (scopeFuncIsAsync) { + incrementExpectedAwaits(); + } + let rv = newScope(querier, ctx); + if (scopeFuncIsAsync) { + rv = rv.finally(decrementExpectedAwaits); + } + return rv; + } + finally { + wasRootExec && endMicroTickScope(); + } + } + let closed = false; + let abortController; + let accumMuts = {}; + let currentObs = {}; + const subscription = { + get closed() { + return closed; + }, + unsubscribe: () => { + if (closed) + return; + closed = true; + if (abortController) + abortController.abort(); + if (startedListening) + globalEvents.storagemutated.unsubscribe(mutationListener); + }, + }; + observer.start && observer.start(subscription); + let startedListening = false; + const doQuery = () => execInGlobalContext(_doQuery); + function shouldNotify() { + return obsSetsOverlap(currentObs, accumMuts); + } + const mutationListener = (parts) => { + extendObservabilitySet(accumMuts, parts); + if (shouldNotify()) { + doQuery(); + } + }; + const _doQuery = () => { + if (closed || + !domDeps.indexedDB) + { + return; + } + accumMuts = {}; + const subscr = {}; + if (abortController) + abortController.abort(); + abortController = new AbortController(); + const ctx = { + subscr, + signal: abortController.signal, + requery: doQuery, + querier, + trans: null + }; + const ret = execute(ctx); + Promise.resolve(ret).then((result) => { + hasValue = true; + currentValue = result; + if (closed || ctx.signal.aborted) { + return; + } + accumMuts = {}; + currentObs = subscr; + if (!objectIsEmpty(currentObs) && !startedListening) { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener); + startedListening = true; + } + execInGlobalContext(() => !closed && observer.next && observer.next(result)); + }, (err) => { + hasValue = false; + if (!['DatabaseClosedError', 'AbortError'].includes(err?.name)) { + if (!closed) + execInGlobalContext(() => { + if (closed) + return; + observer.error && observer.error(err); + }); + } + }); + }; + setTimeout(doQuery, 0); + return subscription; + }); + observable.hasValue = () => hasValue; + observable.getValue = () => currentValue; + return observable; +} + +const Dexie = Dexie$1; +props(Dexie, { + ...fullNameExceptions, + delete(databaseName) { + const db = new Dexie(databaseName, { addons: [] }); + return db.delete(); + }, + exists(name) { + return new Dexie(name, { addons: [] }).open().then(db => { + db.close(); + return true; + }).catch('NoSuchDatabaseError', () => false); + }, + getDatabaseNames(cb) { + try { + return getDatabaseNames(Dexie.dependencies).then(cb); + } + catch { + return rejection(new exceptions.MissingAPI()); + } + }, + defineClass() { + function Class(content) { + extend(this, content); + } + return Class; + }, + ignoreTransaction(scopeFunc) { + return PSD.trans ? + usePSD(PSD.transless, scopeFunc) : + scopeFunc(); + }, + vip, + async: function (generatorFn) { + return function () { + try { + var rv = awaitIterator(generatorFn.apply(this, arguments)); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }; + }, + spawn: function (generatorFn, args, thiz) { + try { + var rv = awaitIterator(generatorFn.apply(thiz, args || [])); + if (!rv || typeof rv.then !== 'function') + return DexiePromise.resolve(rv); + return rv; + } + catch (e) { + return rejection(e); + } + }, + currentTransaction: { + get: () => PSD.trans || null + }, + waitFor: function (promiseOrFunction, optionalTimeout) { + const promise = DexiePromise.resolve(typeof promiseOrFunction === 'function' ? + Dexie.ignoreTransaction(promiseOrFunction) : + promiseOrFunction) + .timeout(optionalTimeout || 60000); + return PSD.trans ? + PSD.trans.waitFor(promise) : + promise; + }, + Promise: DexiePromise, + debug: { + get: () => debug, + set: value => { + setDebug(value); + } + }, + derive: derive, + extend: extend, + props: props, + override: override, + Events: Events, + on: globalEvents, + liveQuery, + extendObservabilitySet, + getByKeyPath: getByKeyPath, + setByKeyPath: setByKeyPath, + delByKeyPath: delByKeyPath, + shallowClone: shallowClone, + deepClone: deepClone, + getObjectDiff: getObjectDiff, + cmp, + asap: asap$1, + minKey: minKey, + addons: [], + connections: connections, + errnames: errnames, + dependencies: domDeps, + cache, + semVer: DEXIE_VERSION, + version: DEXIE_VERSION.split('.') + .map(n => parseInt(n)) + .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))), +}); +Dexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange); + +if (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') { + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => { + if (!propagatingLocally) { + let event; + event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, { + detail: updatedParts + }); + propagatingLocally = true; + dispatchEvent(event); + propagatingLocally = false; + } + }); + addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({ detail }) => { + if (!propagatingLocally) { + propagateLocally(detail); + } + }); +} +function propagateLocally(updateParts) { + let wasMe = propagatingLocally; + try { + propagatingLocally = true; + globalEvents.storagemutated.fire(updateParts); + signalSubscribersNow(updateParts, true); + } + finally { + propagatingLocally = wasMe; + } +} +let propagatingLocally = false; + +let bc; +let createBC = () => { }; +if (typeof BroadcastChannel !== 'undefined') { + createBC = () => { + bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME); + bc.onmessage = ev => ev.data && propagateLocally(ev.data); + }; + createBC(); + if (typeof bc.unref === 'function') { + bc.unref(); + } + globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => { + if (!propagatingLocally) { + bc.postMessage(changedParts); + } + }); +} + +if (typeof addEventListener !== 'undefined') { + addEventListener('pagehide', (event) => { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pagehide'); + bc?.close(); + for (const db of connections) { + db.close({ disableAutoOpen: false }); + } + } + }); + addEventListener('pageshow', (event) => { + if (!Dexie$1.disableBfCache && event.persisted) { + if (debug) + console.debug('Dexie: handling persisted pageshow'); + createBC(); + propagateLocally({ all: new RangeSet(-Infinity, [[]]) }); + } + }); +} + +function add(value) { + return new PropModification({ add: value }); +} + +function remove(value) { + return new PropModification({ remove: value }); +} + +function replacePrefix(a, b) { + return new PropModification({ replacePrefix: [a, b] }); +} + +DexiePromise.rejectionMapper = mapError; +setDebug(debug); + +export { Dexie$1 as Dexie, Entity, PropModSymbol, PropModification, RangeSet, add, cmp, Dexie$1 as default, liveQuery, mergeRanges, rangesOverlap, remove, replacePrefix }; +//# sourceMappingURL=dexie.mjs.map diff --git a/src/dexie/dist/modern/dexie.mjs.map b/src/dexie/dist/modern/dexie.mjs.map new file mode 100644 index 000000000..b9194d77e --- /dev/null +++ b/src/dexie/dist/modern/dexie.mjs.map @@ -0,0 +1 @@ +{"version":3,"file":"dexie.mjs","sources":["../../src/globals/global.ts","../../src/functions/utils.ts","../../src/errors/errors.js","../../src/functions/chaining-functions.js","../../src/helpers/debug.ts","../../src/helpers/promise.js","../../src/functions/temp-transaction.ts","../../src/globals/constants.ts","../../src/functions/combine.ts","../../src/dbcore/keyrange.ts","../../src/functions/workaround-undefined-primkey.ts","../../src/classes/entity/Entity.ts","../../src/functions/cmp.ts","../../src/classes/table/table.ts","../../src/helpers/Events.js","../../src/functions/make-class-constructor.ts","../../src/classes/table/table-constructor.ts","../../src/classes/collection/collection-helpers.ts","../../src/helpers/prop-modification.ts","../../src/classes/collection/collection.ts","../../src/classes/collection/collection-constructor.ts","../../src/functions/compare-functions.ts","../../src/classes/where-clause/where-clause-helpers.ts","../../src/classes/where-clause/where-clause.ts","../../src/classes/where-clause/where-clause-constructor.ts","../../src/functions/event-wrappers.ts","../../src/globals/global-events.ts","../../src/classes/transaction/transaction.ts","../../src/classes/transaction/transaction-constructor.ts","../../src/helpers/index-spec.ts","../../src/helpers/table-schema.ts","../../src/functions/quirks.ts","../../src/dbcore/get-key-extractor.ts","../../src/dbcore/dbcore-indexeddb.ts","../../src/classes/dexie/generate-middleware-stacks.ts","../../src/classes/version/schema-helpers.ts","../../src/classes/version/version.ts","../../src/classes/version/version-constructor.ts","../../src/helpers/database-enumerator.ts","../../src/classes/dexie/vip.ts","../../node_modules/.pnpm/safari-14-idb-fix@3.0.0/node_modules/safari-14-idb-fix/dist/index.js","../../src/helpers/rangeset.ts","../../src/live-query/extend-observability-set.ts","../../src/live-query/obs-sets-overlap.ts","../../src/live-query/cache/cache.ts","../../src/live-query/cache/signalSubscribers.ts","../../src/classes/dexie/dexie-open.ts","../../src/helpers/yield-support.ts","../../src/classes/dexie/transaction-helpers.ts","../../src/dbcore/virtual-index-middleware.ts","../../src/functions/get-object-diff.ts","../../src/dbcore/get-effective-keys.ts","../../src/hooks/hooks-middleware.ts","../../src/dbcore/cache-existing-values-middleware.ts","../../src/live-query/cache/is-cachable-context.ts","../../src/live-query/cache/is-cachable-request.ts","../../src/live-query/observability-middleware.ts","../../src/live-query/cache/adjust-optimistic-request-from-failures.ts","../../src/live-query/cache/is-within-range.ts","../../src/live-query/cache/apply-optimistic-ops.ts","../../src/live-query/cache/are-ranges-equal.ts","../../src/live-query/cache/is-super-range.ts","../../src/live-query/cache/find-compatible-query.ts","../../src/live-query/cache/subscribe-cachentry.ts","../../src/live-query/cache/cache-middleware.ts","../../src/helpers/vipify.ts","../../src/classes/dexie/dexie.ts","../../src/classes/observable/observable.ts","../../src/classes/dexie/dexie-dom-dependencies.ts","../../src/live-query/live-query.ts","../../src/classes/dexie/dexie-static-props.ts","../../src/live-query/propagate-locally.ts","../../src/live-query/enable-broadcast.ts","../../src/support-bfcache.ts","../../src/functions/propmods/add.ts","../../src/functions/propmods/remove.ts","../../src/functions/propmods/replace-prefix.ts","../../src/index.ts"],"sourcesContent":["declare var global;\nexport const _global: any =\n typeof globalThis !== 'undefined' ? globalThis :\n typeof self !== 'undefined' ? self :\n typeof window !== 'undefined' ? window :\n global;\n","import { _global } from \"../globals/global\";\nexport const keys = Object.keys;\nexport const isArray = Array.isArray;\nif (typeof Promise !== 'undefined' && !_global.Promise){\n // In jsdom, this it can be the case that Promise is not put on the global object.\n // If so, we need to patch the global object for the rest of the code to work as expected.\n // Other dexie code expects Promise to be on the global object (like normal browser environments)\n _global.Promise = Promise;\n}\nexport { _global }\n\nexport function extend(obj: T, extension: X): T & X {\n if (typeof extension !== 'object') return obj as T & X;\n keys(extension).forEach(function (key) {\n obj[key] = extension[key];\n });\n return obj as T & X;\n}\n\nexport const getProto = Object.getPrototypeOf;\nexport const _hasOwn = {}.hasOwnProperty;\nexport function hasOwn(obj, prop) {\n return _hasOwn.call(obj, prop);\n}\n\nexport function props (proto, extension) {\n if (typeof extension === 'function') extension = extension(getProto(proto));\n (typeof Reflect === \"undefined\" ? keys : Reflect.ownKeys)(extension).forEach(key => {\n setProp(proto, key, extension[key]);\n });\n}\n\nexport const defineProperty = Object.defineProperty;\n\nexport function setProp(obj, prop, functionOrGetSet, options?) {\n defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ?\n {get: functionOrGetSet.get, set: functionOrGetSet.set, configurable: true} :\n {value: functionOrGetSet, configurable: true, writable: true}, options));\n}\n\nexport function derive(Child) {\n return {\n from: function (Parent) {\n Child.prototype = Object.create(Parent.prototype);\n setProp(Child.prototype, \"constructor\", Child);\n return {\n extend: props.bind(null, Child.prototype)\n };\n }\n };\n}\n\nexport const getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nexport function getPropertyDescriptor(obj, prop) {\n const pd = getOwnPropertyDescriptor(obj, prop);\n let proto;\n return pd || (proto = getProto(obj)) && getPropertyDescriptor (proto, prop);\n}\n\nconst _slice = [].slice;\nexport function slice(args, start?, end?) {\n return _slice.call(args, start, end);\n}\n\nexport function override(origFunc, overridedFactory) {\n return overridedFactory(origFunc);\n}\n\nexport function assert (b) {\n if (!b) throw new Error(\"Assertion Failed\");\n}\n\nexport function asap(fn) {\n // @ts-ignore\n if (_global.setImmediate) setImmediate(fn); else setTimeout(fn, 0);\n}\n\nexport function getUniqueArray(a) {\n return a.filter((value, index, self) => self.indexOf(value) === index);\n}\n\n/** Generate an object (hash map) based on given array.\n * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to\n * instert on the resulting object for each item in the array. If this function returns a falsy value, the\n * current item wont affect the resulting object.\n */\nexport function arrayToObject (array: T[], extractor: (x:T, idx: number)=>[string, R]): {[name: string]: R} {\n return array.reduce((result, item, i) => {\n var nameAndValue = extractor(item, i);\n if (nameAndValue) result[nameAndValue[0]] = nameAndValue[1];\n return result;\n }, {});\n}\n\nexport function trycatcher(fn, reject) {\n return function () {\n try {\n fn.apply(this, arguments);\n } catch (e) {\n reject(e);\n }\n };\n}\n\nexport function tryCatch(fn: (...args: any[])=>void, onerror, args?) : void {\n try {\n fn.apply(null, args);\n } catch (ex) {\n onerror && onerror(ex);\n }\n}\n\nexport function getByKeyPath(obj, keyPath) {\n // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path\n if (typeof keyPath === 'string' && hasOwn(obj, keyPath)) return obj[keyPath]; // This line is moved from last to first for optimization purpose.\n if (!keyPath) return obj;\n if (typeof keyPath !== 'string') {\n var rv = [];\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n var val = getByKeyPath(obj, keyPath[i]);\n rv.push(val);\n }\n return rv;\n }\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var innerObj = obj[keyPath.substr(0, period)];\n return innerObj == null ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n }\n return undefined;\n}\n\nexport function setByKeyPath(obj, keyPath, value) {\n if (!obj || keyPath === undefined) return;\n if ('isFrozen' in Object && Object.isFrozen(obj)) return;\n if (typeof keyPath !== 'string' && 'length' in keyPath) {\n assert(typeof value !== 'string' && 'length' in value);\n for (var i = 0, l = keyPath.length; i < l; ++i) {\n setByKeyPath(obj, keyPath[i], value[i]);\n }\n } else {\n var period = keyPath.indexOf('.');\n if (period !== -1) {\n var currentKeyPath = keyPath.substr(0, period);\n var remainingKeyPath = keyPath.substr(period + 1);\n if (remainingKeyPath === \"\")\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(currentKeyPath))) obj.splice(currentKeyPath, 1);\n else delete obj[currentKeyPath];\n } else obj[currentKeyPath] = value;\n else {\n var innerObj = obj[currentKeyPath];\n if (!innerObj || !hasOwn(obj, currentKeyPath)) innerObj = (obj[currentKeyPath] = {});\n setByKeyPath(innerObj, remainingKeyPath, value);\n }\n } else {\n if (value === undefined) {\n if (isArray(obj) && !isNaN(parseInt(keyPath))) obj.splice(keyPath, 1);\n else delete obj[keyPath];\n } else obj[keyPath] = value;\n }\n }\n}\n\nexport function delByKeyPath(obj, keyPath) {\n if (typeof keyPath === 'string')\n setByKeyPath(obj, keyPath, undefined);\n else if ('length' in keyPath)\n [].map.call(keyPath, function(kp) {\n setByKeyPath(obj, kp, undefined);\n });\n}\n\nexport function shallowClone(obj) {\n var rv = {};\n for (var m in obj) {\n if (hasOwn(obj, m)) rv[m] = obj[m];\n }\n return rv;\n}\n\nconst concat = [].concat;\nexport function flatten (a: (T | T[])[]) : T[] {\n return concat.apply([], a);\n}\n\n//https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\nconst intrinsicTypeNames =\n \"BigUint64Array,BigInt64Array,Array,Boolean,String,Date,RegExp,Blob,File,FileList,FileSystemFileHandle,FileSystemDirectoryHandle,ArrayBuffer,DataView,Uint8ClampedArray,ImageBitmap,ImageData,Map,Set,CryptoKey\"\n .split(',').concat(\n flatten([8,16,32,64].map(num=>[\"Int\",\"Uint\",\"Float\"].map(t=>t+num+\"Array\")))\n ).filter(t=>_global[t]);\nconst intrinsicTypes = new Set(intrinsicTypeNames.map(t=>_global[t]));\n\n/** Deep clone a simple object tree.\n * \n * Copies object tree deeply, but does not deep-copy arrays,\n * typed arrays, Dates or other intrinsic types.\n * \n * Does not check for cyclic references.\n * \n * This function is 6 times faster than structuredClone() on chromium 111.\n * \n * This function can safely be used for cloning ObservabilitySets and RangeSets.\n * \n * @param o Object to clone\n * @returns Cloned object\n */\nexport function cloneSimpleObjectTree(o: T): T {\n const rv = {} as T;\n for (const k in o) if (hasOwn(o, k)) {\n const v = o[k];\n rv[k] = !v || typeof v !== 'object' || intrinsicTypes.has(v.constructor) ? v : cloneSimpleObjectTree(v);\n }\n return rv;\n}\n\nexport function objectIsEmpty(o: object) {\n for (const k in o) if (hasOwn(o, k)) return false;\n return true;\n}\n\nlet circularRefs: null | WeakMap = null;\n\n/** Deep clone an object or array.\n * \n * \n * @param any \n * @returns \n */\nexport function deepClone(any: T): T {\n circularRefs = new WeakMap();\n const rv = innerDeepClone(any);\n circularRefs = null;\n return rv;\n}\n\nfunction innerDeepClone(x: T): T {\n if (!x || typeof x !== 'object') return x;\n let rv = circularRefs.get(x); // Resolve circular references\n if (rv) return rv;\n if (isArray(x)) {\n rv = [];\n circularRefs.set(x, rv);\n for (var i = 0, l = x.length; i < l; ++i) {\n rv.push(innerDeepClone(x[i]));\n }\n } else if (intrinsicTypes.has(x.constructor)) {\n // For performance, we're less strict than structuredClone - we're only\n // cloning arrays and custom objects.\n // Typed arrays, Dates etc are not cloned.\n rv = x;\n } else {\n // We're nicer to custom classes than what structuredClone() is -\n // we preserve the proto of each object.\n const proto = getProto(x);\n rv = proto === Object.prototype ? {} : Object.create(proto);\n circularRefs.set(x, rv);\n for (var prop in x) {\n if (hasOwn(x, prop)) {\n rv[prop] = innerDeepClone(x[prop]);\n }\n }\n }\n return rv;\n}\n\nconst {toString} = {};\nexport function toStringTag(o: Object) {\n return toString.call(o).slice(8, -1);\n}\n\n// If first argument is iterable or array-like, return it as an array\nexport const iteratorSymbol = typeof Symbol !== 'undefined' ?\n Symbol.iterator :\n '@@iterator';\nexport const getIteratorOf = typeof iteratorSymbol === \"symbol\" ? function(x) {\n var i;\n return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () { return null; };\nexport const asyncIteratorSymbol = typeof Symbol !== 'undefined'\n ? Symbol.asyncIterator || Symbol.for(\"Symbol.asyncIterator\")\n : '@asyncIterator';\n\nexport function delArrayItem(a: any[], x: any) {\n const i = a.indexOf(x);\n if (i >= 0) a.splice(i, 1);\n return i >= 0;\n}\n\nexport const NO_CHAR_ARRAY = {};\n// Takes one or several arguments and returns an array based on the following criteras:\n// * If several arguments provided, return arguments converted to an array in a way that\n// still allows javascript engine to optimize the code.\n// * If single argument is an array, return a clone of it.\n// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special\n// case to the two bullets below.\n// * If single argument is an iterable, convert it to an array and return the resulting array.\n// * If single argument is array-like (has length of type number), convert it to an array.\nexport function getArrayOf (arrayLike) {\n var i, a, x, it;\n if (arguments.length === 1) {\n if (isArray(arrayLike)) return arrayLike.slice();\n if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') return [arrayLike];\n if ((it = getIteratorOf(arrayLike))) {\n a = [];\n while ((x = it.next()), !x.done) a.push(x.value);\n return a;\n }\n if (arrayLike == null) return [arrayLike];\n i = arrayLike.length;\n if (typeof i === 'number') {\n a = new Array(i);\n while (i--) a[i] = arrayLike[i];\n return a;\n }\n return [arrayLike];\n }\n i = arguments.length;\n a = new Array(i);\n while (i--) a[i] = arguments[i];\n return a;\n}\nexport const isAsyncFunction = typeof Symbol !== 'undefined'\n ? (fn: Function) => fn[Symbol.toStringTag] === 'AsyncFunction'\n : ()=>false;\n","import { derive, setProp } from '../functions/utils';\n\nvar dexieErrorNames = [\n 'Modify',\n 'Bulk',\n 'OpenFailed',\n 'VersionChange',\n 'Schema',\n 'Upgrade',\n 'InvalidTable',\n 'MissingAPI',\n 'NoSuchDatabase',\n 'InvalidArgument',\n 'SubTransaction',\n 'Unsupported',\n 'Internal',\n 'DatabaseClosed',\n 'PrematureCommit',\n 'ForeignAwait'\n];\n\nvar idbDomErrorNames = [\n 'Unknown',\n 'Constraint',\n 'Data',\n 'TransactionInactive',\n 'ReadOnly',\n 'Version',\n 'NotFound',\n 'InvalidState',\n 'InvalidAccess',\n 'Abort',\n 'Timeout',\n 'QuotaExceeded',\n 'Syntax',\n 'DataClone'\n];\n\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\n\nvar defaultTexts = {\n VersionChanged: \"Database version changed by other database connection\",\n DatabaseClosed: \"Database has been closed\",\n Abort: \"Transaction aborted\",\n TransactionInactive: \"Transaction has already completed or failed\",\n MissingAPI: \"IndexedDB API missing. Please visit https://tinyurl.com/y2uuvskb\"\n};\n\n//\n// DexieError - base class of all out exceptions.\n//\nexport function DexieError (name, msg) {\n // Reason we don't use ES6 classes is because:\n // 1. It bloats transpiled code and increases size of minified code.\n // 2. It doesn't give us much in this case.\n // 3. It would require sub classes to call super(), which\n // is not needed when deriving from Error.\n this.name = name;\n this.message = msg;\n}\n\nderive(DexieError).from(Error).extend({\n toString: function(){ return this.name + \": \" + this.message; }\n});\n\nfunction getMultiErrorMessage (msg, failures) {\n return msg + \". Errors: \" + Object.keys(failures)\n .map(key=>failures[key].toString())\n .filter((v,i,s)=>s.indexOf(v) === i) // Only unique error strings\n .join('\\n');\n}\n\n//\n// ModifyError - thrown in Collection.modify()\n// Specific constructor because it contains members failures and failedKeys.\n//\nexport function ModifyError (msg, failures, successCount, failedKeys) {\n this.failures = failures;\n this.failedKeys = failedKeys;\n this.successCount = successCount;\n this.message = getMultiErrorMessage(msg, failures);\n}\nderive(ModifyError).from(DexieError);\n\nexport function BulkError (msg, failures) {\n this.name = \"BulkError\";\n this.failures = Object.keys(failures).map(pos => failures[pos]);\n this.failuresByPos = failures;\n this.message = getMultiErrorMessage(msg, this.failures);\n}\nderive(BulkError).from(DexieError);\n\n//\n//\n// Dynamically generate error names and exception classes based\n// on the names in errorList.\n//\n//\n\n// Map of {ErrorName -> ErrorName + \"Error\"}\nexport var errnames = errorList.reduce((obj,name)=>(obj[name]=name+\"Error\",obj),{});\n\n// Need an alias for DexieError because we're gonna create subclasses with the same name.\nconst BaseException = DexieError;\n// Map of {ErrorName -> exception constructor}\nexport var exceptions = errorList.reduce((obj,name)=>{\n // Let the name be \"DexieError\" because this name may\n // be shown in call stack and when debugging. DexieError is\n // the most true name because it derives from DexieError,\n // and we cannot change Function.name programatically without\n // dynamically create a Function object, which would be considered\n // 'eval-evil'.\n var fullName = name + \"Error\";\n function DexieError (msgOrInner, inner){\n this.name = fullName;\n if (!msgOrInner) {\n this.message = defaultTexts[name] || fullName;\n this.inner = null;\n } else if (typeof msgOrInner === 'string') {\n this.message = `${msgOrInner}${!inner ? '' : '\\n ' + inner}`;\n this.inner = inner || null;\n } else if (typeof msgOrInner === 'object') {\n this.message = `${msgOrInner.name} ${msgOrInner.message}`;\n this.inner = msgOrInner;\n }\n }\n derive(DexieError).from(BaseException);\n obj[name]=DexieError;\n return obj;\n},{});\n\n// Use ECMASCRIPT standard exceptions where applicable:\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\n\nexport var exceptionMap = idbDomErrorNames.reduce((obj, name)=>{\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nexport function mapError (domError, message) {\n if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name])\n return domError;\n var rv = new exceptionMap[domError.name](message || domError.message, domError);\n if (\"stack\" in domError) {\n // Derive stack from inner exception if it has a stack\n setProp(rv, \"stack\", {get: function(){\n return this.inner.stack;\n }});\n }\n return rv;\n}\n\nexport var fullNameExceptions = errorList.reduce((obj, name)=>{\n if ([\"Syntax\",\"Type\",\"Range\"].indexOf(name) === -1)\n obj[name + \"Error\"] = exceptions[name];\n return obj;\n}, {});\n\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n","import {extend} from './utils';\n\nexport function nop() { }\nexport function mirror(val) { return val; }\nexport function pureFunctionChain(f1, f2) {\n // Enables chained events that takes ONE argument and returns it to the next function in chain.\n // This pattern is used in the hook(\"reading\") event.\n if (f1 == null || f1 === mirror) return f2;\n return function (val) {\n return f2(f1(val));\n };\n}\n\nexport function callBoth(on1, on2) {\n return function () {\n on1.apply(this, arguments);\n on2.apply(this, arguments);\n };\n}\n\nexport function hookCreatingChain(f1, f2) {\n // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance.\n // This pattern is used in the hook(\"creating\") event.\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res !== undefined) arguments[0] = res;\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res2 !== undefined ? res2 : res;\n };\n}\n\nexport function hookDeletingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = this.onerror = null;\n f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n };\n}\n\nexport function hookUpdatingChain(f1, f2) {\n if (f1 === nop) return f2;\n return function (modifications) {\n var res = f1.apply(this, arguments);\n extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain.\n var onsuccess = this.onsuccess, // In case event listener has set this.onsuccess\n onerror = this.onerror; // In case event listener has set this.onerror\n this.onsuccess = null;\n this.onerror = null;\n var res2 = f2.apply(this, arguments);\n if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n return res === undefined ?\n (res2 === undefined ? undefined : res2) :\n (extend(res, res2));\n };\n}\n\nexport function reverseStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n if (f2.apply(this, arguments) === false) return false;\n return f1.apply(this, arguments);\n };\n}\n\nexport function nonStoppableEventChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n f1.apply(this, arguments);\n f2.apply(this, arguments);\n };\n}\n\nexport function promisableChain(f1, f2) {\n if (f1 === nop) return f2;\n return function () {\n var res = f1.apply(this, arguments);\n if (res && typeof res.then === 'function') {\n var thiz = this,\n i = arguments.length,\n args = new Array(i);\n while (i--) args[i] = arguments[i];\n return res.then(function () {\n return f2.apply(thiz, args);\n });\n }\n return f2.apply(this, arguments);\n };\n}\n","// By default, debug will be true only if platform is a web platform and its page is served from localhost.\n// When debug = true, error's stacks will contain asyncronic long stacks.\nexport var debug = typeof location !== 'undefined' &&\n // By default, use debug mode if served from localhost.\n /^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\n\nexport function setDebug(value, filter) {\n debug = value;\n}\n\nexport function deprecated (what: string, fn: (...args)=>T) {\n return function () {\n console.warn(`${what} is deprecated. See https://dexie.org/docs/Deprecations}`);\n return fn.apply(this, arguments);\n } as (...args)=>T\n}\n","/*\n * Copyright (c) 2014-2017 David Fahlander\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n */\nimport { _global } from '../globals/global';\nimport {tryCatch, props, setProp,\n getPropertyDescriptor, getArrayOf, extend, getProto} from '../functions/utils';\nimport {nop, callBoth, mirror} from '../functions/chaining-functions';\nimport {debug} from './debug';\nimport {exceptions} from '../errors';\n\n//\n// Promise and Zone (PSD) for Dexie library\n//\n// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by\n// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation.\n//\n// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another\n// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use\n// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task\n// engine that is indexedDB compliant across all browsers.\n// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible.\n//\n// Specific non-standard features of this Promise class:\n// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as\n// native async / await.\n// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame\n// and below + all promises that those promises creates or awaits.\n// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). \n//\n// David Fahlander, https://github.com/dfahlander\n//\n\n// Just a pointer that only this module knows about.\n// Used in Promise constructor to emulate a private constructor.\nvar INTERNAL = {};\n\nconst\n ZONE_ECHO_LIMIT = 100,\n [resolvedNativePromise, nativePromiseProto, resolvedGlobalPromise] = typeof Promise === 'undefined' ?\n [] :\n (()=>{\n let globalP = Promise.resolve();\n if (typeof crypto === 'undefined' || !crypto.subtle)\n return [globalP, getProto(globalP), globalP];\n // Generate a native promise (as window.Promise may have been patched)\n const nativeP = crypto.subtle.digest(\"SHA-512\", new Uint8Array([0]));\n return [\n nativeP,\n getProto(nativeP),\n globalP\n ];\n })(),\n nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\n\nexport const NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nconst patchGlobalPromise = !!resolvedGlobalPromise;\n\n/* The default function used only for the very first promise in a promise chain.\n As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks\n emulated in this module. For indexedDB compatibility, this means that every method needs to \n execute at least one promise before doing an indexedDB operation. Dexie will always call \n db.ready().then() for every operation to make sure the indexedDB event is started in an\n indexedDB-compatible emulated micro task loop.\n*/\nfunction schedulePhysicalTick() {\n queueMicrotask(physicalTick);\n}\n\n// Configurable through Promise.scheduler.\n// Don't export because it would be unsafe to let unknown\n// code call it unless they do try..catch within their callback.\n// This function can be retrieved through getter of Promise.scheduler though,\n// but users must not do Promise.scheduler = myFuncThatThrowsException\nvar asap = function (callback, args) {\n microtickQueue.push([callback, args]);\n if (needsNewPhysicalTick) {\n schedulePhysicalTick();\n needsNewPhysicalTick = false;\n }\n};\n\nvar isOutsideMicroTick = true, // True when NOT in a virtual microTick.\n needsNewPhysicalTick = true, // True when a push to microtickQueue must also schedulePhysicalTick()\n unhandledErrors = [], // Rejected promises that has occured. Used for triggering 'unhandledrejection'.\n rejectingErrors = [], // Tracks if errors are being re-rejected during onRejected callback.\n rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions\n \nexport var globalPSD = {\n id: 'global',\n global: true,\n ref: 0,\n unhandleds: [],\n onunhandled: nop,\n pgp: false,\n env: {},\n finalize: nop\n};\n\nexport var PSD = globalPSD;\n\nexport var microtickQueue = []; // Callbacks to call in this or next physical tick.\nexport var numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick.\nexport var tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick.\n\nexport default function DexiePromise(fn) {\n if (typeof this !== 'object') throw new TypeError('Promises must be constructed via new'); \n this._listeners = [];\n \n // A library may set `promise._lib = true;` after promise is created to make resolve() or reject()\n // execute the microtask engine implicitely within the call to resolve() or reject().\n // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack\n // only contains library code when calling resolve() or reject().\n // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from\n // global scope (event handler, timer etc)!\n this._lib = false;\n // Current async scope\n var psd = (this._PSD = PSD);\n \n if (typeof fn !== 'function') {\n if (fn !== INTERNAL) throw new TypeError('Not a function');\n // Private constructor (INTERNAL, state, value).\n // Used internally by Promise.resolve() and Promise.reject().\n this._state = arguments[1];\n this._value = arguments[2];\n if (this._state === false)\n handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError().\n return;\n }\n \n this._state = null; // null (=pending), false (=rejected) or true (=resolved)\n this._value = null; // error or result\n ++psd.ref; // Refcounting current scope\n executePromiseTask(this, fn);\n}\n\n// Prepare a property descriptor to put onto Promise.prototype.then\nconst thenProp = {\n get: function() {\n var psd = PSD, microTaskId = totalEchoes;\n\n function then (onFulfilled, onRejected) {\n var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n const cleanup = possibleAwait && !decrementExpectedAwaits();\n var rv = new DexiePromise((resolve, reject) => {\n propagateToListener(this, new Listener(\n nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait, cleanup),\n nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait, cleanup),\n resolve,\n reject,\n psd));\n });\n if (this._consoleTask) rv._consoleTask = this._consoleTask;\n return rv;\n }\n\n then.prototype = INTERNAL; // For idempotense, see setter below.\n\n return then;\n },\n // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then\n // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor.\n set: function (value) {\n setProp (this, 'then', value && value.prototype === INTERNAL ?\n thenProp : // Restore to original property descriptor.\n {\n get: function(){\n return value; // Getter returning provided value (behaves like value is just changed)\n },\n set: thenProp.set // Keep a setter that is prepared to restore original.\n }\n );\n }\n};\n\nprops(DexiePromise.prototype, {\n then: thenProp, // Defined above.\n _then: function (onFulfilled, onRejected) {\n // A little tinier version of then() that don't have to create a resulting promise.\n propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD)); \n },\n\n catch: function (onRejected) {\n if (arguments.length === 1) return this.then(null, onRejected);\n // First argument is the Error type to catch\n var type = arguments[0],\n handler = arguments[1];\n return typeof type === 'function' ? this.then(null, err =>\n // Catching errors by its constructor type (similar to java / c++ / c#)\n // Sample: promise.catch(TypeError, function (e) { ... });\n err instanceof type ? handler(err) : PromiseReject(err))\n : this.then(null, err =>\n // Catching errors by the error.name property. Makes sense for indexedDB where error type\n // is always DOMError but where e.name tells the actual error type.\n // Sample: promise.catch('ConstraintError', function (e) { ... });\n err && err.name === type ? handler(err) : PromiseReject(err));\n },\n\n finally: function (onFinally) {\n return this.then(value => {\n return DexiePromise.resolve(onFinally()).then(()=>value);\n }, err => {\n return DexiePromise.resolve(onFinally()).then(()=>PromiseReject(err));\n });\n },\n \n timeout: function (ms, msg) {\n return ms < Infinity ?\n new DexiePromise((resolve, reject) => {\n var handle = setTimeout(() => reject(new exceptions.Timeout(msg)), ms);\n this.then(resolve, reject).finally(clearTimeout.bind(null, handle));\n }) : this;\n }\n});\n\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag)\n setProp(DexiePromise.prototype, Symbol.toStringTag, 'Dexie.Promise');\n\n// Now that Promise.prototype is defined, we have all it takes to set globalPSD.env.\n// Environment globals snapshotted on leaving global zone\nglobalPSD.env = snapShot();\n\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n this.resolve = resolve;\n this.reject = reject;\n this.psd = zone;\n}\n\n// Promise Static Properties\nprops (DexiePromise, {\n all: function () {\n var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like.\n .map(onPossibleParallellAsync); // Handle parallell async/awaits \n return new DexiePromise(function (resolve, reject) {\n if (values.length === 0) resolve([]);\n var remaining = values.length;\n values.forEach((a,i) => DexiePromise.resolve(a).then(x => {\n values[i] = x;\n if (!--remaining) resolve(values);\n }, reject));\n });\n },\n \n resolve: value => {\n if (value instanceof DexiePromise) return value;\n if (value && typeof value.then === 'function') return new DexiePromise((resolve, reject)=>{\n value.then(resolve, reject);\n });\n var rv = new DexiePromise(INTERNAL, true, value);\n return rv;\n },\n \n reject: PromiseReject,\n \n race: function () {\n var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n values.map(value => DexiePromise.resolve(value).then(resolve, reject));\n });\n },\n\n PSD: {\n get: ()=>PSD,\n set: value => PSD = value\n },\n\n totalEchoes: {get: ()=>totalEchoes},\n\n //task: {get: ()=>task},\n \n newPSD: newScope,\n \n usePSD: usePSD,\n \n scheduler: {\n get: () => asap,\n set: value => {asap = value}\n },\n \n rejectionMapper: {\n get: () => rejectionMapper,\n set: value => {rejectionMapper = value;} // Map reject failures\n },\n \n follow: (fn, zoneProps) => {\n return new DexiePromise((resolve, reject) => {\n return newScope((resolve, reject) => {\n var psd = PSD;\n psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize()\n psd.onunhandled = reject; // Triggered directly on unhandled promises of this library.\n psd.finalize = callBoth(function () {\n // Unhandled standard or 3rd part promises are put in PSD.unhandleds and\n // examined upon scope completion while unhandled rejections in this Promise\n // will trigger directly through psd.onunhandled\n run_at_end_of_this_or_next_physical_tick(()=>{\n this.unhandleds.length === 0 ? resolve() : reject(this.unhandleds[0]);\n });\n }, psd.finalize);\n fn();\n }, zoneProps, resolve, reject);\n });\n }\n});\n\nif (NativePromise) {\n if (NativePromise.allSettled) setProp (DexiePromise, \"allSettled\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise(resolve => {\n if (possiblePromises.length === 0) resolve([]);\n let remaining = possiblePromises.length;\n const results = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => results[i] = {status: \"fulfilled\", value},\n reason => results[i] = {status: \"rejected\", reason})\n .then(()=>--remaining || resolve(results)));\n });\n });\n if (NativePromise.any && typeof AggregateError !== 'undefined') setProp(DexiePromise, \"any\", function() {\n const possiblePromises = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n return new DexiePromise((resolve, reject) => {\n if (possiblePromises.length === 0) reject(new AggregateError([]));\n let remaining = possiblePromises.length;\n const failures = new Array(remaining);\n possiblePromises.forEach((p, i) => DexiePromise.resolve(p).then(\n value => resolve(value),\n failure => {\n failures[i] = failure;\n if (!--remaining) reject(new AggregateError(failures));\n }));\n });\n });\n}\n\n/**\n* Take a potentially misbehaving resolver function and make sure\n* onFulfilled and onRejected are only called once.\n*\n* Makes no guarantees about asynchrony.\n*/\nfunction executePromiseTask (promise, fn) {\n // Promise Resolution Procedure:\n // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n try {\n fn(value => {\n if (promise._state !== null) return; // Already settled\n if (value === promise) throw new TypeError('A promise cannot be resolved with itself.');\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n if (value && typeof value.then === 'function') {\n executePromiseTask(promise, (resolve, reject) => {\n value instanceof DexiePromise ?\n value._then(resolve, reject) :\n value.then(resolve, reject);\n });\n } else {\n promise._state = true;\n promise._value = value;\n propagateAllListeners(promise);\n }\n if (shouldExecuteTick) endMicroTickScope();\n }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below\n } catch (ex) {\n handleRejection(promise, ex);\n }\n}\n\nfunction handleRejection (promise, reason) {\n rejectingErrors.push(reason);\n if (promise._state !== null) return;\n var shouldExecuteTick = promise._lib && beginMicroTickScope();\n reason = rejectionMapper(reason);\n promise._state = false;\n promise._value = reason;\n // Add the failure to a list of possibly uncaught errors\n addPossiblyUnhandledError(promise);\n propagateAllListeners(promise);\n if (shouldExecuteTick) endMicroTickScope();\n}\n\nfunction propagateAllListeners (promise) {\n //debug && linkToPreviousPromise(promise);\n var listeners = promise._listeners;\n promise._listeners = [];\n for (var i = 0, len = listeners.length; i < len; ++i) {\n propagateToListener(promise, listeners[i]);\n }\n var psd = promise._PSD;\n --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize();\n if (numScheduledCalls === 0) {\n // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call,\n // and that no deferreds where listening to this rejection or success.\n // Since there is a risk that our stack can contain application code that may\n // do stuff after this code is finished that may generate new calls, we cannot\n // call finalizers here.\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick(); // Will detect unhandled errors\n }, []);\n }\n}\n\nfunction propagateToListener(promise, listener) {\n if (promise._state === null) {\n promise._listeners.push(listener);\n return;\n }\n\n var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n if (cb === null) {\n // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch()\n return (promise._state ? listener.resolve : listener.reject) (promise._value);\n }\n ++listener.psd.ref;\n ++numScheduledCalls;\n asap (callListener, [cb, promise, listener]);\n}\n\nfunction callListener (cb, promise, listener) {\n try {\n // Call callback and resolve our listener with it's return value.\n var ret, value = promise._value;\n \n if (!promise._state && rejectingErrors.length) rejectingErrors = [];\n // cb is onResolved\n ret = debug && promise._consoleTask ? promise._consoleTask.run(()=>cb (value)) : cb (value);\n if (!promise._state && rejectingErrors.indexOf(value) === -1) {\n markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise.\n }\n listener.resolve(ret);\n } catch (e) {\n // Exception thrown in callback. Reject our listener.\n listener.reject(e);\n } finally {\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n --listener.psd.ref || listener.psd.finalize();\n }\n}\n\n/* The callback to schedule with queueMicrotask().\n It runs a virtual microtick and executes any callback registered in microtickQueue.\n */\nfunction physicalTick() {\n usePSD(globalPSD, ()=>{\n // Make sure to reset the async context to globalPSD before\n // executing any of the microtick subscribers.\n beginMicroTickScope() && endMicroTickScope();\n });\n}\n\nexport function beginMicroTickScope() {\n var wasRootExec = isOutsideMicroTick;\n isOutsideMicroTick = false;\n needsNewPhysicalTick = false;\n return wasRootExec;\n}\n\n/* Executes micro-ticks without doing try..catch.\n This can be possible because we only use this internally and\n the registered functions are exception-safe (they do try..catch\n internally before calling any external method). If registering\n functions in the microtickQueue that are not exception-safe, this\n would destroy the framework and make it instable. So we don't export\n our asap method.\n*/\nexport function endMicroTickScope() {\n var callbacks, i, l;\n do {\n while (microtickQueue.length > 0) {\n callbacks = microtickQueue;\n microtickQueue = [];\n l = callbacks.length;\n for (i = 0; i < l; ++i) {\n var item = callbacks[i];\n item[0].apply(null, item[1]);\n }\n }\n } while (microtickQueue.length > 0);\n isOutsideMicroTick = true;\n needsNewPhysicalTick = true;\n}\n\nfunction finalizePhysicalTick() {\n var unhandledErrs = unhandledErrors;\n unhandledErrors = [];\n unhandledErrs.forEach(p => {\n p._PSD.onunhandled.call(null, p._value, p);\n });\n var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list.\n var i = finalizers.length;\n while (i) finalizers[--i](); \n}\n\nfunction run_at_end_of_this_or_next_physical_tick (fn) {\n function finalizer() {\n fn();\n tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n }\n tickFinalizers.push(finalizer);\n ++numScheduledCalls;\n asap(()=>{\n if (--numScheduledCalls === 0) finalizePhysicalTick();\n }, []);\n}\n\nfunction addPossiblyUnhandledError(promise) {\n // Only add to unhandledErrors if not already there. The first one to add to this list\n // will be upon the first rejection so that the root cause (first promise in the\n // rejection chain) is the one listed.\n if (!unhandledErrors.some(p => p._value === promise._value))\n unhandledErrors.push(promise);\n}\n\nfunction markErrorAsHandled(promise) {\n // Called when a reject handled is actually being called.\n // Search in unhandledErrors for any promise whos _value is this promise_value (list\n // contains only rejected promises, and only one item per error)\n var i = unhandledErrors.length;\n while (i) if (unhandledErrors[--i]._value === promise._value) {\n // Found a promise that failed with this same error object pointer,\n // Remove that since there is a listener that actually takes care of it.\n unhandledErrors.splice(i, 1);\n return;\n }\n}\n\nfunction PromiseReject (reason) {\n return new DexiePromise(INTERNAL, false, reason);\n}\n\nexport function wrap (fn, errorCatcher) {\n var psd = PSD;\n return function() {\n var wasRootExec = beginMicroTickScope(),\n outerScope = PSD;\n\n try {\n switchToZone(psd, true);\n return fn.apply(this, arguments);\n } catch (e) {\n errorCatcher && errorCatcher(e);\n } finally {\n switchToZone(outerScope, false);\n if (wasRootExec) endMicroTickScope();\n }\n };\n}\n\n\n//\n// variables used for native await support\n//\nconst task = { awaits: 0, echoes: 0, id: 0}; // The ongoing macro-task when using zone-echoing.\nvar taskCounter = 0; // ID counter for macro tasks.\nvar zoneStack = []; // Stack of left zones to restore asynchronically.\nvar zoneEchoes = 0; // When > 0, zoneLeaveEcho is queued. When 0 and task.echoes is also 0, nothing is queued.\nvar totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then.\n\n\nvar zone_id_counter = 0;\nexport function newScope (fn, props, a1, a2) {\n var parent = PSD,\n psd = Object.create(parent);\n psd.parent = parent;\n psd.ref = 0;\n psd.global = false;\n psd.id = ++zone_id_counter;\n // Prepare for promise patching (done in usePSD):\n var globalEnv = globalPSD.env;\n psd.env = patchGlobalPromise ? {\n Promise: DexiePromise, // Changing window.Promise could be omitted for Chrome and Edge, where IDB+Promise plays well!\n PromiseProp: {value: DexiePromise, configurable: true, writable: true},\n all: DexiePromise.all,\n race: DexiePromise.race,\n allSettled: DexiePromise.allSettled,\n any: DexiePromise.any,\n resolve: DexiePromise.resolve,\n reject: DexiePromise.reject,\n } : {};\n if (props) extend(psd, props);\n \n // unhandleds and onunhandled should not be specifically set here.\n // Leave them on parent prototype.\n // unhandleds.push(err) will push to parent's prototype\n // onunhandled() will call parents onunhandled (with this scope's this-pointer though!)\n ++parent.ref;\n psd.finalize = function () {\n --this.parent.ref || this.parent.finalize();\n }\n var rv = usePSD (psd, fn, a1, a2);\n if (psd.ref === 0) psd.finalize();\n return rv;\n}\n\n// Function to call if scopeFunc returns NativePromise\n// Also for each NativePromise in the arguments to Promise.all()\nexport function incrementExpectedAwaits() {\n if (!task.id) task.id = ++taskCounter;\n ++task.awaits;\n task.echoes += ZONE_ECHO_LIMIT;\n return task.id;\n}\n\n// Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called.\n// Also call this when a native await calls then method on a promise. In that case, don't supply\n// sourceTaskId because we already know it refers to current task.\nexport function decrementExpectedAwaits() {\n if (!task.awaits) return false;\n if (--task.awaits === 0) task.id = 0;\n task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0.\n return true;\n}\n\nif ((''+nativePromiseThen).indexOf('[native code]') === -1) {\n // If the native promise' prototype is patched, we cannot rely on zone echoing.\n // Disable that here:\n incrementExpectedAwaits = decrementExpectedAwaits = nop;\n}\n\n// Call from Promise.all() and Promise.race()\nexport function onPossibleParallellAsync (possiblePromise) {\n if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n incrementExpectedAwaits(); \n return possiblePromise.then(x => {\n decrementExpectedAwaits();\n return x;\n }, e => {\n decrementExpectedAwaits();\n return rejection(e);\n });\n }\n return possiblePromise;\n}\n\nfunction zoneEnterEcho(targetZone) {\n ++totalEchoes;\n //console.log(\"Total echoes \", totalEchoes);\n //if (task.echoes === 1) console.warn(\"Cancelling echoing of async context.\");\n if (!task.echoes || --task.echoes === 0) {\n task.echoes = task.awaits = task.id = 0; // Cancel echoing.\n }\n\n zoneStack.push(PSD);\n switchToZone(targetZone, true);\n}\n\nfunction zoneLeaveEcho() {\n var zone = zoneStack[zoneStack.length-1];\n zoneStack.pop();\n switchToZone(zone, false);\n}\n\nfunction switchToZone (targetZone, bEnteringZone) {\n var currentZone = PSD;\n if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (!--zoneEchoes || targetZone !== PSD)) {\n // Enter or leave zone asynchronically as well, so that tasks initiated during current tick\n // will be surrounded by the zone when they are invoked.\n queueMicrotask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n }\n if (targetZone === PSD) return;\n\n PSD = targetZone; // The actual zone switch occurs at this line.\n\n // Snapshot on every leave from global zone.\n if (currentZone === globalPSD) globalPSD.env = snapShot();\n\n if (patchGlobalPromise) {\n // Let's patch the global and native Promises (may be same or may be different)\n var GlobalPromise = globalPSD.env.Promise;\n // Swich environments (may be PSD-zone or the global zone. Both apply.)\n var targetEnv = targetZone.env;\n\n if (currentZone.global || targetZone.global) {\n // Leaving or entering global zone. It's time to patch / restore global Promise.\n\n // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular.\n Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp);\n\n // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might\n // not be accessing global.Promise but a local reference to it)\n GlobalPromise.all = targetEnv.all;\n GlobalPromise.race = targetEnv.race;\n GlobalPromise.resolve = targetEnv.resolve;\n GlobalPromise.reject = targetEnv.reject;\n if (targetEnv.allSettled) GlobalPromise.allSettled = targetEnv.allSettled;\n if (targetEnv.any) GlobalPromise.any = targetEnv.any;\n }\n }\n}\n\nfunction snapShot () {\n var GlobalPromise = _global.Promise;\n return patchGlobalPromise ? {\n Promise: GlobalPromise,\n PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n all: GlobalPromise.all,\n race: GlobalPromise.race,\n allSettled: GlobalPromise.allSettled,\n any: GlobalPromise.any,\n resolve: GlobalPromise.resolve,\n reject: GlobalPromise.reject,\n } : {};\n}\n\nexport function usePSD (psd, fn, a1, a2, a3) {\n var outerScope = PSD;\n try {\n switchToZone(psd, true);\n return fn(a1, a2, a3);\n } finally {\n switchToZone(outerScope, false);\n }\n}\n\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait, cleanup) {\n return typeof fn !== 'function' ? fn : function () {\n var outerZone = PSD;\n if (possibleAwait) incrementExpectedAwaits();\n switchToZone(zone, true);\n try {\n return fn.apply(this, arguments);\n } finally {\n switchToZone(outerZone, false);\n if (cleanup) queueMicrotask(decrementExpectedAwaits);\n }\n };\n}\n\n/** Execute callback in global context */\nexport function execInGlobalContext(cb) {\n if (Promise === NativePromise && task.echoes === 0) {\n if (zoneEchoes === 0) {\n cb();\n } else {\n enqueueNativeMicroTask(cb);\n }\n } else {\n setTimeout(cb, 0);\n }\n}\n\nexport var rejection = DexiePromise.reject;\n\nexport {DexiePromise};\n","import { PSD, rejection, newScope } from \"../helpers/promise\";\nimport { DexieOptions } from \"../public/types/dexie-constructor\";\nimport { errnames, exceptions } from \"../errors\";\nimport { nop } from \"./chaining-functions\";\nimport { Transaction } from \"../classes/transaction\";\nimport { Dexie } from '../classes/dexie';\n\n/* Generate a temporary transaction when db operations are done outside a transaction scope.\n*/\nexport function tempTransaction (\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n fn: (resolve, reject, trans: Transaction) => any)\n // Last argument is \"writeLocked\". But this doesnt apply to oneshot direct db operations, so we ignore it.\n{\n if (!db.idbdb || (!db._state.openComplete && (!PSD.letThrough && !db._vip))) {\n if (db._state.openComplete) {\n // db.idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return rejection(new exceptions.DatabaseClosed(db._state.dbOpenError));\n }\n if (!db._state.isBeingOpened) {\n if (!db._state.autoOpen)\n return rejection(new exceptions.DatabaseClosed());\n db.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n return db._state.dbReadyPromise.then(() => tempTransaction(db, mode, storeNames, fn));\n } else {\n var trans = db._createTransaction(mode, storeNames, db._dbSchema);\n try {\n trans.create();\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(()=>tempTransaction(db, mode, storeNames, fn));\n }\n return rejection(ex);\n }\n return trans._promise(mode, (resolve, reject) => {\n return newScope(() => { // OPTIMIZATION POSSIBLE? newScope() not needed because it's already done in _promise.\n PSD.trans = trans;\n return fn(resolve, reject, trans);\n });\n }).then(result => {\n // Instead of resolving value directly, wait with resolving it until transaction has completed.\n // Otherwise the data would not be in the DB if requesting it in the then() operation.\n // Specifically, to ensure that the following expression will work:\n //\n // db.friends.put({name: \"Arne\"}).then(function () {\n // db.friends.where(\"name\").equals(\"Arne\").count(function(count) {\n // assert (count === 1);\n // });\n // });\n //\n if (mode === 'readwrite') try {trans.idbtrans.commit();} catch {}\n return mode === 'readonly' ? result : trans._completion.then(() => result);\n });/*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major.\n trans._reject(err);\n return rejection(err);\n });*/\n }\n}\n","import { Dexie } from \"../classes/dexie\";\n\nexport const DEXIE_VERSION = '{version}'; // Replaced by build-script.\nexport const maxString = String.fromCharCode(65535);\nexport const minKey = -Infinity; // minKey can be constant. maxKey must be a prop of Dexie (_maxKey)\nexport const INVALID_KEY_ARGUMENT =\n \"Invalid key provided. Keys must be of type string, number, Date or Array.\";\nexport const STRING_EXPECTED = \"String expected.\";\nexport const connections: Dexie[] = [];\nexport const dexieStackFrameFilter = frame => !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\nexport const DBNAMES_DB = '__dbnames';\nexport const READONLY = 'readonly';\nexport const READWRITE = 'readwrite';\n","export function combine(filter1, filter2) {\n return filter1 ?\n filter2 ?\n function () { return filter1.apply(this, arguments) && filter2.apply(this, arguments); } :\n filter1 :\n filter2;\n}\n","import { DBCoreKeyRange, DBCoreRangeType } from '../public/types/dbcore';\n\nexport const AnyRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Any,\n lower: -Infinity,\n lowerOpen: false,\n upper: [[]],\n upperOpen: false\n}\n\nexport const NeverRange: DBCoreKeyRange = {\n type: DBCoreRangeType.Never,\n lower: -Infinity,\n lowerOpen: true,\n upper: -Infinity,\n upperOpen: true\n}\n","import { deepClone, delByKeyPath, getByKeyPath } from './utils';\n\n// This workaround is needed since obj could be a custom-class instance with an\n// uninitialized keyPath. See the following comment for more context:\n// https://github.com/dfahlander/Dexie.js/issues/1280#issuecomment-823557881\nexport function workaroundForUndefinedPrimKey(keyPath: string | ArrayLike) {\n // Workaround only needed for plain non-dotted keyPaths\n return typeof keyPath === \"string\" && !/\\./.test(keyPath) \n ? (obj: object) => {\n if (obj[keyPath] === undefined && (keyPath in obj)) {\n // property exists but is undefined. This will not be liked by Indexeddb.\n // Need to remove the property before adding it but we need to clone it before\n // doing that to not be intrusive.\n obj = deepClone(obj);\n delete obj[keyPath];\n }\n return obj;\n }\n : (obj: object) => obj;\n}","import { exceptions } from \"../../errors\";\n\nexport function Entity(){\n throw exceptions.Type();\n}\n","// Implementation of https://www.w3.org/TR/IndexedDB-3/#compare-two-keys\n\nimport { toStringTag } from './utils';\n\n// ... with the adjustment to return NaN instead of throwing.\nexport function cmp(a: any, b: any): number {\n try {\n const ta = type(a);\n const tb = type(b);\n if (ta !== tb) {\n if (ta === 'Array') return 1;\n if (tb === 'Array') return -1;\n if (ta === 'binary') return 1;\n if (tb === 'binary') return -1;\n if (ta === 'string') return 1;\n if (tb === 'string') return -1;\n if (ta === 'Date') return 1;\n if (tb !== 'Date') return NaN;\n return -1;\n }\n switch (ta) {\n case 'number':\n case 'Date':\n case 'string':\n return a > b ? 1 : a < b ? -1 : 0;\n case 'binary': {\n return compareUint8Arrays(getUint8Array(a), getUint8Array(b));\n }\n case 'Array':\n return compareArrays(a, b);\n }\n } catch {}\n return NaN; // Return value if any given args are valid keys.\n}\n\nexport function compareArrays(a: any[], b: any[]): number {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n const res = cmp(a[i], b[i]);\n if (res !== 0) return res;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\nexport function compareUint8Arrays(\n a: Uint8Array,\n b: Uint8Array\n) {\n const al = a.length;\n const bl = b.length;\n const l = al < bl ? al : bl;\n for (let i = 0; i < l; ++i) {\n if (a[i] !== b[i]) return a[i] < b[i] ? -1 : 1;\n }\n return al === bl ? 0 : al < bl ? -1 : 1;\n}\n\n// Implementation of https://www.w3.org/TR/IndexedDB-3/#key-type\nfunction type(x: any) {\n const t = typeof x;\n if (t !== 'object') return t;\n if (ArrayBuffer.isView(x)) return 'binary';\n const tsTag = toStringTag(x); // Cannot use instanceof in Safari\n return tsTag === 'ArrayBuffer' ? 'binary' : (tsTag as 'Array' | 'Date');\n}\n\ntype BinaryType =\n | ArrayBuffer\n | DataView\n | Uint8ClampedArray\n | ArrayBufferView\n | Uint8Array\n | Int8Array\n | Uint16Array\n | Int16Array\n | Uint32Array\n | Int32Array\n | Float32Array\n | Float64Array\n | BigInt64Array \n | BigUint64Array;\n\nfunction getUint8Array(a: BinaryType): Uint8Array {\n if (a instanceof Uint8Array) return a;\n if (ArrayBuffer.isView(a))\n // TypedArray or DataView\n return new Uint8Array(a.buffer, a.byteOffset, a.byteLength);\n return new Uint8Array(a); // ArrayBuffer\n}\n","import { BulkError, exceptions } from '../../errors';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { DexiePromise as Promise, PSD, newScope, rejection, beginMicroTickScope, endMicroTickScope } from '../../helpers/promise';\nimport { Transaction } from '../transaction';\nimport { Dexie } from '../dexie';\nimport { tempTransaction } from '../../functions/temp-transaction';\nimport { Collection } from '../collection';\nimport { isArray, keys, getByKeyPath, setByKeyPath, extend, getProto } from '../../functions/utils';\nimport { maxString } from '../../globals/constants';\nimport { combine } from '../../functions/combine';\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { IndexableType } from '../../public/types/indexable-type';\nimport { debug } from '../../helpers/debug';\nimport { DBCoreTable } from '../../public/types/dbcore';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { workaroundForUndefinedPrimKey } from '../../functions/workaround-undefined-primkey';\nimport { Entity } from '../entity/Entity';\nimport { UpdateSpec } from '../../public';\nimport { cmp } from '../../functions/cmp';\n\n/** class Table\n * \n * https://dexie.org/docs/Table/Table\n */\nexport class Table implements ITable {\n db: Dexie;\n _tx?: Transaction;\n name: string;\n schema: TableSchema;\n hook: TableHooks;\n core: DBCoreTable;\n\n _trans(\n mode: IDBTransactionMode,\n fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike | void,\n writeLocked?: boolean | string) : PromiseExtended\n {\n const trans: Transaction = this._tx || PSD.trans;\n const tableName = this.name;\n // @ts-ignore: Use Chrome's Async Stack Tagging API to allow tracing and simplify debugging for dexie users.\n const task = debug && typeof console !== 'undefined' && console.createTask && console.createTask(`Dexie: ${mode === 'readonly' ? 'read' : 'write' } ${this.name}`);\n \n function checkTableInTransaction(resolve, reject, trans: Transaction) {\n if (!trans.schema[tableName])\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\");\n return fn(trans.idbtrans, trans) as Promise;\n }\n // Surround all in a microtick scope.\n // Reason: Browsers (modern Safari + older others)\n // still as of 2018-10-10 has problems keeping a transaction\n // alive between micro ticks. Safari because if transaction\n // is created but not used in same microtick, it will go\n // away. That specific issue could be solved in DBCore\n // by opening the transaction just before using it instead.\n // But older Firefoxes and IE11 (with Promise polyfills)\n // will still have probs.\n // The beginMicrotickScope()/endMicrotickScope() works\n // in cooperation with Dexie.Promise to orchestrate\n // the micro-ticks in endMicrotickScope() rather than\n // in native engine.\n const wasRootExec = beginMicroTickScope();\n try {\n let p = trans && trans.db._novip === this.db._novip ?\n trans === PSD.trans ?\n trans._promise(mode, checkTableInTransaction, writeLocked) :\n newScope(() => trans._promise(mode, checkTableInTransaction, writeLocked), { trans: trans, transless: PSD.transless || PSD }) :\n tempTransaction(this.db, mode, [this.name], checkTableInTransaction);\n if (task) { // Dexie.debug = true so we trace errors\n p._consoleTask = task;\n p = p.catch(err => {\n console.trace(err);\n return rejection(err);\n });\n }\n return p; \n } finally {\n if (wasRootExec) endMicroTickScope();\n }\n }\n\n /** Table.get()\n * \n * https://dexie.org/docs/Table/Table.get()\n * \n **/\n get(keyOrCrit, cb?) {\n if (keyOrCrit && keyOrCrit.constructor === Object)\n return this.where(keyOrCrit as { [key: string]: IndexableType }).first(cb);\n if (keyOrCrit == null) return rejection(new exceptions.Type(`Invalid argument to Table.get()`));\n\n return this._trans('readonly', (trans) => {\n return this.core.get({trans, key: keyOrCrit})\n .then(res => this.hook.reading.fire(res));\n }).then(cb);\n }\n\n /** Table.where()\n * \n * https://dexie.org/docs/Table/Table.where()\n * \n **/\n where(indexOrCrit: string | string[] | { [key: string]: IndexableType }) {\n if (typeof indexOrCrit === 'string')\n return new this.db.WhereClause(this, indexOrCrit);\n if (isArray(indexOrCrit))\n return new this.db.WhereClause(this, `[${indexOrCrit.join('+')}]`);\n // indexOrCrit is an object map of {[keyPath]:value} \n const keyPaths = keys(indexOrCrit);\n if (keyPaths.length === 1)\n // Only one critera. This was the easy case:\n return this\n .where(keyPaths[0])\n .equals(indexOrCrit[keyPaths[0]]);\n\n // Multiple criterias.\n // Let's try finding a compound index that matches all keyPaths in\n // arbritary order:\n const compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(ix => {\n if (\n ix.compound &&\n keyPaths.every(keyPath => ix.keyPath.indexOf(keyPath) >= 0)) {\n for (let i=0; i a.keyPath.length - b.keyPath.length)[0];\n \n if (compoundIndex && this.db._maxKey !== maxString) {\n // Cool! We found such compound index\n // and this browser supports compound indexes (maxKey !== maxString)!\n const keyPathsInValidOrder = (compoundIndex.keyPath as string[]).slice(0, keyPaths.length);\n return this\n .where(keyPathsInValidOrder)\n .equals(keyPathsInValidOrder.map(kp => indexOrCrit[kp]));\n }\n\n if (!compoundIndex && debug) console.warn(\n `The query ${JSON.stringify(indexOrCrit)} on ${this.name} would benefit from a ` +\n `compound index [${keyPaths.join('+')}]`);\n\n // Ok, now let's fallback to finding at least one matching index\n // and filter the rest.\n const { idxByName } = this.schema;\n const idb = this.db._deps.indexedDB;\n\n function equals (a, b) {\n return idb.cmp(a,b) === 0; // Works with all indexable types including binary keys.\n }\n\n const [idx, filterFunction] = keyPaths.reduce(([prevIndex, prevFilterFn], keyPath) => {\n const index = idxByName[keyPath];\n const value = indexOrCrit[keyPath];\n return [\n prevIndex || index, // idx::=Pick index of first matching keypath\n prevIndex || !index ? // filter::=null if not needed, otherwise combine function filter\n combine(\n prevFilterFn,\n index && index.multi ?\n x => {\n const prop = getByKeyPath(x, keyPath);\n return isArray(prop) && prop.some(item => equals(value, item));\n } : x => equals(value, getByKeyPath(x, keyPath)))\n : prevFilterFn\n ];\n }, [null, null]);\n\n return idx ?\n this.where(idx.name).equals(indexOrCrit[idx.keyPath])\n .filter(filterFunction) :\n compoundIndex ?\n this.filter(filterFunction) : // Has compound but browser bad. Allow filter.\n this.where(keyPaths).equals(''); // No index at all. Fail lazily with \"[a+b+c] is not indexed\"\n }\n\n /** Table.filter()\n * \n * https://dexie.org/docs/Table/Table.filter()\n * \n **/\n filter(filterFunction: (obj: any) => boolean) {\n return this.toCollection().and(filterFunction);\n }\n\n /** Table.count()\n * \n * https://dexie.org/docs/Table/Table.count()\n * \n **/\n count(thenShortcut?: any) {\n return this.toCollection().count(thenShortcut);\n }\n\n /** Table.offset()\n * \n * https://dexie.org/docs/Table/Table.offset()\n * \n **/\n offset(offset: number) {\n return this.toCollection().offset(offset);\n }\n\n /** Table.limit()\n * \n * https://dexie.org/docs/Table/Table.limit()\n * \n **/\n limit(numRows: number) {\n return this.toCollection().limit(numRows);\n }\n\n /** Table.each()\n * \n * https://dexie.org/docs/Table/Table.each()\n * \n **/\n each(callback: (obj: any, cursor: { key: IndexableType, primaryKey: IndexableType }) => any) {\n return this.toCollection().each(callback);\n }\n\n /** Table.toArray()\n * \n * https://dexie.org/docs/Table/Table.toArray()\n * \n **/\n toArray(thenShortcut?: any) {\n return this.toCollection().toArray(thenShortcut);\n }\n\n /** Table.toCollection()\n * \n * https://dexie.org/docs/Table/Table.toCollection()\n * \n **/\n toCollection() {\n return new this.db.Collection(new this.db.WhereClause(this));\n }\n\n /** Table.orderBy()\n * \n * https://dexie.org/docs/Table/Table.orderBy()\n * \n **/\n orderBy(index: string | string[]) {\n return new this.db.Collection(\n new this.db.WhereClause(this, isArray(index) ?\n `[${index.join('+')}]` :\n index));\n }\n\n /** Table.reverse()\n * \n * https://dexie.org/docs/Table/Table.reverse()\n * \n **/\n reverse(): Collection {\n return this.toCollection().reverse();\n }\n\n /** Table.mapToClass()\n * \n * https://dexie.org/docs/Table/Table.mapToClass()\n * \n **/\n mapToClass(constructor: Function) {\n const {db, name: tableName} = this;\n this.schema.mappedClass = constructor;\n if (constructor.prototype instanceof Entity) {\n constructor = class extends (constructor as any) {\n get db () { return db; }\n table() { return tableName; }\n }\n }\n // Collect all inherited property names (including method names) by\n // walking the prototype chain. This is to avoid overwriting them from\n // database data - so application code can rely on inherited props never\n // becoming shadowed by database object props.\n const inheritedProps = new Set();\n for (let proto = constructor.prototype; proto; proto = getProto(proto)) {\n Object.getOwnPropertyNames(proto).forEach(propName => inheritedProps.add(propName));\n }\n \n // Now, subscribe to the when(\"reading\") event to make all objects that come out from this table inherit from given class\n // no matter which method to use for reading (Table.get() or Table.where(...)... )\n const readHook = (obj: Object) => {\n if (!obj) return obj; // No valid object. (Value is null or undefined). Return as is.\n // Create a new object that derives from constructor:\n const res = Object.create(constructor.prototype);\n // Clone members (but never those that collide with a property in the prototype\n // hierchary (MUST BE ABLE TO RELY ON Entity methods and props!)):\n for (let m in obj) if (!inheritedProps.has(m)) try { res[m] = obj[m]; } catch (_) { }\n return res;\n };\n\n if (this.schema.readHook) {\n this.hook.reading.unsubscribe(this.schema.readHook);\n }\n this.schema.readHook = readHook;\n this.hook(\"reading\", readHook);\n return constructor;\n }\n\n /** @deprecated */\n defineClass() {\n function Class (content){\n extend(this, content);\n };\n return this.mapToClass(Class);\n }\n\n /** Table.add()\n * \n * https://dexie.org/docs/Table/Table.add()\n * \n **/\n add(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'add', keys: key != null ? [key] : null, values: [objToAdd]});\n }).then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.update()\n * \n * https://dexie.org/docs/Table/Table.update()\n * \n **/\n update(keyOrObject, modifications: { [keyPath: string]: any; } | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n if (typeof keyOrObject === 'object' && !isArray(keyOrObject)) {\n const key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n if (key === undefined) return rejection(new exceptions.InvalidArgument(\n \"Given object does not contain its primary key\"));\n /*// object to modify. Also modify given object with the modifications:\n // This part should be here for backward compatibility.\n // If ever feeling too bad about mutating given object, please wait to a new major before removing it,\n // and document the change thoroughly. TODO: Document this change!\n if (!Object.isFrozen(keyOrObject)) try {\n if (typeof modifications !== \"function\") {\n keys(modifications).forEach(keyPath => {\n setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n });\n } else {\n // Now since we support function argument, we should have a similar behavior here as well\n // (as long as we do this mutability stuff on the given object)\n modifications(keyOrObject, {value: keyOrObject, primKey: key});\n }\n } catch {\n // Maybe given object was frozen.\n // This part is not essential. Just move on as nothing happened...\n }*/\n return this.where(\":id\").equals(key).modify(modifications);\n } else {\n // key to modify\n return this.where(\":id\").equals(keyOrObject).modify(modifications);\n }\n }\n\n /** Table.put()\n * \n * https://dexie.org/docs/Table/Table.put()\n * \n **/\n put(obj, key?: IndexableType): PromiseExtended {\n const {auto, keyPath} = this.schema.primKey;\n let objToAdd = obj;\n if (keyPath && auto) {\n objToAdd = workaroundForUndefinedPrimKey(keyPath)(obj);\n }\n return this._trans(\n 'readwrite',\n trans => this.core.mutate({trans, type: 'put', values: [objToAdd], keys: key != null ? [key] : null}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : res.lastResult)\n .then(lastResult => {\n if (keyPath) {\n // This part should be here for backward compatibility.\n // If ever feeling too bad about this, please wait to a new major before removing it,\n // and document the change thoroughly.\n try{setByKeyPath(obj, keyPath, lastResult);}catch(_){};\n }\n return lastResult;\n });\n }\n\n /** Table.delete()\n * \n * https://dexie.org/docs/Table/Table.delete()\n * \n **/\n delete(key: IndexableType): PromiseExtended {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'delete', keys: [key]}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.clear()\n * \n * https://dexie.org/docs/Table/Table.clear()\n * \n **/\n clear() {\n return this._trans('readwrite',\n trans => this.core.mutate({trans, type: 'deleteRange', range: AnyRange}))\n .then(res => res.numFailures ? Promise.reject(res.failures[0]) : undefined);\n }\n\n /** Table.bulkGet()\n * \n * https://dexie.org/docs/Table/Table.bulkGet()\n * \n * @param keys \n */\n bulkGet(keys: IndexableType[]) {\n return this._trans('readonly', trans => {\n return this.core.getMany({\n keys,\n trans\n }).then(result => result.map(res => this.hook.reading.fire(res)));\n });\n }\n\n /** Table.bulkAdd()\n * \n * https://dexie.org/docs/Table/Table.bulkAdd()\n * \n **/\n bulkAdd(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToAdd = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n return this.core.mutate(\n {trans, type: 'add', keys: keys as IndexableType[], values: objectsToAdd, wantResults}\n )\n .then(({numFailures, results,lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkAdd(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkPut()\n * \n * https://dexie.org/docs/Table/Table.bulkPut()\n * \n **/\n bulkPut(\n objects: readonly any[],\n keysOrOptions?: ReadonlyArray | { allKeys?: boolean },\n options?: { allKeys?: boolean }\n ) { \n const keys = Array.isArray(keysOrOptions) ? keysOrOptions : undefined;\n options = options || (keys ? undefined : keysOrOptions as { allKeys?: boolean });\n const wantResults = options ? options.allKeys : undefined;\n\n return this._trans('readwrite', trans => {\n const {auto, keyPath} = this.schema.primKey;\n if (keyPath && keys)\n throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n if (keys && keys.length !== objects.length)\n throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n\n const numObjects = objects.length; // Pick length here to allow garbage collection of objects later\n let objectsToPut = keyPath && auto ?\n objects.map(workaroundForUndefinedPrimKey(keyPath)) :\n objects;\n\n return this.core.mutate(\n {trans, type: 'put', keys: keys as IndexableType[], values: objectsToPut, wantResults}\n )\n .then(({numFailures, results, lastResult, failures}) => {\n const result = wantResults ? results : lastResult;\n if (numFailures === 0) return result;\n throw new BulkError(\n `${this.name}.bulkPut(): ${numFailures} of ${numObjects} operations failed`, failures);\n });\n });\n }\n\n /** Table.bulkUpdate()\n *\n * https://dexie.org/docs/Table.Table.bulkUpdate()\n */\n bulkUpdate(\n keysAndChanges: readonly { key: any; changes: UpdateSpec }[]\n ): PromiseExtended {\n const coreTable = this.core;\n const keys = keysAndChanges.map((entry) => entry.key);\n const changeSpecs = keysAndChanges.map((entry) => entry.changes);\n const offsetMap: number[] = [];\n return this._trans('readwrite', (trans) => {\n return coreTable.getMany({ trans, keys, cache: 'clone' }).then((objs) => {\n const resultKeys: any[] = [];\n const resultObjs: any[] = [];\n keysAndChanges.forEach(({ key, changes }, idx) => {\n const obj = objs[idx];\n if (obj) {\n for (const keyPath of Object.keys(changes)) {\n const value = changes[keyPath];\n if (keyPath === this.schema.primKey.keyPath) {\n if (cmp(value, key) !== 0) {\n throw new exceptions.Constraint(\n `Cannot update primary key in bulkUpdate()`\n );\n }\n } else {\n setByKeyPath(obj, keyPath, value);\n }\n }\n offsetMap.push(idx);\n resultKeys.push(key);\n resultObjs.push(obj);\n }\n });\n const numEntries = resultKeys.length;\n return coreTable\n .mutate({\n trans,\n type: 'put',\n keys: resultKeys,\n values: resultObjs,\n updates: {\n keys,\n changeSpecs\n }\n })\n .then(({ numFailures, failures }) => {\n if (numFailures === 0) return numEntries;\n // Failure. bulkPut() may have a subset of keys\n // so we must translate returned 'failutes' into the offsets of given argument:\n for (const offset of Object.keys(failures)) {\n const mappedOffset = offsetMap[Number(offset)];\n if (mappedOffset != null) {\n const failure = failures[offset];\n delete failures[offset];\n failures[mappedOffset] = failure;\n }\n }\n throw new BulkError(\n `${this.name}.bulkUpdate(): ${numFailures} of ${numEntries} operations failed`,\n failures\n );\n });\n });\n });\n }\n\n /** Table.bulkDelete()\n * \n * https://dexie.org/docs/Table/Table.bulkDelete()\n * \n **/\n bulkDelete(keys: ReadonlyArray): PromiseExtended {\n const numKeys = keys.length;\n return this._trans('readwrite', trans => {\n return this.core.mutate({trans, type: 'delete', keys: keys as IndexableType[]});\n }).then(({numFailures, lastResult, failures}) => {\n if (numFailures === 0) return lastResult;\n throw new BulkError(\n `${this.name}.bulkDelete(): ${numFailures} of ${numKeys} operations failed`, failures);\n });\n }\n}\n","import {keys, isArray, asap} from '../functions/utils';\nimport {nop, mirror, reverseStoppableEventChain} from '../functions/chaining-functions';\nimport {exceptions} from '../errors';\n\nexport default function Events(ctx) {\n var evs = {};\n var rv = function (eventName, subscriber) {\n if (subscriber) {\n // Subscribe. If additional arguments than just the subscriber was provided, forward them as well.\n var i = arguments.length, args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n evs[eventName].subscribe.apply(null, args);\n return ctx;\n } else if (typeof (eventName) === 'string') {\n // Return interface allowing to fire or unsubscribe from event\n return evs[eventName];\n }\n };\n rv.addEventType = add;\n \n for (var i = 1, l = arguments.length; i < l; ++i) {\n add(arguments[i]);\n }\n \n return rv;\n\n function add(eventName, chainFunction, defaultFunction) {\n if (typeof eventName === 'object') return addConfiguredEvents(eventName);\n if (!chainFunction) chainFunction = reverseStoppableEventChain;\n if (!defaultFunction) defaultFunction = nop;\n\n var context = {\n subscribers: [],\n fire: defaultFunction,\n subscribe: function (cb) {\n if (context.subscribers.indexOf(cb) === -1) {\n context.subscribers.push(cb);\n context.fire = chainFunction(context.fire, cb);\n }\n },\n unsubscribe: function (cb) {\n context.subscribers = context.subscribers.filter(function (fn) { return fn !== cb; });\n context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n }\n };\n evs[eventName] = rv[eventName] = context;\n return context;\n }\n\n function addConfiguredEvents(cfg) {\n // events(this, {reading: [functionChain, nop]});\n keys(cfg).forEach(function (eventName) {\n var args = cfg[eventName];\n if (isArray(args)) {\n add(eventName, cfg[eventName][0], cfg[eventName][1]);\n } else if (args === 'asap') {\n // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack\n // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten.\n var context = add(eventName, mirror, function fire() {\n // Optimazation-safe cloning of arguments into args.\n var i = arguments.length, args = new Array(i);\n while (i--) args[i] = arguments[i];\n // All each subscriber:\n context.subscribers.forEach(function (fn) {\n asap(function fireEvent() {\n fn.apply(null, args);\n });\n });\n });\n } else throw new exceptions.InvalidArgument(\"Invalid event config\");\n });\n }\n}\n","import { arrayToObject, derive } from './utils';\n\n\nexport function makeClassConstructor (prototype: Object, constructor: Function) {\n /*const propertyDescriptorMap = arrayToObject(\n Object.getOwnPropertyNames(prototype),\n propKey => [propKey, Object.getOwnPropertyDescriptor(prototype, propKey)]);\n\n // Both derive and clone the prototype.\n // derive: So that x instanceof T returns true when T is the class template.\n // clone: Optimizes method access a bit (but actually not nescessary)\n const derivedPrototypeClone = Object.create(prototype, propertyDescriptorMap);\n derivedPrototypeClone.constructor = constructor;\n constructor.prototype = derivedPrototypeClone;\n return constructor as any as TConstructor;*/\n\n // Keep the above code in case we want to clone AND derive the parent prototype.\n // Reason would be optimization of property access.\n // The code below will only create a prototypal inheritance from given constructor function\n // to given prototype.\n derive(constructor).from({prototype});\n return constructor as any as TConstructor; \n}\n","import { Dexie } from '../dexie';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { Transaction } from '../transaction/transaction';\nimport { hookCreatingChain, pureFunctionChain, nop, mirror, hookUpdatingChain, hookDeletingChain } from '../../functions/chaining-functions';\nimport { TableHooks } from '../../public/types/table-hooks';\nimport { Table } from './table';\nimport Events from '../../helpers/Events';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\n\nexport interface TableConstructor {\n new (name: string, tableSchema: TableSchema, optionalTrans?: Transaction) : Table;\n prototype: Table;\n}\n\n/** Generates a Table constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTableConstructor (db: Dexie) {\n return makeClassConstructor(\n Table.prototype,\n\n function Table (this: Table, name: string, tableSchema: TableSchema, trans?: Transaction) {\n this.db = db;\n this._tx = trans;\n this.name = name;\n this.schema = tableSchema;\n this.hook = db._allTables[name] ? db._allTables[name].hook : Events(null, {\n \"creating\": [hookCreatingChain, nop],\n \"reading\": [pureFunctionChain, mirror],\n \"updating\": [hookUpdatingChain, nop],\n \"deleting\": [hookDeletingChain, nop]\n }) as TableHooks;\n }\n\n );\n}\n","import { combine } from \"../../functions/combine\";\nimport { exceptions } from \"../../errors\";\nimport { hasOwn } from \"../../functions/utils\";\nimport { wrap } from \"../../helpers/promise\";\nimport { Collection } from './';\nimport { DBCoreCursor, DBCoreTable, DBCoreTransaction, DBCoreTableSchema, DBCoreRangeType } from '../../public/types/dbcore';\nimport { nop } from '../../functions/chaining-functions';\n\ntype CollectionContext = Collection[\"_ctx\"];\n\nexport function isPlainKeyRange (ctx: CollectionContext, ignoreLimitFilter?: boolean) {\n return !(ctx.filter || ctx.algorithm || ctx.or) &&\n (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n} \n\nexport function addFilter(ctx: CollectionContext, fn: Function) {\n ctx.filter = combine(ctx.filter, fn);\n}\n\nexport function addReplayFilter (ctx: CollectionContext, factory, isLimitFilter?) {\n var curr = ctx.replayFilter;\n ctx.replayFilter = curr ? ()=>combine(curr(), factory()) : factory;\n ctx.justLimit = isLimitFilter && !curr;\n}\n\nexport function addMatchFilter(ctx: CollectionContext, fn) {\n ctx.isMatch = combine(ctx.isMatch, fn);\n}\n\nexport function getIndexOrStore(ctx: CollectionContext, coreSchema: DBCoreTableSchema) {\n // TODO: Rewrite this. No need to know ctx.isPrimKey. ctx.index should hold the keypath.\n // Still, throw if not found!\n if (ctx.isPrimKey) return coreSchema.primaryKey;\n const index = coreSchema.getIndexByKeyPath(ctx.index);\n if (!index) throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + coreSchema.name + \" is not indexed\");\n return index;\n}\n\nexport function openCursor(ctx: CollectionContext, coreTable: DBCoreTable, trans: DBCoreTransaction) {\n const index = getIndexOrStore(ctx, coreTable.schema);\n return coreTable.openCursor({\n trans,\n values: !ctx.keysOnly,\n reverse: ctx.dir === 'prev',\n unique: !!ctx.unique,\n query: {\n index, \n range: ctx.range\n }\n });\n}\n\nexport function iter (\n ctx: CollectionContext, \n fn: (item, cursor: DBCoreCursor, advance: Function)=>void,\n coreTrans: DBCoreTransaction,\n coreTable: DBCoreTable): Promise\n{\n const filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n if (!ctx.or) {\n return iterate(\n openCursor(ctx, coreTable, coreTrans),\n combine(ctx.algorithm, filter), fn, !ctx.keysOnly && ctx.valueMapper);\n } else {\n const set = {};\n\n const union = (item: any, cursor: DBCoreCursor, advance) => {\n if (!filter || filter(cursor, advance, result=>cursor.stop(result), err => cursor.fail(err))) {\n var primaryKey = cursor.primaryKey;\n var key = '' + primaryKey;\n if (key === '[object ArrayBuffer]') key = '' + new Uint8Array(primaryKey);\n if (!hasOwn(set, key)) {\n set[key] = true;\n fn(item, cursor, advance);\n }\n }\n }\n\n return Promise.all([\n ctx.or._iterate(union, coreTrans),\n iterate(openCursor(ctx, coreTable, coreTrans), ctx.algorithm, union, !ctx.keysOnly && ctx.valueMapper)\n ]);\n }\n}\n\nfunction iterate(cursorPromise: Promise, filter, fn, valueMapper): Promise {\n \n // Apply valueMapper (hook('reading') or mappped class)\n var mappedFn = valueMapper ? (x,c,a) => fn(valueMapper(x),c,a) : fn;\n // Wrap fn with PSD and microtick stuff from Promise.\n var wrappedFn = wrap(mappedFn);\n \n return cursorPromise.then(cursor => {\n if (cursor) {\n return cursor.start(()=>{\n var c = ()=>cursor.continue();\n if (!filter || filter(cursor, advancer => c = advancer, val=>{cursor.stop(val);c=nop}, e => {cursor.fail(e);c = nop;}))\n wrappedFn(cursor.value, cursor, advancer => c = advancer);\n c();\n });\n }\n });\n}\n","import { isArray } from \"../functions/utils\";\nimport { PropModSpec } from \"../public/types/prop-modification\";\n\nexport const PropModSymbol: unique symbol = Symbol();\n\n/** Consistent change propagation across offline synced data.\n * \n * This class is executed client- and server side on sync, making\n * an operation consistent across sync for full consistency and accuracy.\n * \n * Example: An object represents a bank account with a balance.\n * One offline user adds $ 1.00 to the balance.\n * Another user (online) adds $ 2.00 to the balance.\n * When first user syncs, the balance becomes the sum of every operation (3.00).\n * \n * -- initial: balance is 0\n * 1. db.bankAccounts.update(1, { balance: new ProdModification({add: 100})}) // user 1 (offline)\n * 2. db.bankAccounts.update(1, { balance: new ProdModification({add: 200})}) // user 2 (online)\n * -- before user 1 syncs, balance is 200 (representing money with integers * 100 to avoid rounding issues)\n * \n * -- balance is 300\n * \n * When new operations are added, they need to be added to:\n * 1. PropModSpec interface\n * 2. Here in PropModification with the logic they represent\n * 3. (Optionally) a sugar function for it, such as const mathAdd = (amount: number | BigInt) => new PropModification({mathAdd: amount})\n */\nexport class PropModification implements PropModSpec {\n [PropModSymbol]?: true;\n replacePrefix?: [string, string];\n add?: number | BigInt | Array;\n remove?: number | BigInt | Array;\n\n execute(value: any): any {\n // add (mathematical or set-wise)\n if (this.add !== undefined) {\n const term = this.add;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(term)) {\n return [...(isArray(value) ? value : []), ...term].sort();\n }\n // Mathematical addition:\n if (typeof term === 'number') return (Number(value) || 0) + term; // if value is not convertible to number, return 0 + term\n if (typeof term === 'bigint') {\n try {\n return BigInt(value) + term;\n } catch {\n return BigInt(0) + term; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid term ${term}`);\n }\n\n // remove (mathematical or set-wise)\n if (this.remove !== undefined) {\n const subtrahend = this.remove;\n // Set-addition on array representing a set of primitive types (strings, numbers)\n if (isArray(subtrahend)) {\n return isArray(value) ? value.filter(item => !subtrahend.includes(item)).sort() : [];\n } \n // Mathematical addition:\n if (typeof subtrahend === 'number') return Number(value) - subtrahend;\n if (typeof subtrahend === 'bigint') {\n try {\n return BigInt(value) - subtrahend;\n } catch {\n return BigInt(0) - subtrahend; // Unlike Number(value) that can return NaN, BigInt(value) throws if value is not BigInt, Number or numeric string\n }\n }\n throw new TypeError(`Invalid subtrahend ${subtrahend}`);\n }\n\n // Replace a prefix:\n const prefixToReplace = this.replacePrefix?.[0];\n if (prefixToReplace && typeof value === 'string' && value.startsWith(prefixToReplace)) {\n return this.replacePrefix[1] + value.substring(prefixToReplace.length);\n }\n return value;\n }\n\n constructor(spec: PropModSpec) {\n Object.assign(this, spec);\n }\n}\n","import { Collection as ICollection } from \"../../public/types/collection\";\nimport { Dexie } from \"../dexie\";\nimport { Table } from \"../table\";\nimport { IndexableType, IndexableTypeArrayReadonly } from \"../../public/types/indexable-type\";\nimport { PromiseExtended } from \"../../public/types/promise-extended\";\nimport { iter, isPlainKeyRange, getIndexOrStore, addReplayFilter, addFilter, addMatchFilter } from \"./collection-helpers\";\nimport { rejection } from \"../../helpers/promise\";\nimport { combine } from \"../../functions/combine\";\nimport { extend, hasOwn, deepClone, keys, setByKeyPath, getByKeyPath } from \"../../functions/utils\";\nimport { ModifyError } from \"../../errors\";\nimport { ThenShortcut } from \"../../public/types/then-shortcut\";\nimport { Transaction } from '../transaction';\nimport { DBCoreCursor, DBCoreTransaction, DBCoreRangeType, DBCoreMutateResponse, DBCoreKeyRange } from '../../public/types/dbcore';\nimport { cmp } from \"../../functions/cmp\";\nimport { PropModification } from \"../../helpers/prop-modification\";\nimport { UpdateSpec } from \"../../public/types/update-spec\";\n\n/** class Collection\n * \n * https://dexie.org/docs/Collection/Collection\n */\nexport class Collection implements ICollection {\n db: Dexie;\n _ctx: {\n table: Table;\n index?: string | null;\n isPrimKey?: boolean;\n range: DBCoreKeyRange;\n keysOnly: boolean;\n dir: \"next\" | \"prev\";\n unique: \"\" | \"unique\";\n algorithm?: Function | null;\n filter?: Function | null;\n replayFilter: Function | null;\n justLimit: boolean; // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: Function | null;\n offset: number,\n limit: number,\n error: any, // If set, any promise must be rejected with this error\n or: Collection,\n valueMapper: (any) => any\n }\n \n _ondirectionchange?: Function;\n\n _read(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike, cb?): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readonly', fn).then(cb);\n }\n\n _write(fn: (idbtrans: IDBTransaction, dxTrans: Transaction) => PromiseLike): PromiseExtended {\n var ctx = this._ctx;\n return ctx.error ?\n ctx.table._trans(null, rejection.bind(null, ctx.error)) :\n ctx.table._trans('readwrite', fn, \"locked\"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued.\n }\n\n _addAlgorithm(fn) {\n var ctx = this._ctx;\n ctx.algorithm = combine(ctx.algorithm, fn);\n }\n\n _iterate(\n fn: (item, cursor: DBCoreCursor, advance: Function) => void,\n coreTrans: DBCoreTransaction) : Promise\n {\n return iter(this._ctx, fn, coreTrans, this._ctx.table.core);\n }\n\n /** Collection.clone()\n * \n * https://dexie.org/docs/Collection/Collection.clone()\n * \n **/\n clone(props?): this {\n var rv = Object.create(this.constructor.prototype),\n ctx = Object.create(this._ctx);\n if (props) extend(ctx, props);\n rv._ctx = ctx;\n return rv;\n }\n\n /** Collection.raw()\n * \n * https://dexie.org/docs/Collection/Collection.raw()\n * \n **/\n raw(): this {\n this._ctx.valueMapper = null;\n return this;\n }\n\n /** Collection.each()\n * \n * https://dexie.org/docs/Collection/Collection.each()\n * \n **/\n each(fn: (obj, cursor: DBCoreCursor) => any): PromiseExtended {\n var ctx = this._ctx;\n\n return this._read(trans => iter(ctx, fn, trans, ctx.table.core));\n }\n\n /** Collection.count()\n * \n * https://dexie.org/docs/Collection/Collection.count()\n * \n **/\n count(cb?) {\n return this._read(trans => {\n const ctx = this._ctx;\n const coreTable = ctx.table.core;\n if (isPlainKeyRange(ctx, true)) {\n // This is a plain key range. We can use the count() method if the index.\n return coreTable.count({\n trans,\n query: {\n index: getIndexOrStore(ctx, coreTable.schema),\n range: ctx.range\n }\n }).then(count => Math.min(count, ctx.limit));\n } else {\n // Algorithms, filters or expressions are applied. Need to count manually.\n var count = 0;\n return iter(ctx, () => { ++count; return false; }, trans, coreTable)\n .then(()=>count);\n }\n }).then(cb);\n }\n\n /** Collection.sortBy()\n * \n * https://dexie.org/docs/Collection/Collection.sortBy()\n * \n **/\n sortBy(keyPath: string): PromiseExtended;\n sortBy(keyPath: string, thenShortcut: ThenShortcut) : PromiseExtended;\n sortBy(keyPath: string, cb?: ThenShortcut) {\n const parts = keyPath.split('.').reverse(),\n lastPart = parts[0],\n lastIndex = parts.length - 1;\n function getval(obj, i) {\n if (i) return getval(obj[parts[i]], i - 1);\n return obj[lastPart];\n }\n var order = this._ctx.dir === \"next\" ? 1 : -1;\n\n function sorter(a, b) {\n var aVal = getval(a, lastIndex),\n bVal = getval(b, lastIndex);\n return aVal < bVal ? -order : aVal > bVal ? order : 0;\n }\n return this.toArray(function (a) {\n return a.sort(sorter);\n }).then(cb);\n }\n\n /** Collection.toArray()\n * \n * https://dexie.org/docs/Collection/Collection.toArray()\n * \n **/\n toArray(cb?): PromiseExtended {\n return this._read(trans => {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAll() or\n // IDBKeyRange.getAll():\n const {valueMapper} = ctx;\n const index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n limit: ctx.limit,\n values: true,\n query: {\n index,\n range: ctx.range\n }\n }).then(({result}) => valueMapper ? result.map(valueMapper) : result);\n } else {\n // Getting array through a cursor.\n const a = [];\n return iter(ctx, item => a.push(item), trans, ctx.table.core).then(()=>a);\n }\n }, cb);\n }\n\n /** Collection.offset()\n * \n * https://dexie.org/docs/Collection/Collection.offset()\n * \n **/\n offset(offset: number) : Collection{\n var ctx = this._ctx;\n if (offset <= 0) return this;\n ctx.offset += offset; // For count()\n if (isPlainKeyRange(ctx)) {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return (cursor, advance) => {\n if (offsetLeft === 0) return true;\n if (offsetLeft === 1) { --offsetLeft; return false; }\n advance(() => {\n cursor.advance(offsetLeft);\n offsetLeft = 0;\n });\n return false;\n };\n });\n } else {\n addReplayFilter(ctx, () => {\n var offsetLeft = offset;\n return () => (--offsetLeft < 0);\n });\n }\n return this;\n }\n\n /** Collection.limit()\n * \n * https://dexie.org/docs/Collection/Collection.limit()\n * \n **/\n limit(numRows: number) : Collection {\n this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count()\n addReplayFilter(this._ctx, () => {\n var rowsLeft = numRows;\n return function (cursor, advance, resolve) {\n if (--rowsLeft <= 0) advance(resolve); // Stop after this item has been included\n return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here.\n };\n }, true);\n return this;\n }\n\n /** Collection.until()\n * \n * https://dexie.org/docs/Collection/Collection.until()\n * \n **/\n until(filterFunction: (x) => boolean, bIncludeStopEntry?) {\n addFilter(this._ctx, function (cursor, advance, resolve) {\n if (filterFunction(cursor.value)) {\n advance(resolve);\n return bIncludeStopEntry;\n } else {\n return true;\n }\n });\n return this;\n }\n\n /** Collection.first()\n * \n * https://dexie.org/docs/Collection/Collection.first()\n * \n **/\n first(cb?) {\n return this.limit(1).toArray(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.last()\n * \n * https://dexie.org/docs/Collection/Collection.last()\n * \n **/\n last(cb?) {\n return this.reverse().first(cb);\n }\n\n /** Collection.filter()\n * \n * https://dexie.org/docs/Collection/Collection.filter()\n * \n **/\n filter(filterFunction: (x) => boolean): Collection {\n /// function(val){return true/false}\n addFilter(this._ctx, function (cursor) {\n return filterFunction(cursor.value);\n });\n // match filters not used in Dexie.js but can be used by 3rd part libraries to test a\n // collection for a match without querying DB. Used by Dexie.Observable.\n addMatchFilter(this._ctx, filterFunction);\n return this;\n }\n\n /** Collection.and()\n * \n * https://dexie.org/docs/Collection/Collection.and()\n * \n **/\n and(filter: (x) => boolean) {\n return this.filter(filter);\n }\n\n /** Collection.or()\n * \n * https://dexie.org/docs/Collection/Collection.or()\n * \n **/\n or(indexName: string) {\n return new this.db.WhereClause(this._ctx.table, indexName, this);\n }\n\n /** Collection.reverse()\n * \n * https://dexie.org/docs/Collection/Collection.reverse()\n * \n **/\n reverse() {\n this._ctx.dir = (this._ctx.dir === \"prev\" ? \"next\" : \"prev\");\n if (this._ondirectionchange) this._ondirectionchange(this._ctx.dir);\n return this;\n }\n\n /** Collection.desc()\n * \n * https://dexie.org/docs/Collection/Collection.desc()\n * \n **/\n desc() {\n return this.reverse();\n }\n\n /** Collection.eachKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachKey()\n * \n **/\n eachKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.key, cursor); });\n }\n\n /** Collection.eachUniqueKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachUniqueKey()\n * \n **/\n eachUniqueKey(cb?) {\n this._ctx.unique = \"unique\";\n return this.eachKey(cb);\n }\n\n /** Collection.eachPrimaryKey()\n * \n * https://dexie.org/docs/Collection/Collection.eachPrimaryKey()\n * \n **/\n eachPrimaryKey(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n return this.each(function (val, cursor) { cb(cursor.primaryKey, cursor); });\n }\n\n /** Collection.keys()\n * \n * https://dexie.org/docs/Collection/Collection.keys()\n * \n **/\n keys(cb?) {\n var ctx = this._ctx;\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.key);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.primaryKeys()\n * \n * https://dexie.org/docs/Collection/Collection.primaryKeys()\n * \n **/\n primaryKeys(cb?) : PromiseExtended {\n var ctx = this._ctx;\n if (ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n // Special optimation if we could use IDBObjectStore.getAllKeys() or\n // IDBKeyRange.getAllKeys():\n return this._read(trans => {\n var index = getIndexOrStore(ctx, ctx.table.core.schema);\n return ctx.table.core.query({\n trans,\n values: false,\n limit: ctx.limit,\n query: {\n index,\n range: ctx.range\n }});\n }).then(({result})=>result).then(cb);\n }\n ctx.keysOnly = !ctx.isMatch;\n var a = [];\n return this.each(function (item, cursor) {\n a.push(cursor.primaryKey);\n }).then(function () {\n return a;\n }).then(cb);\n }\n\n /** Collection.uniqueKeys()\n * \n * https://dexie.org/docs/Collection/Collection.uniqueKeys()\n * \n **/\n uniqueKeys(cb?) {\n this._ctx.unique = \"unique\";\n return this.keys(cb);\n }\n\n /** Collection.firstKey()\n * \n * https://dexie.org/docs/Collection/Collection.firstKey()\n * \n **/\n firstKey(cb?) {\n return this.limit(1).keys(function (a) { return a[0]; }).then(cb);\n }\n\n /** Collection.lastKey()\n * \n * https://dexie.org/docs/Collection/Collection.lastKey()\n * \n **/\n lastKey(cb?) {\n return this.reverse().firstKey(cb);\n }\n\n /** Collection.distinct()\n * \n * https://dexie.org/docs/Collection/Collection.distinct()\n * \n **/\n distinct() {\n var ctx = this._ctx,\n idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n if (!idx || !idx.multi) return this; // distinct() only makes differencies on multiEntry indexes.\n var set = {};\n addFilter(this._ctx, function (cursor: DBCoreCursor) {\n var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string\n var found = hasOwn(set, strKey);\n set[strKey] = true;\n return !found;\n });\n return this;\n }\n\n //\n // Methods that mutate storage\n //\n\n /** Collection.modify()\n * \n * https://dexie.org/docs/Collection/Collection.modify()\n * \n **/\n modify(changes: UpdateSpec | ((obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean)): PromiseExtended {\n var ctx = this._ctx;\n return this._write(trans => {\n var modifyer: (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean\n if (typeof changes === 'function') {\n // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item)\n modifyer = changes as (obj: any, ctx:{value: any, primKey: IndexableType}) => void | boolean;\n } else {\n // changes is a set of {keyPath: value} and no one is listening to the updating hook.\n var keyPaths = keys(changes);\n var numKeys = keyPaths.length;\n modifyer = function (item) {\n let anythingModified = false;\n for (let i = 0; i < numKeys; ++i) {\n let keyPath = keyPaths[i];\n let val = changes[keyPath];\n let origVal = getByKeyPath(item, keyPath);\n\n if (val instanceof PropModification) {\n setByKeyPath(item, keyPath, val.execute(origVal));\n anythingModified = true;\n } else if (origVal !== val) {\n setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n anythingModified = true;\n }\n }\n return anythingModified;\n };\n }\n\n const coreTable = ctx.table.core;\n const {outbound, extractKey} = coreTable.schema.primaryKey;\n const limit = this.db._options.modifyChunkSize || 200;\n const totalFailures = [];\n let successCount = 0;\n const failedKeys: IndexableType[] = [];\n const applyMutateResult = (expectedCount: number, res: DBCoreMutateResponse) => {\n const {failures, numFailures} = res;\n successCount += expectedCount - numFailures;\n for (let pos of keys(failures)) {\n totalFailures.push(failures[pos]);\n }\n }\n return this.clone().primaryKeys().then(keys => {\n const criteria = isPlainKeyRange(ctx) &&\n ctx.limit === Infinity &&\n (typeof changes !== 'function' || changes === deleteCallback) && {\n index: ctx.index,\n range: ctx.range\n };\n\n const nextChunk = (offset: number) => {\n const count = Math.min(limit, keys.length - offset);\n return coreTable.getMany({\n trans,\n keys: keys.slice(offset, offset + count),\n cache: \"immutable\" // Optimize for 2 things:\n // 1) observability-middleware can track changes better.\n // 2) hooks middleware don't have to query the existing values again when tracking changes.\n // We can use \"immutable\" because we promise to not touch the values we retrieve here!\n }).then(values => {\n const addValues = [];\n const putValues = [];\n const putKeys = outbound ? [] : null;\n const deleteKeys = [];\n for (let i=0; i 0 &&\n coreTable.mutate({trans, type: 'add', values: addValues})\n .then(res => {\n for (let pos in res.failures) {\n // Remove from deleteKeys the key of the object that failed to change its primary key\n deleteKeys.splice(parseInt(pos), 1);\n }\n applyMutateResult(addValues.length, res);\n })\n ).then(()=>(putValues.length > 0 || (criteria && typeof changes === 'object')) &&\n coreTable.mutate({\n trans,\n type: 'put',\n keys: putKeys,\n values: putValues,\n criteria,\n changeSpec: typeof changes !== 'function'\n && changes,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(putValues.length, res))\n ).then(()=>(deleteKeys.length > 0 || (criteria && changes === deleteCallback)) &&\n coreTable.mutate({\n trans,\n type: 'delete',\n keys: deleteKeys,\n criteria,\n isAdditionalChunk: offset > 0\n }).then(res=>applyMutateResult(deleteKeys.length, res))\n ).then(()=>{\n return keys.length > offset + count && nextChunk(offset + limit);\n });\n });\n }\n\n return nextChunk(0).then(()=>{\n if (totalFailures.length > 0)\n throw new ModifyError(\"Error modifying one or more objects\", totalFailures, successCount, failedKeys as IndexableTypeArrayReadonly);\n\n return keys.length;\n });\n });\n\n });\n }\n\n /** Collection.delete()\n * \n * https://dexie.org/docs/Collection/Collection.delete()\n * \n **/\n delete() : PromiseExtended {\n var ctx = this._ctx,\n range = ctx.range;\n //deletingHook = ctx.table.hook.deleting.fire,\n //hasDeleteHook = deletingHook !== nop;\n if (isPlainKeyRange(ctx) &&\n (ctx.isPrimKey || range.type === DBCoreRangeType.Any)) // if no range, we'll use clear().\n {\n // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208)\n // For chromium, this is the way most optimized version.\n // For IE/Edge, this could hang the indexedDB engine and make operating system instable\n // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7)\n return this._write(trans => {\n // Our API contract is to return a count of deleted items, so we have to count() before delete().\n const {primaryKey} = ctx.table.core.schema;\n const coreRange = range;\n return ctx.table.core.count({trans, query: {index: primaryKey, range: coreRange}}).then(count => {\n return ctx.table.core.mutate({trans, type: 'deleteRange', range: coreRange})\n .then(({failures, lastResult, results, numFailures}) => {\n if (numFailures) throw new ModifyError(\"Could not delete some values\",\n Object.keys(failures).map(pos => failures[pos]),\n count - numFailures);\n return count - numFailures;\n });\n });\n });\n }\n\n return this.modify(deleteCallback);\n }\n}\n\nconst deleteCallback = (value, ctx) => ctx.value = null;\n","import { Dexie } from '../../classes/dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Collection } from './collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { AnyRange } from '../../dbcore/keyrange';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\nimport { mirror } from '../../functions/chaining-functions';\n\n/** Constructs a Collection instance. */\nexport interface CollectionConstructor {\n new(whereClause?: WhereClause | null, keyRangeGenerator?: () => DBCoreKeyRange): Collection;\n prototype: Collection;\n}\n\n/** Generates a Collection constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createCollectionConstructor(db: Dexie) {\n return makeClassConstructor(\n Collection.prototype,\n\n function Collection(\n this: Collection,\n whereClause?: WhereClause | null,\n keyRangeGenerator?: () => DBCoreKeyRange)\n {\n this.db = db;\n let keyRange = AnyRange, error = null;\n if (keyRangeGenerator) try {\n keyRange = keyRangeGenerator();\n } catch (ex) {\n error = ex;\n }\n\n const whereCtx = whereClause._ctx;\n const table = whereCtx.table;\n const readingHook = table.hook.reading.fire;\n this._ctx = {\n table: table,\n index: whereCtx.index,\n isPrimKey: (!whereCtx.index || (table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name)),\n range: keyRange,\n keysOnly: false,\n dir: \"next\",\n unique: \"\",\n algorithm: null,\n filter: null,\n replayFilter: null,\n justLimit: true, // True if a replayFilter is just a filter that performs a \"limit\" operation (or none at all)\n isMatch: null,\n offset: 0,\n limit: Infinity,\n error: error, // If set, any promise must be rejected with this error\n or: whereCtx.or,\n valueMapper: readingHook !== mirror ? readingHook : null\n };\n }\n );\n}\n","import { IndexableType } from '../public/types/indexable-type';\n\nexport function simpleCompare(a, b) {\n return a < b ? -1 : a === b ? 0 : 1;\n}\n\nexport function simpleCompareReverse(a, b) {\n return a > b ? -1 : a === b ? 0 : 1;\n}\n","import { WhereClause } from './where-clause';\nimport { Collection } from '../collection';\nimport { STRING_EXPECTED } from '../../globals/constants';\nimport { simpleCompare, simpleCompareReverse } from '../../functions/compare-functions';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange, DBCoreRangeType } from '../../public/types/dbcore';\n\nexport function fail(collectionOrWhereClause: Collection | WhereClause, err, T?) {\n var collection = collectionOrWhereClause instanceof WhereClause ?\n new collectionOrWhereClause.Collection (collectionOrWhereClause) :\n collectionOrWhereClause;\n \n collection._ctx.error = T ? new T(err) : new TypeError(err);\n return collection;\n}\n\nexport function emptyCollection(whereClause: WhereClause) {\n return new whereClause.Collection (whereClause, () => rangeEqual(\"\")).limit(0);\n}\n\nexport function upperFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toUpperCase() :\n (s: string) => s.toLowerCase();\n}\n\nexport function lowerFactory(dir: 'next' | 'prev') {\n return dir === \"next\" ?\n (s: string) => s.toLowerCase() :\n (s: string) => s.toUpperCase();\n}\n\nexport function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n var length = Math.min(key.length, lowerNeedle.length);\n var llp = -1;\n for (var i = 0; i < length; ++i) {\n var lwrKeyChar = lowerKey[i];\n if (lwrKeyChar !== lowerNeedle[i]) {\n if (cmp(key[i], upperNeedle[i]) < 0) return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n if (cmp(key[i], lowerNeedle[i]) < 0) return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n if (llp >= 0) return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n return null;\n }\n if (cmp(key[i], lwrKeyChar) < 0) llp = i;\n }\n if (length < lowerNeedle.length && dir === \"next\") return key + upperNeedle.substr(key.length);\n if (length < key.length && dir === \"prev\") return key.substr(0, upperNeedle.length);\n return (llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1));\n}\n\nexport function addIgnoreCaseAlgorithm(whereClause: WhereClause, match, needles, suffix) {\n /// \n var upper, lower, compare, upperNeedles, lowerNeedles, direction, nextKeySuffix,\n needlesLen = needles.length;\n if (!needles.every(s => typeof s === 'string')) {\n return fail(whereClause, STRING_EXPECTED);\n }\n function initDirection(dir) {\n upper = upperFactory(dir);\n lower = lowerFactory(dir);\n compare = (dir === \"next\" ? simpleCompare : simpleCompareReverse);\n var needleBounds = needles.map(function (needle){\n return {lower: lower(needle), upper: upper(needle)};\n }).sort(function(a,b) {\n return compare(a.lower, b.lower);\n });\n upperNeedles = needleBounds.map(function (nb){ return nb.upper; });\n lowerNeedles = needleBounds.map(function (nb){ return nb.lower; });\n direction = dir;\n nextKeySuffix = (dir === \"next\" ? \"\" : suffix);\n }\n initDirection(\"next\");\n\n var c = new whereClause.Collection (\n whereClause,\n ()=>createRange(upperNeedles[0], lowerNeedles[needlesLen-1] + suffix)\n );\n\n c._ondirectionchange = function (direction) {\n // This event onlys occur before filter is called the first time.\n initDirection(direction);\n };\n\n var firstPossibleNeedle = 0;\n\n c._addAlgorithm(function (cursor, advance, resolve) {\n /// \n /// \n /// \n var key = cursor.key;\n if (typeof key !== 'string') return false;\n var lowerKey = lower(key);\n if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n return true;\n } else {\n var lowestPossibleCasing = null;\n for (var i=firstPossibleNeedle; i 0) {\n lowestPossibleCasing = casing;\n }\n }\n if (lowestPossibleCasing !== null) {\n advance(function () { cursor.continue(lowestPossibleCasing + nextKeySuffix); });\n } else {\n advance(resolve);\n }\n return false;\n }\n });\n return c;\n}\n\nexport function createRange (lower: IndexableType, upper: IndexableType, lowerOpen?: boolean, upperOpen?: boolean): DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Range,\n lower,\n upper,\n lowerOpen,\n upperOpen\n };\n}\n\nexport function rangeEqual (value: IndexableType) : DBCoreKeyRange {\n return {\n type: DBCoreRangeType.Equal,\n lower: value,\n upper: value\n };\n}\n","import { WhereClause as IWhereClause } from \"../../public/types/where-clause\";\nimport { Collection } from \"../collection\";\nimport { Table } from \"../table\";\nimport { IndexableType } from \"../../public/types/indexable-type\";\nimport { emptyCollection, fail, addIgnoreCaseAlgorithm, createRange, rangeEqual } from './where-clause-helpers';\nimport { INVALID_KEY_ARGUMENT, STRING_EXPECTED, maxString, minKey } from '../../globals/constants';\nimport { getArrayOf, NO_CHAR_ARRAY } from '../../functions/utils';\nimport { exceptions } from '../../errors';\nimport { Dexie } from '../dexie';\nimport { Collection as ICollection} from \"../../public/types/collection\";\n\n/** class WhereClause\n * \n * https://dexie.org/docs/WhereClause/WhereClause\n */\nexport class WhereClause implements IWhereClause {\n db: Dexie;\n _IDBKeyRange: typeof IDBKeyRange;\n _ctx: {\n table: Table;\n index: string;\n or: Collection;\n }\n _cmp: (a: IndexableType, b: IndexableType) => number;\n _ascending: (a: IndexableType, b: IndexableType) => number;\n _descending: (a: IndexableType, b: IndexableType) => number;\n _min: (a: IndexableType, b: IndexableType) => IndexableType;\n _max: (a: IndexableType, b: IndexableType) => IndexableType;\n\n get Collection() {\n return this._ctx.table.db.Collection;\n }\n\n /** WhereClause.between()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.between()\n * \n **/\n between(lower: IndexableType, upper: IndexableType, includeLower?: boolean, includeUpper?: boolean) {\n includeLower = includeLower !== false; // Default to true\n includeUpper = includeUpper === true; // Default to false\n try {\n if ((this._cmp(lower, upper) > 0) ||\n (this._cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)))\n return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection.\n return new this.Collection(this, ()=>createRange(lower, upper, !includeLower, !includeUpper));\n } catch (e) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n }\n\n /** WhereClause.equals()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equals()\n * \n **/\n equals(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => rangeEqual(value)) as ICollection;\n }\n\n /** WhereClause.above()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.above()\n * \n **/\n above(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, true));\n }\n\n /** WhereClause.aboveOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.aboveOrEqual()\n * \n **/\n aboveOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(value, undefined, false));\n }\n\n /** WhereClause.below()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.below()\n * \n **/\n below(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value, false, true));\n }\n\n /** WhereClause.belowOrEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.belowOrEqual()\n * \n **/\n belowOrEqual(value: IndexableType) {\n if (value == null) return fail(this, INVALID_KEY_ARGUMENT);\n return new this.Collection(this, () => createRange(undefined, value));\n }\n\n /** WhereClause.startsWith()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWith()\n * \n **/\n startsWith(str: string) {\n if (typeof str !== 'string') return fail(this, STRING_EXPECTED);\n return this.between(str, str + maxString, true, true);\n }\n\n /** WhereClause.startsWithIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithIgnoreCase()\n * \n **/\n startsWithIgnoreCase(str: string) {\n if (str === \"\") return this.startsWith(str);\n return addIgnoreCaseAlgorithm(this, (x, a) => x.indexOf(a[0]) === 0, [str], maxString);\n }\n\n /** WhereClause.equalsIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.equalsIgnoreCase()\n * \n **/\n equalsIgnoreCase(str: string) {\n return addIgnoreCaseAlgorithm(this, (x, a) => x === a[0], [str], \"\");\n }\n\n /** WhereClause.anyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOfIgnoreCase()\n * \n **/\n anyOfIgnoreCase(...values: string[]): Collection;\n anyOfIgnoreCase(values: string[]): Collection;\n anyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.indexOf(x) !== -1, set, \"\");\n }\n\n /** WhereClause.startsWithAnyOfIgnoreCase()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOfIgnoreCase()\n * \n **/\n startsWithAnyOfIgnoreCase(...values: string[]): Collection;\n startsWithAnyOfIgnoreCase(values: string[]): Collection;\n startsWithAnyOfIgnoreCase() {\n var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return emptyCollection(this);\n return addIgnoreCaseAlgorithm(this, (x, a) => a.some(n => x.indexOf(n) === 0), set, maxString);\n }\n\n /** WhereClause.anyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.anyOf()\n * \n **/\n anyOf(...values: string[]): Collection;\n anyOf(values: string[]): Collection;\n anyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n let compare = this._cmp;\n try { set.sort(compare); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n if (set.length === 0) return emptyCollection(this);\n const c = new this.Collection(this, () => createRange(set[0], set[set.length - 1]));\n\n c._ondirectionchange = direction => {\n compare = (direction === \"next\" ?\n this._ascending :\n this._descending);\n set.sort(compare);\n };\n\n let i = 0;\n c._addAlgorithm((cursor, advance, resolve) => {\n const key = cursor.key;\n while (compare(key, set[i]) > 0) {\n // The cursor has passed beyond this key. Check next.\n ++i;\n if (i === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (compare(key, set[i]) === 0) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => { cursor.continue(set[i]); });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.notEqual()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.notEqual()\n * \n **/\n notEqual(value: IndexableType) {\n return this.inAnyRange([[minKey, value], [value, this.db._maxKey]], { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.noneOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.noneOf()\n * \n **/\n noneOf(...values: string[]): Collection;\n noneOf(values: string[]): Collection;\n noneOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n if (set.length === 0) return new this.Collection(this); // Return entire collection.\n try { set.sort(this._ascending); } catch (e) { return fail(this, INVALID_KEY_ARGUMENT); }\n // Transform [\"a\",\"b\",\"c\"] to a set of ranges for between/above/below: [[minKey,\"a\"], [\"a\",\"b\"], [\"b\",\"c\"], [\"c\",maxKey]]\n const ranges = set.reduce(\n (res, val) => res ?\n res.concat([[res[res.length - 1][1], val]]) :\n [[minKey, val]],\n null);\n ranges.push([set[set.length - 1], this.db._maxKey]);\n return this.inAnyRange(ranges, { includeLowers: false, includeUppers: false });\n }\n\n /** WhereClause.inAnyRange()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.inAnyRange()\n * \n **/\n inAnyRange(\n ranges: ReadonlyArray<{ 0: IndexableType, 1: IndexableType }>,\n options?: { includeLowers?: boolean, includeUppers?: boolean })\n {\n const cmp = this._cmp,\n ascending = this._ascending,\n descending = this._descending,\n min = this._min,\n max = this._max;\n\n if (ranges.length === 0) return emptyCollection(this);\n if (!ranges.every(range =>\n range[0] !== undefined &&\n range[1] !== undefined &&\n ascending(range[0], range[1]) <= 0)) {\n return fail(\n this,\n \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\",\n exceptions.InvalidArgument);\n }\n const includeLowers = !options || options.includeLowers !== false; // Default to true\n const includeUppers = options && options.includeUppers === true; // Default to false\n\n function addRange(ranges, newRange) {\n let i = 0, l = ranges.length;\n for (; i < l; ++i) {\n const range = ranges[i];\n if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n range[0] = min(range[0], newRange[0]);\n range[1] = max(range[1], newRange[1]);\n break;\n }\n }\n if (i === l)\n ranges.push(newRange);\n return ranges;\n }\n\n let sortDirection = ascending;\n function rangeSorter(a, b) { return sortDirection(a[0], b[0]); }\n\n // Join overlapping ranges\n let set;\n try {\n set = ranges.reduce(addRange, []);\n set.sort(rangeSorter);\n } catch (ex) {\n return fail(this, INVALID_KEY_ARGUMENT);\n }\n\n let rangePos = 0;\n const keyIsBeyondCurrentEntry = includeUppers ?\n key => ascending(key, set[rangePos][1]) > 0 :\n key => ascending(key, set[rangePos][1]) >= 0;\n\n const keyIsBeforeCurrentEntry = includeLowers ?\n key => descending(key, set[rangePos][0]) > 0 :\n key => descending(key, set[rangePos][0]) >= 0;\n\n function keyWithinCurrentRange(key) {\n return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n }\n\n let checkKey = keyIsBeyondCurrentEntry;\n\n const c = new this.Collection(\n this,\n () => createRange(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers));\n\n c._ondirectionchange = direction => {\n if (direction === \"next\") {\n checkKey = keyIsBeyondCurrentEntry;\n sortDirection = ascending;\n } else {\n checkKey = keyIsBeforeCurrentEntry;\n sortDirection = descending;\n }\n set.sort(rangeSorter);\n };\n\n c._addAlgorithm((cursor, advance, resolve) => {\n var key = cursor.key;\n while (checkKey(key)) {\n // The cursor has passed beyond this key. Check next.\n ++rangePos;\n if (rangePos === set.length) {\n // There is no next. Stop searching.\n advance(resolve);\n return false;\n }\n }\n if (keyWithinCurrentRange(key)) {\n // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n return true;\n } else if (this._cmp(key, set[rangePos][1]) === 0 || this._cmp(key, set[rangePos][0]) === 0) {\n // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border.\n // Continue to next key but don't include this one.\n return false;\n } else {\n // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n advance(() => {\n if (sortDirection === ascending) cursor.continue(set[rangePos][0]);\n else cursor.continue(set[rangePos][1]);\n });\n return false;\n }\n });\n return c;\n }\n\n /** WhereClause.startsWithAnyOf()\n * \n * https://dexie.org/docs/WhereClause/WhereClause.startsWithAnyOf()\n * \n **/\n startsWithAnyOf(...prefixes: string[]): Collection;\n startsWithAnyOf(prefixes: string[]): Collection;\n startsWithAnyOf() {\n const set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n\n if (!set.every(s => typeof s === 'string')) {\n return fail(this, \"startsWithAnyOf() only works with strings\");\n }\n if (set.length === 0) return emptyCollection(this);\n\n return this.inAnyRange(set.map((str: string) => [str, str + maxString]));\n }\n\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { WhereClause } from './where-clause';\nimport { Table } from '../table';\nimport { Collection } from '../collection';\nimport { exceptions } from '../../errors';\nimport { cmp } from '../../functions/cmp';\n\nexport interface WhereClauseConstructor {\n new(table: Table, index?: string, orCollection?: Collection): WhereClause;\n prototype: WhereClause;\n}\n\n/** Generates a WhereClause constructor.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createWhereClauseConstructor(db: Dexie) {\n return makeClassConstructor(\n WhereClause.prototype,\n\n function WhereClause(this: WhereClause, table: Table, index?: string, orCollection?: Collection) {\n this.db = db;\n this._ctx = {\n table: table,\n index: index === \":id\" ? null : index,\n or: orCollection\n };\n this._cmp = this._ascending = cmp;\n this._descending = (a, b) => cmp(b, a);\n this._max = (a, b) => cmp(a,b) > 0 ? a : b;\n this._min = (a, b) => cmp(a,b) < 0 ? a : b;\n this._IDBKeyRange = db._deps.IDBKeyRange;\n if (!this._IDBKeyRange) throw new exceptions.MissingAPI();\n }\n );\n}\n","import { wrap } from \"../helpers/promise\";\n\nexport function eventRejectHandler(reject) {\n return wrap(function (event) {\n preventDefault(event);\n reject (event.target.error);\n return false;\n });\n}\n\nexport function eventSuccessHandler (resolve) {\n return wrap(function (event){\n resolve(event.target.result);\n });\n}\n\nexport function hookedEventRejectHandler (reject) {\n return wrap(function (event) {\n // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks.\n \n var req = event.target,\n err = req.error,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n hookErrorHandler = ctx && ctx.onerror;\n hookErrorHandler && hookErrorHandler(err);\n preventDefault(event);\n reject (err);\n return false;\n });\n}\n\nexport function hookedEventSuccessHandler(resolve) {\n // wrap() is needed when calling hooks because the rare scenario of:\n // * hook does a db operation that fails immediately (IDB throws exception)\n // For calling db operations on correct transaction, wrap makes sure to set PSD correctly.\n // wrap() will also execute in a virtual tick.\n // * If not wrapped in a virtual tick, direct exception will launch a new physical tick.\n // * If this was the last event in the bulk, the promise will resolve after a physical tick\n // and the transaction will have committed already.\n // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise,\n // because it is always marked with _lib = true when created using Transaction._promise().\n return wrap(function(event) {\n var req = event.target,\n ctx = req._hookCtx,// Contains the hook error handler. Put here instead of closure to boost performance.\n result = ctx.value || req.result, // Pass the object value on updates. The result from IDB is the primary key.\n hookSuccessHandler = ctx && ctx.onsuccess;\n hookSuccessHandler && hookSuccessHandler(result);\n resolve && resolve(result);\n }, resolve);\n}\n\n\nexport function preventDefault(event) {\n if (event.stopPropagation) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.stopPropagation();\n if (event.preventDefault) // IndexedDBShim doesnt support this on Safari 8 and below.\n event.preventDefault();\n}\n\nexport function BulkErrorHandlerCatchAll(errorList, done?, supportHooks?) {\n return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(e => {\n errorList.push(e);\n done && done();\n });\n}\n\n","import Events from '../helpers/Events';\nimport { GlobalDexieEvents } from '../public/types/db-events';\n\nexport const DEXIE_STORAGE_MUTATED_EVENT_NAME = 'storagemutated' as 'storagemutated';\n\n// Name of the global event fired using DOM dispatchEvent (if not in node).\n// Reason for propagating this as a DOM event is for getting reactivity across\n// multiple versions of Dexie within the same app (as long as they are\n// compatible with regards to the event data).\n// If the ObservabilitySet protocol change in a way that would not be backward\n// compatible, make sure also update the event name to a new number at the end\n// so that two Dexie instances of different versions continue to work together\n// - maybe not able to communicate but won't fail due to unexpected data in\n// the detail property of the CustomEvent. If so, also make sure to udpate\n// docs and explain at which Dexie version the new name and format of the event\n// is being used.\nexport const STORAGE_MUTATED_DOM_EVENT_NAME = 'x-storagemutated-1';\n\nexport const globalEvents = Events(null, DEXIE_STORAGE_MUTATED_EVENT_NAME) as GlobalDexieEvents;\n","import { Transaction as ITransaction } from '../../public/types/transaction';\nimport { DexiePromise, wrap, rejection } from \"../../helpers/promise\";\nimport { DbSchema } from '../../public/types/db-schema';\nimport { assert, hasOwn } from '../../functions/utils';\nimport { PSD, usePSD } from '../../helpers/promise';\nimport { Dexie } from '../dexie';\nimport { exceptions } from '../../errors';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { preventDefault } from '../../functions/event-wrappers';\nimport { newScope } from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { Table } from '../table';\nimport { globalEvents } from '../../globals/global-events';\n\n/** Transaction\n * \n * https://dexie.org/docs/Transaction/Transaction\n * \n **/\nexport class Transaction implements ITransaction {\n db: Dexie;\n active: boolean;\n mode: IDBTransactionMode;\n chromeTransactionDurability: ChromeTransactionDurability;\n idbtrans: IDBTransaction;\n storeNames: string[];\n explicit?: boolean;\n on: any;\n parent?: Transaction;\n schema: DbSchema;\n _memoizedTables: {[tableName: string]: Table};\n\n _reculock: number;\n _blockedFuncs: { 0: () => any, 1: any }[];\n _resolve: () => void;\n _reject: (Error) => void;\n _waitingFor: DexiePromise; // for waitFor()\n _waitingQueue: Function[]; // for waitFor()\n _spinCount: number; // Just for debugging waitFor()\n _completion: DexiePromise;\n\n //\n // Transaction internal methods (not required by API users, but needed internally and eventually by dexie extensions)\n //\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _lock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n // Temporary set all requests into a pending queue if they are called before database is ready.\n ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage)\n if (this._reculock === 1 && !PSD.global) PSD.lockOwnerFor = this;\n return this;\n }\n\n /** Transaction._unlock()\n * \n * Internal method.\n */\n _unlock() {\n assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n if (--this._reculock === 0) {\n if (!PSD.global) PSD.lockOwnerFor = null;\n while (this._blockedFuncs.length > 0 && !this._locked()) {\n var fnAndPSD = this._blockedFuncs.shift();\n try { usePSD(fnAndPSD[1], fnAndPSD[0]); } catch (e) { }\n }\n }\n return this;\n }\n\n /** Transaction._lock()\n * \n * Internal method.\n */\n _locked() {\n // Checks if any write-lock is applied on this transaction.\n // To simplify the Dexie API for extension implementations, we support recursive locks.\n // This is accomplished by using \"Promise Specific Data\" (PSD).\n // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ).\n // PSD is local to code executing on top of the call stacks of any of any code executed by Promise():\n // * callback given to the Promise() constructor (function (resolve, reject){...})\n // * callbacks given to then()/catch()/finally() methods (function (value){...})\n // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise.\n // Derivation is done so that the inner PSD __proto__ points to the outer PSD.\n // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock.\n return this._reculock && PSD.lockOwnerFor !== this;\n }\n\n /** Transaction.create()\n * \n * Internal method.\n * \n */\n create(idbtrans?: IDBTransaction & {[prop: string]: any}) {\n if (!this.mode) return this;\n const idbdb = this.db.idbdb;\n const dbOpenError = this.db._state.dbOpenError;\n assert(!this.idbtrans);\n if (!idbtrans && !idbdb) {\n switch (dbOpenError && dbOpenError.name) {\n case \"DatabaseClosedError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.DatabaseClosed(dbOpenError);\n case \"MissingAPIError\":\n // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n default:\n // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()!\n throw new exceptions.OpenFailed(dbOpenError);\n }\n }\n if (!this.active) throw new exceptions.TransactionInactive();\n assert(this._completion._state === null); // Completion Promise must still be pending.\n\n idbtrans = this.idbtrans = idbtrans ||\n (this.db.core \n ? this.db.core.transaction(this.storeNames, this.mode as 'readwrite' | 'readonly', { durability: this.chromeTransactionDurability })\n : idbdb.transaction(this.storeNames, this.mode, { durability: this.chromeTransactionDurability })\n ) as IDBTransaction;\n\n idbtrans.onerror = wrap(ev => {\n preventDefault(ev);// Prohibit default bubbling to window.error\n this._reject(idbtrans.error);\n });\n idbtrans.onabort = wrap(ev => {\n preventDefault(ev);\n this.active && this._reject(new exceptions.Abort(idbtrans.error));\n this.active = false;\n this.on(\"abort\").fire(ev);\n });\n idbtrans.oncomplete = wrap(() => {\n this.active = false;\n this._resolve();\n if ('mutatedParts' in idbtrans) {\n globalEvents.storagemutated.fire(idbtrans[\"mutatedParts\"]);\n }\n });\n return this;\n }\n\n /** Transaction._promise()\n * \n * Internal method.\n */\n _promise(\n mode: IDBTransactionMode,\n fn: (resolve, reject, trans: Transaction) => PromiseLike | void,\n bWriteLock?: string | boolean): DexiePromise\n {\n if (mode === 'readwrite' && this.mode !== 'readwrite')\n return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n\n if (!this.active)\n return rejection(new exceptions.TransactionInactive());\n\n if (this._locked()) {\n return new DexiePromise((resolve, reject) => {\n this._blockedFuncs.push([() => {\n this._promise(mode, fn, bWriteLock).then(resolve, reject);\n }, PSD]);\n });\n\n } else if (bWriteLock) {\n return newScope(() => {\n var p = new DexiePromise((resolve, reject) => {\n this._lock();\n const rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p.finally(() => this._unlock());\n p._lib = true;\n return p;\n });\n\n } else {\n var p = new DexiePromise((resolve, reject) => {\n var rv = fn(resolve, reject, this);\n if (rv && rv.then) rv.then(resolve, reject);\n });\n p._lib = true;\n return p;\n }\n }\n\n /** Transaction._root()\n * \n * Internal method. Retrieves the root transaction in the tree of sub transactions.\n */\n _root() {\n return this.parent ? this.parent._root() : this;\n }\n\n /** Transaction.waitFor()\n * \n * Internal method. Can be accessed from the public API through\n * Dexie.waitFor(): https://dexie.org/docs/Dexie/Dexie.waitFor()\n * \n **/\n waitFor(promiseLike: PromiseLike) {\n // Always operate on the root transaction (in case this is a sub stransaction)\n var root = this._root();\n // For stability reasons, convert parameter to promise no matter what type is passed to waitFor().\n // (We must be able to call .then() on it.)\n const promise = DexiePromise.resolve(promiseLike);\n if (root._waitingFor) {\n // Already called waitFor(). Wait for both to complete.\n root._waitingFor = root._waitingFor.then(() => promise);\n } else {\n // We're not in waiting state. Start waiting state.\n root._waitingFor = promise;\n root._waitingQueue = [];\n // Start interacting with indexedDB until promise completes:\n var store = root.idbtrans.objectStore(root.storeNames[0]);\n (function spin() {\n ++root._spinCount; // For debugging only\n while (root._waitingQueue.length) (root._waitingQueue.shift())();\n if (root._waitingFor) store.get(-Infinity).onsuccess = spin;\n }());\n }\n var currentWaitPromise = root._waitingFor;\n return new DexiePromise((resolve, reject) => {\n promise.then(\n res => root._waitingQueue.push(wrap(resolve.bind(null, res))),\n err => root._waitingQueue.push(wrap(reject.bind(null, err)))\n ).finally(() => {\n if (root._waitingFor === currentWaitPromise) {\n // No one added a wait after us. Safe to stop the spinning.\n root._waitingFor = null;\n }\n });\n });\n } \n\n /** Transaction.abort()\n * \n * https://dexie.org/docs/Transaction/Transaction.abort()\n */\n abort() {\n if (this.active) {\n this.active = false;\n if (this.idbtrans) this.idbtrans.abort();\n this._reject(new exceptions.Abort());\n }\n }\n\n /** Transaction.table()\n * \n * https://dexie.org/docs/Transaction/Transaction.table()\n */\n table(tableName: string) {\n const memoizedTables = (this._memoizedTables || (this._memoizedTables = {}));\n if (hasOwn(memoizedTables, tableName))\n return memoizedTables[tableName];\n const tableSchema = this.schema[tableName];\n if (!tableSchema) {\n throw new exceptions.NotFound(\"Table \" + tableName + \" not part of transaction\"); \n }\n\n const transactionBoundTable = new this.db.Table(tableName, tableSchema, this);\n transactionBoundTable.core = this.db.core.table(tableName);\n memoizedTables[tableName] = transactionBoundTable;\n return transactionBoundTable;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Transaction } from './transaction';\nimport { DbSchema } from '../../public/types/db-schema';\nimport Events from '../../helpers/Events';\nimport Promise, { rejection } from '../../helpers/promise';\n\nexport interface TransactionConstructor {\n new (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction) : T;\n prototype: T;\n}\n\n/** Generates a Transaction constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createTransactionConstructor(db: Dexie) {\n return makeClassConstructor>(\n Transaction.prototype,\n function Transaction (\n this: Transaction,\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n chromeTransactionDurability: ChromeTransactionDurability,\n parent?: Transaction)\n {\n this.db = db;\n this.mode = mode;\n this.storeNames = storeNames;\n this.schema = dbschema;\n this.chromeTransactionDurability = chromeTransactionDurability;\n this.idbtrans = null;\n this.on = Events(this, \"complete\", \"error\", \"abort\");\n this.parent = parent || null;\n this.active = true;\n this._reculock = 0;\n this._blockedFuncs = [];\n this._resolve = null;\n this._reject = null;\n this._waitingFor = null;\n this._waitingQueue = null;\n this._spinCount = 0; // Just for debugging waitFor()\n this._completion = new Promise ((resolve, reject) => {\n this._resolve = resolve;\n this._reject = reject;\n });\n \n this._completion.then(\n ()=> {\n this.active = false;\n this.on.complete.fire();\n },\n e => {\n var wasActive = this.active;\n this.active = false;\n this.on.error.fire(e);\n this.parent ?\n this.parent._reject(e) :\n wasActive && this.idbtrans && this.idbtrans.abort();\n return rejection(e); // Indicate we actually DO NOT catch this error.\n });\n \n });\n}\n","import { IndexSpec } from '../public/types/index-spec';\n\nexport function createIndexSpec(\n name: string,\n keyPath: string | string[],\n unique: boolean,\n multi: boolean,\n auto: boolean,\n compound: boolean,\n isPrimKey: boolean\n): IndexSpec {\n return {\n name,\n keyPath,\n unique,\n multi,\n auto,\n compound,\n src: (unique && !isPrimKey ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + nameFromKeyPath(keyPath)\n }\n}\n\nexport function nameFromKeyPath (keyPath?: string | string[]): string {\n return typeof keyPath === 'string' ?\n keyPath :\n keyPath ? ('[' + [].join.call(keyPath, '+') + ']') : \"\";\n}\n","import { IndexSpec } from '../public/types/index-spec';\nimport { TableSchema } from '../public/types/table-schema';\nimport { createIndexSpec } from './index-spec';\nimport { arrayToObject } from '../functions/utils';\n\nexport function createTableSchema (\n name: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n): TableSchema {\n return {\n name,\n primKey,\n indexes,\n mappedClass: null,\n idxByName: arrayToObject(indexes, index => [index.name, index])\n };\n}\n","import { maxString } from '../globals/constants';\n\nexport function safariMultiStoreFix(storeNames: string[]) {\n return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\n\nexport function getNativeGetDatabaseNamesFn(indexedDB) {\n var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n return fn && fn.bind(indexedDB);\n}\n\nexport let getMaxKey = (IdbKeyRange: typeof IDBKeyRange) => {\n try {\n IdbKeyRange.only([[]]);\n getMaxKey = () => [[]];\n return [[]];\n } catch (e) {\n getMaxKey = () => maxString;\n return maxString;\n }\n}\n","import { getByKeyPath } from '../functions/utils';\n\nexport function getKeyExtractor (keyPath: null | string | string[]) : (a: any) => any {\n if (keyPath == null) {\n return () => undefined;\n } else if (typeof keyPath === 'string') {\n return getSinglePathKeyExtractor(keyPath);\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n\nexport function getSinglePathKeyExtractor(keyPath: string) {\n const split = keyPath.split('.');\n if (split.length === 1) {\n return obj => obj[keyPath];\n } else {\n return obj => getByKeyPath(obj, keyPath);\n }\n}\n","import {\n DBCore,\n DBCoreCursor,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryResponse,\n DBCoreRangeType,\n DBCoreSchema,\n DBCoreTableSchema,\n DBCoreTable,\n DBCoreMutateResponse,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { eventRejectHandler, preventDefault } from '../functions/event-wrappers';\nimport { wrap } from '../helpers/promise';\nimport { getMaxKey } from '../functions/quirks';\nimport { getKeyExtractor } from './get-key-extractor';\n\nexport function arrayify(arrayLike: {length: number, [index: number]: T}): T[] {\n return [].slice.call(arrayLike);\n}\nexport function pick(obj: T, props: Prop[]): Pick {\n const result = {} as Pick;\n props.forEach(prop => result[prop] = obj[prop]);\n return result;\n}\n\nlet _id_counter = 0;\n\nexport function getKeyPathAlias(keyPath: null | string | string[]) {\n return keyPath == null ?\n \":id\" :\n typeof keyPath === 'string' ?\n keyPath :\n `[${keyPath.join('+')}]`;\n}\n\nexport function createDBCore (\n db: IDBDatabase,\n IdbKeyRange: typeof IDBKeyRange,\n tmpTrans: IDBTransaction) : DBCore\n{\n function extractSchema(db: IDBDatabase, trans: IDBTransaction) : {schema: DBCoreSchema, hasGetAll: boolean} {\n const tables = arrayify(db.objectStoreNames);\n return {\n schema: {\n name: db.name,\n tables: tables.map(table => trans.objectStore(table)).map(store => {\n const {keyPath, autoIncrement} = store;\n const compound = isArray(keyPath);\n const outbound = keyPath == null;\n const indexByKeyPath: {[keyPathAlias: string]: DBCoreIndex} = {};\n const result = {\n name: store.name,\n primaryKey: {\n name: null,\n isPrimaryKey: true,\n outbound,\n compound,\n keyPath,\n autoIncrement,\n unique: true,\n extractKey: getKeyExtractor(keyPath)\n } as DBCoreIndex,\n indexes: arrayify(store.indexNames).map(indexName => store.index(indexName))\n .map(index => {\n const {name, unique, multiEntry, keyPath} = index;\n const compound = isArray(keyPath);\n const result: DBCoreIndex = {\n name,\n compound,\n keyPath,\n unique,\n multiEntry,\n extractKey: getKeyExtractor(keyPath)\n };\n indexByKeyPath[getKeyPathAlias(keyPath)] = result;\n return result;\n }),\n getIndexByKeyPath: (keyPath: null | string | string[]) => indexByKeyPath[getKeyPathAlias(keyPath)]\n };\n indexByKeyPath[\":id\"] = result.primaryKey;\n if (keyPath != null) {\n indexByKeyPath[getKeyPathAlias(keyPath)] = result.primaryKey;\n }\n return result;\n })\n },\n hasGetAll: tables.length > 0 && ('getAll' in trans.objectStore(tables[0])) &&\n !(typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) // Bug with getAll() on Safari ver<604. See discussion following PR #579\n };\n }\n\n function makeIDBKeyRange (range: DBCoreKeyRange) : IDBKeyRange | null {\n if (range.type === DBCoreRangeType.Any) return null;\n if (range.type === DBCoreRangeType.Never) throw new Error(\"Cannot convert never type to IDBKeyRange\");\n const {lower, upper, lowerOpen, upperOpen} = range;\n const idbRange = lower === undefined ?\n upper === undefined ?\n null : //IDBKeyRange.lowerBound(-Infinity, false) : // Any range (TODO: Should we return null instead?)\n IdbKeyRange.upperBound(upper, !!upperOpen) : // below\n upper === undefined ?\n IdbKeyRange.lowerBound(lower, !!lowerOpen) : // above\n IdbKeyRange.bound(lower, upper, !!lowerOpen, !!upperOpen);\n return idbRange;\n }\n\n function createDbCoreTable(tableSchema: DBCoreTableSchema): DBCoreTable {\n const tableName = tableSchema.name;\n\n function mutate ({trans, type, keys, values, range}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const outbound = store.keyPath == null;\n const isAddOrPut = type === \"put\" || type === \"add\";\n if (!isAddOrPut && type !== 'delete' && type !== 'deleteRange')\n throw new Error (\"Invalid operation type: \" + type);\n\n const {length} = keys || values || {length: 1}; // keys.length if keys. values.length if values. 1 if range.\n if (keys && values && keys.length !== values.length) {\n throw new Error(\"Given keys array must have same length as given values array.\");\n }\n if (length === 0)\n // No items to write. Don't even bother!\n return resolve({numFailures: 0, failures: {}, results: [], lastResult: undefined});\n\n let req: IDBRequest;\n const reqs: IDBRequest[] = [];\n \n const failures: {[operationNumber: number]: Error} = [];\n let numFailures = 0;\n const errorHandler = \n event => {\n ++numFailures;\n preventDefault(event);\n };\n \n if (type === 'deleteRange') {\n // Here the argument is the range\n if (range.type === DBCoreRangeType.Never)\n return resolve({numFailures, failures, results: [], lastResult: undefined}); // Deleting the Never range shoulnt do anything.\n if (range.type === DBCoreRangeType.Any)\n reqs.push(req = store.clear()); // Deleting the Any range is equivalent to store.clear()\n else\n reqs.push(req = store.delete(makeIDBKeyRange(range)));\n } else {\n // No matter add, put or delete - find out arrays of first and second arguments to it.\n const [args1, args2] = isAddOrPut ?\n outbound ?\n [values, keys] :\n [values, null] :\n [keys, null];\n\n if (isAddOrPut) {\n for (let i=0; i {\n const lastResult = event.target.result;\n reqs.forEach((req, i) => req.error != null && (failures[i] = req.error));\n resolve({\n numFailures,\n failures,\n results: type === \"delete\" ? keys : reqs.map(req => req.result),\n lastResult\n });\n };\n \n req.onerror = event => { // wrap() not needed. All paths calling outside will wrap!\n errorHandler(event);\n done(event);\n };\n \n req.onsuccess = done;\n });\n }\n \n function openCursor ({trans, values, query, reverse, unique}: DBCoreOpenCursorRequest): Promise\n {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n // source\n const source = index.isPrimaryKey ?\n store :\n store.index(index.name);\n // direction\n const direction = reverse ?\n unique ?\n \"prevunique\" :\n \"prev\" :\n unique ?\n \"nextunique\" :\n \"next\";\n // request\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(makeIDBKeyRange(range), direction) :\n source.openKeyCursor(makeIDBKeyRange(range), direction);\n \n // iteration\n req.onerror = eventRejectHandler(reject);\n req.onsuccess = wrap(ev => {\n\n const cursor = req.result as unknown as DBCoreCursor;\n if (!cursor) {\n resolve(null);\n return;\n }\n (cursor as any).___id = ++_id_counter;\n (cursor as any).done = false;\n const _cursorContinue = cursor.continue.bind(cursor);\n let _cursorContinuePrimaryKey = cursor.continuePrimaryKey;\n if (_cursorContinuePrimaryKey) _cursorContinuePrimaryKey = _cursorContinuePrimaryKey.bind(cursor);\n const _cursorAdvance = cursor.advance.bind(cursor);\n const doThrowCursorIsNotStarted = ()=>{throw new Error(\"Cursor not started\");}\n const doThrowCursorIsStopped = ()=>{throw new Error(\"Cursor not stopped\");}\n (cursor as any).trans = trans;\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsNotStarted;\n cursor.fail = wrap(reject);\n cursor.next = function (this: DBCoreCursor) {\n // next() must work with \"this\" pointer in order to function correctly for ProxyCursors (derived objects)\n // without having to re-define next() on each child.\n let gotOne = 1;\n return this.start(() => gotOne-- ? this.continue() : this.stop()).then(() => this);\n };\n cursor.start = (callback) => {\n //console.log(\"Starting cursor\", (cursor as any).___id);\n const iterationPromise = new Promise((resolveIteration, rejectIteration) =>{\n resolveIteration = wrap(resolveIteration);\n req.onerror = eventRejectHandler(rejectIteration);\n cursor.fail = rejectIteration;\n cursor.stop = value => {\n //console.log(\"Cursor stop\", cursor);\n cursor.stop = cursor.continue = cursor.continuePrimaryKey = cursor.advance = doThrowCursorIsStopped;\n resolveIteration(value);\n };\n });\n // Now change req.onsuccess to a callback that doesn't call initCursor but just observer.next()\n const guardedCallback = () => {\n if (req.result) {\n //console.log(\"Next result\", cursor);\n try {\n callback();\n } catch (err) {\n cursor.fail(err);\n }\n } else {\n (cursor as any).done = true;\n cursor.start = ()=>{throw new Error(\"Cursor behind last entry\");}\n cursor.stop();\n }\n }\n req.onsuccess = wrap(ev => {\n //cursor.continue = _cursorContinue;\n //cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n //cursor.advance = _cursorAdvance;\n req.onsuccess = guardedCallback;\n guardedCallback();\n });\n cursor.continue = _cursorContinue;\n cursor.continuePrimaryKey = _cursorContinuePrimaryKey;\n cursor.advance = _cursorAdvance;\n guardedCallback();\n return iterationPromise;\n };\n resolve(cursor);\n }, reject); \n });\n }\n \n function query (hasGetAll: boolean) {\n return (request: DBCoreQueryRequest) => {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const {trans, values, limit, query} = request;\n const nonInfinitLimit = limit === Infinity ? undefined : limit;\n const {index, range} = query;\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n if (limit === 0) return resolve({result: []});\n if (hasGetAll) {\n const req = values ?\n (source as any).getAll(idbKeyRange, nonInfinitLimit) :\n (source as any).getAllKeys(idbKeyRange, nonInfinitLimit);\n req.onsuccess = event => resolve({result: event.target.result});\n req.onerror = eventRejectHandler(reject);\n } else {\n let count = 0;\n const req = values || !('openKeyCursor' in source) ?\n source.openCursor(idbKeyRange) :\n source.openKeyCursor(idbKeyRange)\n const result = [];\n req.onsuccess = event => {\n const cursor = req.result as IDBCursorWithValue;\n if (!cursor) return resolve({result});\n result.push(values ? cursor.value : cursor.primaryKey);\n if (++count === limit) return resolve({result});\n cursor.continue();\n };\n req.onerror = eventRejectHandler(reject);\n }\n });\n };\n }\n \n return {\n name: tableName,\n schema: tableSchema,\n \n mutate,\n\n getMany ({trans, keys}) {\n return new Promise((resolve, reject) => {\n resolve = wrap(resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const length = keys.length;\n const result = new Array(length);\n let keyCount = 0;\n let callbackCount = 0;\n let valueCount = 0;\n let req: IDBRequest & {_pos?: number};\n \n const successHandler = event => {\n const req = event.target;\n if ((result[req._pos] = req.result) != null) ++valueCount;\n if (++callbackCount === keyCount) resolve(result);\n };\n const errorHandler = eventRejectHandler(reject);\n \n for (let i=0; i((resolve, reject) => {\n resolve = wrap (resolve);\n const store = (trans as IDBTransaction).objectStore(tableName);\n const req = store.get(key);\n req.onsuccess = event => resolve((event.target as any).result);\n req.onerror = eventRejectHandler(reject);\n });\n },\n\n query: query(hasGetAll),\n \n openCursor,\n\n count ({query, trans}) {\n const {index, range} = query;\n return new Promise((resolve, reject) => {\n const store = (trans as IDBTransaction).objectStore(tableName);\n const source = index.isPrimaryKey ? store : store.index(index.name);\n const idbKeyRange = makeIDBKeyRange(range);\n const req = idbKeyRange ? source.count(idbKeyRange) : source.count();\n req.onsuccess = wrap(ev => resolve((ev.target as IDBRequest).result));\n req.onerror = eventRejectHandler(reject);\n });\n }\n };\n }\n\n const {schema, hasGetAll} = extractSchema(db, tmpTrans);\n const tables = schema.tables.map(tableSchema => createDbCoreTable(tableSchema));\n const tableMap: {[name: string]: DBCoreTable} = {};\n tables.forEach(table => tableMap[table.name] = table);\n return {\n stack: \"dbcore\",\n \n transaction: db.transaction.bind(db),\n\n table(name: string) {\n const result = tableMap[name];\n if (!result) throw new Error(`Table '${name}' not found`);\n return tableMap[name];\n },\n\n MIN_KEY: -Infinity,\n\n MAX_KEY: getMaxKey(IdbKeyRange),\n\n schema\n\n };\n}\n","import { Dexie } from './';\nimport { createDBCore } from '../../dbcore/dbcore-indexeddb';\nimport { DBCore } from '../../public/types/dbcore';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { DexieStacks, Middleware } from '../../public/types/middleware';\nimport { exceptions } from '../../errors';\n\nfunction createMiddlewareStack(\n stackImpl: {stack: string},\n middlewares: Middleware<{stack: string}>[]): TStack {\n return middlewares.reduce((down, {create}) => ({...down, ...create(down)}), stackImpl) as TStack;\n} \n\nfunction createMiddlewareStacks(\n middlewares: {[StackName in keyof DexieStacks]?: Middleware[]},\n idbdb: IDBDatabase,\n {IDBKeyRange, indexedDB}: DexieDOMDependencies,\n tmpTrans: IDBTransaction): {[StackName in keyof DexieStacks]?: DexieStacks[StackName]}\n{\n const dbcore = createMiddlewareStack(\n createDBCore(idbdb, IDBKeyRange, tmpTrans),\n middlewares.dbcore);\n \n // TODO: Create other stacks the same way as above. They might be dependant on the result\n // of creating dbcore stack.\n\n return {\n dbcore\n };\n}\n\nexport function generateMiddlewareStacks(db: Dexie, tmpTrans: IDBTransaction) {\n const idbdb = tmpTrans.db;\n const stacks = createMiddlewareStacks(db._middlewares, idbdb, db._deps, tmpTrans);\n db.core = stacks.dbcore!;\n db.tables.forEach(table => {\n const tableName = table.name;\n if (db.core.schema.tables.some(tbl => tbl.name === tableName)) {\n table.core = db.core.table(tableName);\n if (db[tableName] instanceof db.Table) {\n db[tableName].core = table.core;\n }\n }\n });\n}\n","import { Dexie } from '../dexie';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { _global } from \"../../globals/global\";\nimport { setProp, keys, slice, isArray, shallowClone, isAsyncFunction, defineProperty, getPropertyDescriptor } from '../../functions/utils';\nimport { Transaction } from '../transaction';\nimport { Version } from './version';\nimport Promise, { PSD, newScope, NativePromise, decrementExpectedAwaits, incrementExpectedAwaits } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { TableSchema } from '../../public/types/table-schema';\nimport { IndexSpec } from '../../public/types/index-spec';\nimport { createIndexSpec, nameFromKeyPath } from '../../helpers/index-spec';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { generateMiddlewareStacks } from '../dexie/generate-middleware-stacks';\nimport { debug } from '../../helpers/debug';\nimport { PromiseExtended } from '../../public/types/promise-extended';\n\nexport function setApiOnPlace(db: Dexie, objs: Object[], tableNames: string[], dbschema: DbSchema) {\n tableNames.forEach(tableName => {\n const schema = dbschema[tableName];\n objs.forEach(obj => {\n const propDesc = getPropertyDescriptor(obj, tableName);\n if (!propDesc || (\"value\" in propDesc && propDesc.value === undefined)) {\n // Either the prop is not declared, or it is initialized to undefined.\n if (obj === db.Transaction.prototype || obj instanceof db.Transaction) {\n // obj is a Transaction prototype (or prototype of a subclass to Transaction)\n // Make the API a getter that returns this.table(tableName)\n setProp(obj, tableName, {\n get(this: Transaction) { return this.table(tableName); },\n set(value: any) {\n // Issue #1039\n // Let \"this.schema = dbschema;\" and other props in transaction constructor work even if there's a name collision with the table name.\n defineProperty(this, tableName, {value, writable: true, configurable: true, enumerable: true});\n }\n });\n } else {\n // Table will not be bound to a transaction (will use Dexie.currentTransaction)\n obj[tableName] = new db.Table(tableName, schema);\n }\n }\n });\n });\n}\n\nexport function removeTablesApi(db: Dexie, objs: Object[]) {\n objs.forEach(obj => {\n for (let key in obj) {\n if (obj[key] instanceof db.Table) delete obj[key];\n }\n });\n}\n\nexport function lowerVersionFirst(a: Version, b: Version) {\n return a._cfg.version - b._cfg.version;\n}\n\nexport function runUpgraders(db: Dexie, oldVersion: number, idbUpgradeTrans: IDBTransaction, reject) {\n const globalSchema = db._dbSchema;\n if (idbUpgradeTrans.objectStoreNames.contains('$meta') && !globalSchema.$meta) {\n globalSchema.$meta = createTableSchema(\"$meta\", parseIndexSyntax(\"\")[0], []);\n db._storeNames.push('$meta');\n }\n const trans = db._createTransaction('readwrite', db._storeNames, globalSchema);\n trans.create(idbUpgradeTrans);\n trans._completion.catch(reject);\n const rejectTransaction = trans._reject.bind(trans);\n const transless = PSD.transless || PSD;\n newScope(() => {\n PSD.trans = trans;\n PSD.transless = transless;\n if (oldVersion === 0) {\n // Create tables:\n keys(globalSchema).forEach(tableName => {\n createTable(idbUpgradeTrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n });\n generateMiddlewareStacks(db, idbUpgradeTrans);\n Promise.follow(() => db.on.populate.fire(trans)).catch(rejectTransaction);\n } else {\n generateMiddlewareStacks(db, idbUpgradeTrans);\n return getExistingVersion(db, trans, oldVersion)\n .then(oldVersion => updateTablesAndIndexes(db, oldVersion, trans, idbUpgradeTrans))\n .catch(rejectTransaction);\n }\n });\n}\n\nexport type UpgradeQueueItem = (idbtrans: IDBTransaction) => PromiseLike | void;\n\nexport function patchCurrentVersion(db: Dexie, idbUpgradeTrans: IDBTransaction) {\n createMissingTables(db._dbSchema, idbUpgradeTrans);\n if (idbUpgradeTrans.db.version % 10 === 0 && !idbUpgradeTrans.objectStoreNames.contains('$meta')) {\n // Rolled over to the next 10-ies due to many schema upgrades without bumping version.\n // No problem! We pin the database to its expected version by adding the $meta table so that next\n // time the programmer bumps the version and attaches, an upgrader, that upgrader will indeed run,\n // as well any further upgraders coming after that.\n idbUpgradeTrans.db.createObjectStore('$meta').add(Math.ceil((idbUpgradeTrans.db.version / 10) - 1), 'version');\n }\n const globalSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n adjustToExistingIndexNames(db, db._dbSchema, idbUpgradeTrans);\n const diff = getSchemaDiff(globalSchema, db._dbSchema);\n for (const tableChange of diff.change) {\n if (tableChange.change.length || tableChange.recreate) {\n console.warn(`Unable to patch indexes of table ${tableChange.name} because it has changes on the type of index or primary key.`);\n return;\n }\n const store = idbUpgradeTrans.objectStore(tableChange.name);\n tableChange.add.forEach(idx => {\n if (debug) console.debug(`Dexie upgrade patch: Creating missing index ${tableChange.name}.${idx.src}`);\n addIndex(store, idx);\n });\n }\n}\n\nfunction getExistingVersion(db: Dexie, trans: Transaction, oldVersion: number): PromiseExtended {\n // In normal case, existing version is the native installed version divided by 10.\n // However, in case more than 10 schema changes have been made on the same version (such as while\n // developing an app), the native version may have passed beyond a multiple of 10 within the same version.\n // When that happens, a table $meta will have been created, containing a single entry with key \"version\"\n // and the value of the real old version to use when running upgraders going forward.\n if (trans.storeNames.includes('$meta')) {\n return trans.table('$meta').get('version').then(metaVersion => {\n return metaVersion != null ? metaVersion : oldVersion\n })\n } else {\n return Promise.resolve(oldVersion);\n }\n}\n\nfunction updateTablesAndIndexes(\n db: Dexie,\n oldVersion: number,\n trans: Transaction,\n idbUpgradeTrans: IDBTransaction)\n{\n // Upgrade version to version, step-by-step from oldest to newest version.\n // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version)\n const queue: UpgradeQueueItem[] = [];\n const versions = db._versions;\n let globalSchema = db._dbSchema = buildGlobalSchema(db, db.idbdb, idbUpgradeTrans);\n let anyContentUpgraderHasRun = false;\n \n const versToRun = versions.filter(v => v._cfg.version >= oldVersion);\n if (versToRun.length === 0) {\n // Important not to continue at this point.\n // Coming here means we've already patched schema in patchCurrentVersion() after having\n // incremented native version to a value above the declared highest version.\n // When being in this mode, it means that there might be different versions the db competing\n // about it with different version of the schema. Therefore, we must avoid deleting tables\n // or indexes here so that both versions can co-exist until the application has been upgraded to\n // a version that declares no lower than the native version.\n // If after that, a downgrade happens again, we'll end up here again, accepting both versions\n // And we'll stay in this state until app developer releases a new declared version.\n return Promise.resolve(); \n }\n \n versToRun.forEach(version => {\n queue.push(() => {\n const oldSchema = globalSchema;\n const newSchema = version._cfg.dbschema;\n adjustToExistingIndexNames(db, oldSchema, idbUpgradeTrans);\n adjustToExistingIndexNames(db, newSchema, idbUpgradeTrans);\n\n globalSchema = db._dbSchema = newSchema;\n\n const diff = getSchemaDiff(oldSchema, newSchema);\n // Add tables \n diff.add.forEach(tuple => {\n createTable(idbUpgradeTrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n });\n // Change tables\n diff.change.forEach(change => {\n if (change.recreate) {\n throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n } else {\n const store = idbUpgradeTrans.objectStore(change.name);\n // Add indexes\n change.add.forEach(idx => addIndex(store, idx));\n // Update indexes\n change.change.forEach(idx => {\n store.deleteIndex(idx.name);\n addIndex(store, idx);\n });\n // Delete indexes\n change.del.forEach(idxName => store.deleteIndex(idxName));\n }\n });\n\n const contentUpgrade = version._cfg.contentUpgrade;\n\n if (contentUpgrade && version._cfg.version > oldVersion) {\n // Update db.core with new tables and indexes:\n generateMiddlewareStacks(db, idbUpgradeTrans);\n trans._memoizedTables = {}; // Invalidate memoization as transaction shape may change between versions.\n\n anyContentUpgraderHasRun = true;\n\n // Add to-be-deleted tables to contentUpgrade transaction\n let upgradeSchema = shallowClone(newSchema);\n diff.del.forEach(table => {\n upgradeSchema[table] = oldSchema[table];\n });\n\n // Safe to affect Transaction.prototype globally in this moment,\n // because when this code runs, there may not be any other code\n // that can access any transaction instance, else than this particular\n // upgrader function.\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], keys(upgradeSchema), upgradeSchema);\n trans.schema = upgradeSchema;\n\n // Support for native async await.\n const contentUpgradeIsAsync = isAsyncFunction(contentUpgrade);\n if (contentUpgradeIsAsync) {\n incrementExpectedAwaits();\n }\n \n let returnValue: any;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = contentUpgrade(trans);\n if (returnValue) {\n if (contentUpgradeIsAsync) {\n // contentUpgrade is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n }\n }\n });\n return (returnValue && typeof returnValue.then === 'function' ?\n Promise.resolve(returnValue) : promiseFollowed.then(()=>returnValue));\n }\n });\n queue.push(idbtrans => {\n const newSchema = version._cfg.dbschema;\n // Delete old tables\n deleteRemovedTables(newSchema, idbtrans);\n // Restore the final API\n removeTablesApi(db, [db.Transaction.prototype]);\n setApiOnPlace(db, [db.Transaction.prototype], db._storeNames, db._dbSchema);\n trans.schema = db._dbSchema;\n });\n // Maintain the $meta table after this version's tables and indexes has been created and content upgraders have run.\n queue.push(idbtrans => {\n if (db.idbdb.objectStoreNames.contains('$meta')) {\n if (Math.ceil(db.idbdb.version / 10) === version._cfg.version) {\n // Remove $meta table if it's no more needed - we are in line with the native version\n db.idbdb.deleteObjectStore('$meta');\n delete db._dbSchema.$meta;\n db._storeNames = db._storeNames.filter(name => name !== '$meta');\n } else {\n // We're still not in line with the native version. Make sure to update the virtual version\n // to the successfully run version\n idbtrans.objectStore('$meta').put(version._cfg.version, 'version');\n }\n }\n }); \n });\n\n // Now, create a queue execution engine\n function runQueue() {\n return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) :\n Promise.resolve();\n }\n\n return runQueue().then(() => {\n createMissingTables(globalSchema, idbUpgradeTrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version)\n });\n}\n\nexport interface SchemaDiff {\n del: string[],\n add: [string, TableSchema][];\n change: TableSchemaDiff[];\n}\n\nexport interface TableSchemaDiff {\n name: string,\n recreate: boolean,\n del: string[],\n add: IndexSpec[],\n change: IndexSpec[]\n}\n\nexport function getSchemaDiff(oldSchema: DbSchema, newSchema: DbSchema): SchemaDiff {\n const diff: SchemaDiff = {\n del: [], // Array of table names\n add: [], // Array of [tableName, newDefinition]\n change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}\n };\n let table: string;\n for (table in oldSchema) {\n if (!newSchema[table]) diff.del.push(table);\n }\n for (table in newSchema) {\n const oldDef = oldSchema[table],\n newDef = newSchema[table];\n if (!oldDef) {\n diff.add.push([table, newDef]);\n } else {\n const change = {\n name: table,\n def: newDef,\n recreate: false,\n del: [],\n add: [],\n change: []\n };\n if (\n (\n // compare keyPaths no matter if string or string[]\n // compare falsy keypaths same no matter if they are null or empty string.\n ''+(oldDef.primKey.keyPath||'')\n ) !== (\n ''+(newDef.primKey.keyPath||'')\n ) ||\n // Compare the autoIncrement flag also\n (oldDef.primKey.auto !== newDef.primKey.auto))\n {\n // Primary key has changed. Remove and re-add table.\n change.recreate = true;\n diff.change.push(change);\n } else {\n // Same primary key. Just find out what differs:\n const oldIndexes = oldDef.idxByName;\n const newIndexes = newDef.idxByName;\n let idxName: string;\n for (idxName in oldIndexes) {\n if (!newIndexes[idxName]) change.del.push(idxName);\n }\n for (idxName in newIndexes) {\n const oldIdx = oldIndexes[idxName],\n newIdx = newIndexes[idxName];\n if (!oldIdx) change.add.push(newIdx);\n else if (oldIdx.src !== newIdx.src) change.change.push(newIdx);\n }\n if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n diff.change.push(change);\n }\n }\n }\n }\n return diff;\n}\n\nexport function createTable(\n idbtrans: IDBTransaction,\n tableName: string,\n primKey: IndexSpec,\n indexes: IndexSpec[]\n) {\n const store = idbtrans.db.createObjectStore(\n tableName,\n primKey.keyPath ?\n { keyPath: primKey.keyPath, autoIncrement: primKey.auto } :\n { autoIncrement: primKey.auto }\n );\n indexes.forEach(idx => addIndex(store, idx));\n return store;\n}\n\nexport function createMissingTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n keys(newSchema).forEach(tableName => {\n if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n if (debug) console.debug('Dexie: Creating missing table', tableName);\n createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n }\n });\n}\n\nexport function deleteRemovedTables(newSchema: DbSchema, idbtrans: IDBTransaction) {\n [].slice.call(idbtrans.db.objectStoreNames).forEach(storeName =>\n newSchema[storeName] == null && idbtrans.db.deleteObjectStore(storeName));\n}\n\nexport function addIndex(store: IDBObjectStore, idx: IndexSpec) {\n store.createIndex(idx.name, idx.keyPath, { unique: idx.unique, multiEntry: idx.multi });\n}\n\nfunction buildGlobalSchema(\n db: Dexie,\n idbdb: IDBDatabase,\n tmpTrans: IDBTransaction\n) {\n const globalSchema = {};\n const dbStoreNames = slice(idbdb.objectStoreNames, 0);\n dbStoreNames.forEach(storeName => {\n const store = tmpTrans.objectStore(storeName);\n let keyPath = store.keyPath;\n const primKey = createIndexSpec(\n nameFromKeyPath(keyPath),\n keyPath || \"\",\n true,\n false,\n !!store.autoIncrement,\n keyPath && typeof keyPath !== \"string\",\n true\n );\n const indexes: IndexSpec[] = [];\n for (let j = 0; j < store.indexNames.length; ++j) {\n const idbindex = store.index(store.indexNames[j]);\n keyPath = idbindex.keyPath;\n var index = createIndexSpec(\n idbindex.name,\n keyPath,\n !!idbindex.unique,\n !!idbindex.multiEntry,\n false,\n keyPath && typeof keyPath !== \"string\",\n false\n );\n indexes.push(index);\n }\n globalSchema[storeName] = createTableSchema(storeName, primKey, indexes);\n });\n return globalSchema;\n}\n\nexport function readGlobalSchema(db: Dexie, idbdb: IDBDatabase, tmpTrans: IDBTransaction) {\n db.verno = idbdb.version / 10;\n const globalSchema = db._dbSchema = buildGlobalSchema(db, idbdb, tmpTrans);\n db._storeNames = slice(idbdb.objectStoreNames, 0);\n setApiOnPlace(db, [db._allTables], keys(globalSchema), globalSchema);\n}\n\nexport function verifyInstalledSchema(db: Dexie, tmpTrans: IDBTransaction): boolean {\n const installedSchema = buildGlobalSchema(db, db.idbdb, tmpTrans);\n const diff = getSchemaDiff(installedSchema, db._dbSchema);\n return !(diff.add.length || diff.change.some(ch => ch.add.length || ch.change.length));\n}\n\nexport function adjustToExistingIndexNames(db: Dexie, schema: DbSchema, idbtrans: IDBTransaction) {\n // Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db\n const storeNames = idbtrans.db.objectStoreNames;\n\n for (let i = 0; i < storeNames.length; ++i) {\n const storeName = storeNames[i];\n const store = idbtrans.objectStore(storeName);\n db._hasGetAll = 'getAll' in store;\n\n for (let j = 0; j < store.indexNames.length; ++j) {\n const indexName = store.indexNames[j];\n const keyPath = store.index(indexName).keyPath;\n const dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n if (schema[storeName]) {\n const indexSpec = schema[storeName].idxByName[dexieName];\n if (indexSpec) {\n indexSpec.name = indexName;\n delete schema[storeName].idxByName[dexieName];\n schema[storeName].idxByName[indexName] = indexSpec;\n }\n }\n }\n }\n\n // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579\n if (typeof navigator !== 'undefined' && /Safari/.test(navigator.userAgent) &&\n !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) &&\n _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope &&\n [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604)\n {\n db._hasGetAll = false;\n }\n}\n\nexport function parseIndexSyntax(primKeyAndIndexes: string): IndexSpec[] {\n return primKeyAndIndexes.split(',').map((index, indexNum) => {\n index = index.trim();\n const name = index.replace(/([&*]|\\+\\+)/g, \"\"); // Remove \"&\", \"++\" and \"*\"\n // Let keyPath of \"[a+b]\" be [\"a\",\"b\"]:\n const keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n\n return createIndexSpec(\n name,\n keyPath || null,\n /\\&/.test(index),\n /\\*/.test(index),\n /\\+\\+/.test(index),\n isArray(keyPath),\n indexNum === 0\n );\n });\n}\n","import { Version as IVersion } from '../../public/types/version';\nimport { DbSchema } from '../../public/types/db-schema';\nimport { extend, keys } from '../../functions/utils';\nimport { Dexie } from '../dexie';\nimport { Transaction } from '../transaction';\nimport { removeTablesApi, setApiOnPlace, parseIndexSyntax } from './schema-helpers';\nimport { exceptions } from '../../errors';\nimport { createTableSchema } from '../../helpers/table-schema';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\n\n/** class Version\n *\n * https://dexie.org/docs/Version/Version\n */\nexport class Version implements IVersion {\n db: Dexie;\n _cfg: {\n version: number,\n storesSource: { [tableName: string]: string | null },\n dbschema: DbSchema,\n tables: {},\n contentUpgrade: Function | null\n }\n\n _parseStoresSpec(stores: { [tableName: string]: string | null }, outSchema: DbSchema): any {\n keys(stores).forEach(tableName => {\n if (stores[tableName] !== null) {\n var indexes = parseIndexSyntax(stores[tableName]);\n var primKey = indexes.shift();\n primKey.unique = true;\n if (primKey.multi) throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n indexes.forEach(idx => {\n if (idx.auto) throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n if (!idx.keyPath) throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n });\n outSchema[tableName] = createTableSchema(tableName, primKey, indexes);\n }\n });\n }\n\n stores(stores: { [key: string]: string | null; }): IVersion {\n const db = this.db;\n this._cfg.storesSource = this._cfg.storesSource ?\n extend(this._cfg.storesSource, stores) :\n stores;\n const versions = db._versions;\n\n // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax.\n const storesSpec: { [key: string]: string; } = {};\n let dbschema = {};\n versions.forEach(version => { // 'versions' is always sorted by lowest version first.\n extend(storesSpec, version._cfg.storesSource);\n dbschema = (version._cfg.dbschema = {});\n version._parseStoresSpec(storesSpec, dbschema);\n });\n // Update the latest schema to this version\n db._dbSchema = dbschema;\n // Update APIs\n removeTablesApi(db, [db._allTables, db, db.Transaction.prototype]);\n setApiOnPlace(db, [db._allTables, db, db.Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n db._storeNames = keys(dbschema);\n return this;\n }\n\n upgrade(upgradeFunction: (trans: Transaction) => PromiseLike | void): Version {\n this._cfg.contentUpgrade = promisableChain(this._cfg.contentUpgrade || nop, upgradeFunction);\n return this;\n }\n}\n","import { Dexie } from '../dexie';\nimport { makeClassConstructor } from '../../functions/make-class-constructor';\nimport { Version } from './version';\n\nexport interface VersionConstructor {\n new(versionNumber: number): Version;\n prototype: Version;\n}\n\n/** Generates a Version constructor bound to given Dexie instance.\n * \n * The purpose of having dynamically created constructors, is to allow\n * addons to extend classes for a certain Dexie instance without affecting\n * other db instances.\n */\nexport function createVersionConstructor(db: Dexie) {\n return makeClassConstructor(\n Version.prototype,\n\n function Version(this: Version, versionNumber: number) {\n this.db = db;\n this._cfg = {\n version: versionNumber,\n storesSource: null,\n dbschema: {},\n tables: {},\n contentUpgrade: null\n };\n });\n\n}\n","import { Dexie } from \"../classes/dexie/dexie\";\nimport { Table } from \"../public/types/table\";\nimport { DBNAMES_DB } from \"../globals/constants\";\nimport { DexieDOMDependencies } from \"../public/types/dexie-dom-dependencies\";\nimport { nop } from \"../functions/chaining-functions\";\n\ntype IDBKeyNamesVar = typeof IDBKeyRange;\n\nfunction getDbNamesTable(indexedDB: IDBFactory, IDBKeyRange: IDBKeyNamesVar) {\n let dbNamesDB = indexedDB[\"_dbNamesDB\"];\n if (!dbNamesDB) {\n dbNamesDB = indexedDB[\"_dbNamesDB\"] = new Dexie(DBNAMES_DB, {\n addons: [],\n indexedDB,\n IDBKeyRange,\n });\n dbNamesDB.version(1).stores({ dbnames: \"name\" });\n }\n return dbNamesDB.table(\"dbnames\") as Table<{ name: string }, string>;\n}\n\nfunction hasDatabasesNative(indexedDB: IDBFactory) {\n return indexedDB && typeof indexedDB.databases === \"function\";\n}\n\nexport function getDatabaseNames({\n indexedDB,\n IDBKeyRange,\n}: DexieDOMDependencies) {\n return hasDatabasesNative(indexedDB)\n ? Promise.resolve(indexedDB.databases()).then((infos) =>\n infos\n // Select name prop of infos:\n .map((info) => info.name)\n // Filter out DBNAMES_DB as previous Dexie or browser version would not have included it in the result.\n .filter((name) => name !== DBNAMES_DB)\n )\n : getDbNamesTable(indexedDB, IDBKeyRange).toCollection().primaryKeys();\n}\n\nexport function _onDatabaseCreated(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).put({name}).catch(nop);\n}\n\nexport function _onDatabaseDeleted(\n { indexedDB, IDBKeyRange }: DexieDOMDependencies,\n name: string\n) {\n !hasDatabasesNative(indexedDB) &&\n name !== DBNAMES_DB &&\n getDbNamesTable(indexedDB, IDBKeyRange).delete(name).catch(nop);\n}\n","import { newScope } from '../../helpers/promise';\nimport { PSD } from '../../helpers/promise';\n\nexport function vip (fn) {\n // To be used by subscribers to the on('ready') event.\n // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing.\n // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD\n // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since\n // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that.\n // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip()\n // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by\n // the caller will not resolve until database is opened.\n return newScope(function () {\n PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing.\n return fn();\n });\n}\n\n","/**\n * Work around Safari 14 IndexedDB open bug.\n *\n * Safari has a horrible bug where IDB requests can hang while the browser is starting up. https://bugs.webkit.org/show_bug.cgi?id=226547\n * The only solution is to keep nudging it until it's awake.\n */\nfunction idbReady() {\n var isSafari = !navigator.userAgentData &&\n /Safari\\//.test(navigator.userAgent) &&\n !/Chrom(e|ium)\\//.test(navigator.userAgent);\n // No point putting other browsers or older versions of Safari through this mess.\n if (!isSafari || !indexedDB.databases)\n return Promise.resolve();\n var intervalId;\n return new Promise(function (resolve) {\n var tryIdb = function () { return indexedDB.databases().finally(resolve); };\n intervalId = setInterval(tryIdb, 100);\n tryIdb();\n }).finally(function () { return clearInterval(intervalId); });\n}\n\nexport default idbReady;\n","import { cmp } from \"../functions/cmp\";\nimport { extend, iteratorSymbol, props } from '../functions/utils';\nimport { IndexableType } from '../public';\nimport {\n EmptyRange,\n IntervalTree,\n IntervalTreeNode,\n RangeSetConstructor,\n RangeSetPrototype,\n} from \"../public/types/rangeset\";\n\n/* An interval tree implementation to efficiently detect overlapping ranges of queried indexes.\n *\n * https://en.wikipedia.org/wiki/Interval_tree\n * \n */\n\nfunction isEmptyRange(node: IntervalTree | {from: IndexableType, to: IndexableType}): node is EmptyRange {\n return !(\"from\" in node);\n}\n\nexport type RangeSet = RangeSetPrototype & IntervalTree;\n\nexport const RangeSet = function(fromOrTree: any, to?: any) {\n if (this) {\n // Called with new()\n extend(this, arguments.length ? {d:1, from: fromOrTree, to: arguments.length > 1 ? to : fromOrTree} : {d:0});\n } else {\n // Called without new()\n const rv = new RangeSet();\n if (fromOrTree && (\"d\" in fromOrTree)) {\n extend(rv, fromOrTree);\n }\n return rv;\n }\n} as RangeSetConstructor;\n\nprops(RangeSet.prototype, {\n add(rangeSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n mergeRanges(this, rangeSet);\n return this;\n },\n addKey(key: IndexableType) {\n addRange(this, key, key);\n return this;\n },\n addKeys(keys: IndexableType[]) {\n keys.forEach(key => addRange(this, key, key));\n return this;\n },\n\n [iteratorSymbol](): Iterator {\n return getRangeSetIterator(this);\n }\n});\n\nfunction addRange(target: IntervalTree, from: IndexableType, to: IndexableType) {\n const diff = cmp(from, to);\n // cmp() returns NaN if one of the args are IDB-invalid keys.\n // Avoid storing invalid keys in rangeset:\n if (isNaN(diff)) return;\n\n // Caller is trying to add a range where from is greater than to:\n if (diff > 0) throw RangeError();\n \n if (isEmptyRange(target)) return extend(target, { from, to, d: 1 });\n const left = target.l;\n const right = target.r;\n if (cmp(to, target.from) < 0) {\n left\n ? addRange(left, from, to)\n : (target.l = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n if (cmp(from, target.to) > 0) {\n right\n ? addRange(right, from, to)\n : (target.r = { from, to, d: 1, l: null, r: null });\n return rebalance(target);\n }\n // Now we have some kind of overlap. We will be able to merge the new range into the node or let it be swallowed.\n\n // Grow left?\n if (cmp(from, target.from) < 0) {\n target.from = from;\n target.l = null; // Cut off for now. Re-add later.\n target.d = right ? right.d + 1 : 1;\n }\n // Grow right?\n if (cmp(to, target.to) > 0) {\n target.to = to;\n target.r = null; // Cut off for now. Re-add later.\n target.d = target.l ? target.l.d + 1 : 1;\n }\n const rightWasCutOff = !target.r;\n // Re-add left?\n if (left && !target.l) {\n //Ranges to the left may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, left);\n }\n // Re-add right?\n if (right && rightWasCutOff) {\n //Ranges to the right may be swallowed. Cut it of and re-add all.\n //Could probably be done more efficiently!\n mergeRanges(target, right);\n }\n}\n\nexport function mergeRanges(target: IntervalTree, newSet: IntervalTree | {from: IndexableType, to: IndexableType}) {\n function _addRangeSet(\n target: IntervalTree,\n { from, to, l, r }: IntervalTreeNode | {from: IndexableType, to: IndexableType, l?: undefined, r?: undefined}\n ) {\n addRange(target, from, to);\n if (l) _addRangeSet(target, l);\n if (r) _addRangeSet(target, r);\n }\n\n if(!isEmptyRange(newSet)) _addRangeSet(target, newSet);\n}\n\nexport function rangesOverlap(\n rangeSet1: IntervalTree,\n rangeSet2: IntervalTree\n): boolean {\n // Start iterating other from scratch.\n const i1 = getRangeSetIterator(rangeSet2);\n let nextResult1 = i1.next();\n if (nextResult1.done) return false;\n let a = nextResult1.value;\n\n // Start iterating this from start of other\n const i2 = getRangeSetIterator(rangeSet1);\n let nextResult2 = i2.next(a.from); // Start from beginning of other range\n let b = nextResult2.value;\n\n while (!nextResult1.done && !nextResult2.done) {\n if (cmp(b!.from, a.to) <= 0 && cmp(b!.to, a.from) >= 0) return true;\n cmp(a.from, b!.from) < 0\n ? (a = (nextResult1 = i1.next(b!.from)).value!) // a is behind. forward it to beginning of next b-range\n : (b = (nextResult2 = i2.next(a.from)).value); // b is behind. forward it to beginning of next a-range\n }\n return false;\n}\n\ntype RangeSetIteratorState =\n | {\n up?: RangeSetIteratorState;\n n: IntervalTreeNode;\n s: 0 | 1 | 2 | 3;\n }\n | undefined\n | null;\nexport function getRangeSetIterator(\n node: EmptyRange | IntervalTreeNode\n): Generator {\n let state: RangeSetIteratorState = isEmptyRange(node) ? null : { s: 0, n: node };\n\n return {\n next(key?) {\n const keyProvided = arguments.length > 0;\n while (state) {\n switch (state.s) {\n case 0:\n // Initial state for node.\n // Fast forward to leftmost node.\n state.s = 1;\n if (keyProvided) {\n while (state.n.l && cmp(key, state.n.from) < 0)\n state = { up: state, n: state.n.l, s: 1 };\n } else {\n while (state.n.l) state = { up: state, n: state.n.l, s: 1 };\n }\n // intentionally fall into case 1:\n case 1:\n // We're on a node where it's left part is already handled or does not exist.\n state.s = 2;\n if (!keyProvided || cmp(key, state.n.to) <= 0)\n return { value: state.n, done: false };\n case 2:\n // We've emitted our node and should continue with the right part or let parent take over from it's state 1\n if (state.n.r) {\n state.s = 3; // So when child is done, we know we're done.\n state = { up: state, n: state.n.r, s: 0 };\n continue; // Will fall in to case 0 with fast forward to left leaf of this subtree.\n }\n // intentionally fall into case 3:\n case 3:\n state = state.up;\n }\n }\n return { done: true };\n },\n } as Generator;\n}\n\nfunction rebalance(target: IntervalTreeNode) {\n const diff = (target.r?.d || 0) - (target.l?.d || 0);\n const r = diff > 1 ? \"r\" : diff < -1 ? \"l\" : \"\";\n if (r) {\n\n // Rotate (https://en.wikipedia.org/wiki/Tree_rotation)\n //\n // \n // [OLDROOT]\n // [OLDROOT.L] [NEWROOT]\n // [NEWROOT.L] [NEWROOT.R]\n //\n // Is going to become:\n //\n // \n // [NEWROOT]\n // [OLDROOT] [NEWROOT.R]\n // [OLDROOT.L] [NEWROOT.L] \n\n // * clone now has the props of OLDROOT\n // Plan:\n // * target must be given the props of NEWROOT\n // * target[l] must point to a new OLDROOT\n // * target[r] must point to NEWROOT.R\n // * OLDROOT[r] must point to NEWROOT.L\n const l = r === \"r\" ? \"l\" : \"r\"; // Support both left/right rotation\n const rootClone = { ...target };\n // We're gonna copy props from target's right node into target so that target will\n // have same range as old target[r] (instead of changing pointers, we copy values.\n // that way we do not need to adjust pointers in parents).\n const oldRootRight = target[r]; \n target.from = oldRootRight.from;\n target.to = oldRootRight.to;\n target[r] = oldRootRight[r];\n rootClone[r] = oldRootRight[l];\n target[l] = rootClone;\n rootClone.d = computeDepth(rootClone);\n }\n target.d = computeDepth(target);\n}\n\nfunction computeDepth({ r, l }: Pick) {\n return (r ? (l ? Math.max(r.d, l.d) : r.d) : l ? l.d : 0) + 1;\n}\n","import { cloneSimpleObjectTree, deepClone, keys, objectIsEmpty } from \"../functions/utils\";\nimport { mergeRanges, RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\n\nexport function extendObservabilitySet(\n target: ObservabilitySet,\n newSet: ObservabilitySet\n): ObservabilitySet {\n keys(newSet).forEach(part => {\n if (target[part]) mergeRanges(target[part], newSet[part]);\n else target[part] = cloneSimpleObjectTree(newSet[part]); // Somewhat faster\n });\n return target;\n}\n","import { rangesOverlap } from '../helpers/rangeset';\nimport { ObservabilitySet } from '../public/types/db-events';\n\nexport function obsSetsOverlap(os1: ObservabilitySet, os2: ObservabilitySet) {\n return os1.all || os2.all || Object.keys(os1).some(\n (key) => os2[key] && rangesOverlap(os2[key], os1[key])\n );\n}\n","import { type GlobalQueryCache } from \"../../public/types/cache\";\n\nexport const cache: GlobalQueryCache = {}\n","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport { extendObservabilitySet } from '../extend-observability-set';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { cache } from './cache';\n\nlet unsignaledParts: ObservabilitySet = {};\nlet isTaskEnqueued = false;\n\nexport function signalSubscribersLazily(part: ObservabilitySet, optimistic = false) {\n extendObservabilitySet(unsignaledParts, part);\n if (!isTaskEnqueued) {\n isTaskEnqueued = true;\n setTimeout(() => {\n isTaskEnqueued = false;\n const parts = unsignaledParts;\n unsignaledParts = {};\n signalSubscribersNow(parts, false);\n }, 0);\n }\n}\n\nexport function signalSubscribersNow(\n updatedParts: ObservabilitySet,\n deleteAffectedCacheEntries = false\n) {\n const queriesToSignal = new Set<() => void>();\n if (updatedParts.all) {\n // Signal all subscribers to requery.\n for (const tblCache of Object.values(cache)) {\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n } else {\n for (const key in updatedParts) {\n const parts = /^idb\\:\\/\\/(.*)\\/(.*)\\//.exec(key);\n if (parts) {\n const [, dbName, tableName] = parts;\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (tblCache)\n collectTableSubscribers(\n tblCache,\n updatedParts,\n queriesToSignal,\n deleteAffectedCacheEntries\n );\n }\n }\n }\n // Now when affected cache entries are removed, signal collected subscribers to requery.\n queriesToSignal.forEach((requery) => requery());\n}\n\nfunction collectTableSubscribers(\n tblCache: TblQueryCache,\n updatedParts: ObservabilitySet,\n outQueriesToSignal: Set<() => void>,\n deleteAffectedCacheEntries: boolean\n) {\n const updatedEntryLists: [string, CacheEntry[]][] = [];\n for (const [indexName, entries] of Object.entries(tblCache.queries.query)) {\n const filteredEntries: CacheEntry[] = [];\n for (const entry of entries) {\n if (obsSetsOverlap(updatedParts, entry.obsSet)) {\n // This query is affected by the mutation. Remove it from cache\n // and signal all subscribers to requery.\n entry.subscribers.forEach((requery) => outQueriesToSignal.add(requery));\n } else if (deleteAffectedCacheEntries) {\n filteredEntries.push(entry);\n }\n }\n // Collect cache entries to be updated\n if (deleteAffectedCacheEntries)\n updatedEntryLists.push([indexName, filteredEntries]);\n }\n if (deleteAffectedCacheEntries) {\n for (const [indexName, filteredEntries] of updatedEntryLists) {\n tblCache.queries.query[indexName] = filteredEntries;\n }\n }\n}\n","import { Dexie } from './dexie';\nimport * as Debug from '../../helpers/debug';\nimport { rejection } from '../../helpers/promise';\nimport { exceptions } from '../../errors';\nimport { eventRejectHandler, preventDefault } from '../../functions/event-wrappers';\nimport Promise, { wrap } from '../../helpers/promise';\nimport { connections } from '../../globals/constants';\nimport { runUpgraders, readGlobalSchema, adjustToExistingIndexNames, verifyInstalledSchema, patchCurrentVersion } from '../version/schema-helpers';\nimport { safariMultiStoreFix } from '../../functions/quirks';\nimport { _onDatabaseCreated } from '../../helpers/database-enumerator';\nimport { vip } from './vip';\nimport { promisableChain, nop } from '../../functions/chaining-functions';\nimport { generateMiddlewareStacks } from './generate-middleware-stacks';\nimport { slice } from '../../functions/utils';\nimport safari14Workaround from 'safari-14-idb-fix';\nimport { type ObservabilitySet } from '../../public/types/db-events';\nimport { RangeSet } from '../../helpers/rangeset';\nimport { DEXIE_STORAGE_MUTATED_EVENT_NAME, globalEvents } from '../../globals/global-events';\nimport { signalSubscribersNow } from '../../live-query/cache/signalSubscribers';\n\nexport function dexieOpen (db: Dexie) {\n const state = db._state;\n const {indexedDB} = db._deps;\n if (state.isBeingOpened || db.idbdb)\n return state.dbReadyPromise.then(() => state.dbOpenError ?\n rejection (state.dbOpenError) :\n db);\n state.isBeingOpened = true;\n state.dbOpenError = null;\n state.openComplete = false;\n const openCanceller = state.openCanceller;\n let nativeVerToOpen = Math.round(db.verno * 10);\n let schemaPatchMode = false;\n\n function throwIfCancelled() {\n // If state.openCanceller object reference is replaced, it means db.close() has been called,\n // meaning this open flow should be cancelled.\n if (state.openCanceller !== openCanceller) throw new exceptions.DatabaseClosed('db.open() was cancelled');\n }\n \n // Function pointers to call when the core opening process completes.\n let resolveDbReady = state.dbReadyResolve,\n // upgradeTransaction to abort on failure.\n upgradeTransaction: (IDBTransaction | null) = null,\n wasCreated = false;\n\n const tryOpenDB = () => new Promise((resolve, reject) => {\n throwIfCancelled();\n // If no API, throw!\n if (!indexedDB) throw new exceptions.MissingAPI();\n const dbName = db.name;\n \n const req = state.autoSchema || !nativeVerToOpen ?\n indexedDB.open(dbName) :\n indexedDB.open(dbName, nativeVerToOpen);\n if (!req) throw new exceptions.MissingAPI(); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134\n req.onerror = eventRejectHandler(reject);\n req.onblocked = wrap(db._fireOnBlocked);\n req.onupgradeneeded = wrap (e => {\n upgradeTransaction = req.transaction;\n if (state.autoSchema && !db._options.allowEmptyDB) { // Unless an addon has specified db._allowEmptyDB, lets make the call fail.\n // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases.\n // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we\n // do not create a new database by accident here.\n req.onerror = preventDefault; // Prohibit onabort error from firing before we're done!\n upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.)\n // Close database and delete it.\n req.result.close();\n const delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here!\n delreq.onsuccess = delreq.onerror = wrap(() => {\n reject (new exceptions.NoSuchDatabase(`Database ${dbName} doesnt exist`));\n });\n } else {\n upgradeTransaction.onerror = eventRejectHandler(reject);\n const oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix.\n wasCreated = oldVer < 1;\n db.idbdb = req.result;\n if (schemaPatchMode) {\n patchCurrentVersion(db, upgradeTransaction);\n }\n runUpgraders(db, oldVer / 10, upgradeTransaction, reject);\n }\n }, reject);\n \n req.onsuccess = wrap (() => {\n // Core opening procedure complete. Now let's just record some stuff.\n upgradeTransaction = null;\n const idbdb = db.idbdb = req.result;\n\n const objectStoreNames = slice(idbdb.objectStoreNames);\n if (objectStoreNames.length > 0) try {\n const tmpTrans = idbdb.transaction(safariMultiStoreFix(objectStoreNames), 'readonly');\n if (state.autoSchema) readGlobalSchema(db, idbdb, tmpTrans);\n else {\n adjustToExistingIndexNames(db, db._dbSchema, tmpTrans);\n if (!verifyInstalledSchema(db, tmpTrans) && !schemaPatchMode) {\n console.warn(`Dexie SchemaDiff: Schema was extended without increasing the number passed to db.version(). Dexie will add missing parts and increment native version number to workaround this.`);\n idbdb.close();\n nativeVerToOpen = idbdb.version + 1;\n schemaPatchMode = true;\n return resolve (tryOpenDB()); // Try again with new version (nativeVerToOpen\n }\n }\n generateMiddlewareStacks(db, tmpTrans);\n } catch (e) {\n // Safari 8 may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120.\n // BUGBUG: It will bail out anyway as of Dexie 3.\n // Should we support Safari 8 anymore? Believe all\n // Dexie users use the shim for that platform anyway?!\n // If removing Safari 8 support, go ahead and remove the safariMultiStoreFix() function\n // as well as absurd upgrade version quirk for Safari.\n }\n \n connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari.\n \n idbdb.onversionchange = wrap(ev => {\n state.vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari)\n db.on(\"versionchange\").fire(ev);\n });\n \n idbdb.onclose = wrap(ev => {\n db.on(\"close\").fire(ev);\n });\n\n if (wasCreated) _onDatabaseCreated(db._deps, dbName);\n\n resolve();\n\n }, reject);\n }).catch(err => {\n switch (err?.name) {\n case \"UnknownError\":\n if (state.PR1398_maxLoop > 0) {\n // Bug in Chrome after clearing site data\n // https://github.com/dexie/Dexie.js/issues/543#issuecomment-1795736695\n state.PR1398_maxLoop--;\n console.warn('Dexie: Workaround for Chrome UnknownError on open()');\n return tryOpenDB();\n }\n break;\n case \"VersionError\":\n if (nativeVerToOpen > 0) {\n nativeVerToOpen = 0;\n return tryOpenDB();\n }\n break;\n }\n return Promise.reject(err);\n });\n \n // safari14Workaround = Workaround by jakearchibald for new nasty bug in safari 14.\n return Promise.race([\n openCanceller,\n (typeof navigator === 'undefined' ? Promise.resolve() : safari14Workaround()).then(tryOpenDB)\n ]).then(() => {\n // Before finally resolving the dbReadyPromise and this promise,\n // call and await all on('ready') subscribers:\n // Dexie.vip() makes subscribers able to use the database while being opened.\n // This is a must since these subscribers take part of the opening procedure.\n throwIfCancelled();\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>db.on.ready.fire(db.vip))).then(function fireRemainders() {\n if (state.onReadyBeingFired.length > 0) {\n // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed.\n let remainders = state.onReadyBeingFired.reduce(promisableChain, nop);\n state.onReadyBeingFired = [];\n return Promise.resolve(vip(()=>remainders(db.vip))).then(fireRemainders)\n }\n });\n }).finally(()=>{\n if (state.openCanceller === openCanceller) {\n // Only modify state if not cancelled in the mean time.\n state.onReadyBeingFired = null;\n state.isBeingOpened = false;\n }\n }).catch(err => {\n state.dbOpenError = err; // Record the error. It will be used to reject further promises of db operations.\n try {\n // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit.\n upgradeTransaction && upgradeTransaction.abort();\n } catch { }\n if (openCanceller === state.openCanceller) {\n // Still in the same open flow - The error reason was not due to external call to db.close().\n // Make sure to call db.close() to finalize resources.\n db._close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh.\n }\n return rejection (err);\n }).finally(()=>{\n state.openComplete = true;\n resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters.\n }).then(()=>{\n if (wasCreated) {\n // Propagate full range on primary keys and indexes on all tables now that the DB is ready and opened,\n // and all upgraders and on('ready') subscribers have run.\n const everything: ObservabilitySet = {};\n db.tables.forEach(table => {\n table.schema.indexes.forEach(idx => {\n if (idx.name) everything[`idb://${db.name}/${table.name}/${idx.name}`] = new RangeSet(-Infinity, [[[]]]);\n });\n everything[`idb://${db.name}/${table.name}/`] = everything[`idb://${db.name}/${table.name}/:dels`] = new RangeSet(-Infinity, [[[]]]);\n });\n // Database was created. If another tab had it open when it was deleted and reopened, that tab must be updated now.\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME).fire(everything);\n // Wipe the cache and trigger optimistic queries:\n signalSubscribersNow(everything, true);\n }\n // Resolve the db.open() with the db instance.\n return db;\n });\n}\n","import { isArray } from '../functions/utils';\n\nexport function awaitIterator (iterator: Iterator) {\n var callNext = result => iterator.next(result),\n doThrow = error => iterator.throw(error),\n onSuccess = step(callNext),\n onError = step(doThrow);\n\n function step(getNext: (any)=>any) {\n return (val?) => {\n var next = getNext(val),\n value = next.value;\n\n return next.done ? value :\n (!value || typeof value.then !== 'function' ?\n isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) :\n value.then(onSuccess, onError));\n };\n }\n\n return step(callNext)();\n}\n","import { TransactionMode } from '../../public/types/transaction-mode';\nimport { errnames, exceptions } from '../../errors';\nimport { flatten, isAsyncFunction } from '../../functions/utils';\nimport { Dexie } from './dexie';\nimport { Transaction } from '../transaction';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise, {\n PSD,\n NativePromise,\n decrementExpectedAwaits,\n rejection,\n incrementExpectedAwaits\n} from '../../helpers/promise';\n\nexport function extractTransactionArgs(mode: TransactionMode, _tableArgs_, scopeFunc) {\n // Let table arguments be all arguments between mode and last argument.\n var i = arguments.length;\n if (i < 2) throw new exceptions.InvalidArgument(\"Too few arguments\");\n // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments)\n // and clone arguments except the first one into local var 'args'.\n var args = new Array(i - 1);\n while (--i) args[i - 1] = arguments[i];\n // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments.\n scopeFunc = args.pop();\n var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays.\n return [mode, tables, scopeFunc];\n}\n\nexport function enterTransactionScope(\n db: Dexie,\n mode: IDBTransactionMode,\n storeNames: string[],\n parentTransaction: Transaction | undefined,\n scopeFunc: ()=>PromiseLike | any\n) {\n return Promise.resolve().then(() => {\n // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction().\n const transless = PSD.transless || PSD;\n // Our transaction.\n //return new Promise((resolve, reject) => {\n const trans = db._createTransaction(mode, storeNames, db._dbSchema, parentTransaction);\n trans.explicit = true;\n // Let the transaction instance be part of a Promise-specific data (PSD) value.\n const zoneProps = {\n trans: trans,\n transless: transless\n };\n\n if (parentTransaction) {\n // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing)\n trans.idbtrans = parentTransaction.idbtrans;\n } else {\n try {\n trans.create(); // Create the native transaction so that complete() or error() will trigger even if no operation is made upon it.\n // @ts-ignore Mark the idbtrans object with \"_explicit\". DBCore middleware won't have access to Dexie trans but will need to have this info.\n trans.idbtrans._explicit = true;\n db._state.PR1398_maxLoop = 3;\n } catch (ex) {\n if (ex.name === errnames.InvalidState && db.isOpen() && --db._state.PR1398_maxLoop > 0) {\n console.warn('Dexie: Need to reopen db');\n db.close({disableAutoOpen: false});\n return db.open().then(() => enterTransactionScope(\n db,\n mode,\n storeNames,\n null,\n scopeFunc\n ));\n }\n return rejection(ex);\n }\n }\n\n // Support for native async await.\n const scopeFuncIsAsync = isAsyncFunction(scopeFunc);\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n\n let returnValue;\n const promiseFollowed = Promise.follow(() => {\n // Finally, call the scope function with our table and transaction arguments.\n returnValue = scopeFunc.call(trans, trans);\n if (returnValue) {\n if (scopeFuncIsAsync) {\n // scopeFunc is a native async function - we know for sure returnValue is native promise.\n var decrementor = decrementExpectedAwaits.bind(null, null);\n returnValue.then(decrementor, decrementor);\n } else if (typeof returnValue.next === 'function' && typeof returnValue.throw === 'function') {\n // scopeFunc returned an iterator with throw-support. Handle yield as await.\n returnValue = awaitIterator(returnValue);\n }\n }\n }, zoneProps);\n return (returnValue && typeof returnValue.then === 'function' ?\n // Promise returned. User uses promise-style transactions.\n Promise.resolve(returnValue).then(x => trans.active ?\n x // Transaction still active. Continue.\n : rejection(new exceptions.PrematureCommit(\n \"Transaction committed too early. See http://bit.ly/2kdckMn\")))\n // No promise returned. Wait for all outstanding promises before continuing. \n : promiseFollowed.then(() => returnValue)\n ).then(x => {\n // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion:\n if (parentTransaction) trans._resolve();\n // wait for trans._completion\n // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves)\n return trans._completion.then(() => x);\n }).catch(e => {\n trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc!\n return rejection(e);\n });\n });\n}\n","import {\n DBCore,\n DBCoreIndex,\n DBCoreKeyRange,\n DBCoreQueryRequest,\n DBCoreRangeType,\n DBCoreOpenCursorRequest,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreTable,\n} from \"../public/types/dbcore\";\nimport { isArray } from '../functions/utils';\nimport { getKeyExtractor } from './get-key-extractor';\nimport { getKeyPathAlias } from './dbcore-indexeddb';\nimport { Middleware } from '../public/types/middleware';\n\ninterface VirtualIndex extends DBCoreIndex {\n /** True if this index is virtual, i.e. represents a compound index internally,\n * but makes it act as as having a subset of its keyPaths.\n */\n isVirtual: boolean;\n\n /** Number of keypaths that this index comprises. Can be 0..N.\n * Note: This is the length of the *virtual index*, not the real index.\n */\n keyLength: number;\n\n /** Number of popped keypaths from the real index.\n */\n keyTail: number;\n\n /** LowLevelIndex represents the actual IndexedDB index behind it */\n lowLevelIndex: DBCoreIndex;\n}\n\n// Move into some util:\nexport function pad (a: any | any[], value: any, count: number) {\n const result = isArray(a) ? a.slice() : [a];\n for (let i=0; i 0;\n const virtualIndex = {\n ...lowLevelIndex,\n name: isVirtual\n ? `${keyPathAlias}(virtual-from:${lowLevelIndex.name})`\n : lowLevelIndex.name,\n lowLevelIndex,\n isVirtual,\n keyTail,\n keyLength,\n extractKey: getKeyExtractor(keyPath),\n unique: !isVirtual && lowLevelIndex.unique\n };\n indexList.push(virtualIndex);\n if (!virtualIndex.isPrimaryKey) {\n allVirtualIndexes.push(virtualIndex);\n }\n if (keyLength > 1) {\n const virtualKeyPath = keyLength === 2 ?\n keyPath[0] : // This is a compound [a, b]. Add a virtual normal index a.\n keyPath.slice(0, keyLength - 1); // This is compound [a,b,c]. Add virtual compound [a,b].\n addVirtualIndexes(virtualKeyPath, keyTail + 1, lowLevelIndex);\n }\n indexList.sort((a,b) => a.keyTail - b.keyTail); // Shortest keyTail is the best one (represents real index)\n return virtualIndex;\n }\n \n const primaryKey = addVirtualIndexes(schema.primaryKey.keyPath, 0, schema.primaryKey);\n indexLookup[\":id\"] = [primaryKey];\n for (const index of schema.indexes) {\n addVirtualIndexes(index.keyPath, 0, index);\n }\n \n function findBestIndex(keyPath: null | string | string[]): VirtualIndex {\n const result = indexLookup[getKeyPathAlias(keyPath)];\n return result && result[0];\n }\n \n function translateRange (range: DBCoreKeyRange, keyTail: number): DBCoreKeyRange {\n return {\n type: range.type === DBCoreRangeType.Equal ?\n DBCoreRangeType.Range :\n range.type,\n lower: pad(range.lower, range.lowerOpen ? down.MAX_KEY : down.MIN_KEY, keyTail),\n lowerOpen: true, // doesn't matter true or false\n upper: pad(range.upper, range.upperOpen ? down.MIN_KEY : down.MAX_KEY, keyTail),\n upperOpen: true // doesn't matter true or false\n };\n }\n \n function translateRequest (req: DBCoreQueryRequest): DBCoreQueryRequest;\n function translateRequest (req: DBCoreOpenCursorRequest): DBCoreOpenCursorRequest;\n function translateRequest (req: DBCoreCountRequest): DBCoreCountRequest {\n const index = req.query.index as VirtualIndex;\n return index.isVirtual ? {\n ...req,\n query: {\n index: index.lowLevelIndex,\n range: translateRange(req.query.range, index.keyTail)\n }\n } : req;\n }\n \n const result: DBCoreTable = {\n ...table,\n schema: {\n ...schema,\n primaryKey,\n indexes: allVirtualIndexes,\n getIndexByKeyPath: findBestIndex\n },\n\n count(req) {\n return table.count(translateRequest(req));\n }, \n \n query(req) {\n return table.query(translateRequest(req));\n },\n \n openCursor(req) {\n const {keyTail, isVirtual, keyLength} = (req.query.index as VirtualIndex);\n if (!isVirtual) return table.openCursor(req);\n \n function createVirtualCursor(cursor: DBCoreCursor) : DBCoreCursor {\n function _continue (key?: any) {\n key != null ?\n cursor.continue(pad(key, req.reverse ? down.MAX_KEY : down.MIN_KEY, keyTail)) :\n req.unique ?\n cursor.continue(\n cursor.key.slice(0, keyLength)\n .concat(req.reverse\n ? down.MIN_KEY\n : down.MAX_KEY, keyTail)\n ) :\n cursor.continue()\n }\n const virtualCursor = Object.create(cursor, {\n continue: {value: _continue},\n continuePrimaryKey: {\n value(key: any, primaryKey: any) {\n cursor.continuePrimaryKey(pad(key, down.MAX_KEY, keyTail), primaryKey);\n }\n },\n primaryKey: {\n get() {\n return cursor.primaryKey;\n }\n },\n key: {\n get() {\n const key = cursor.key as any[]; // A virtual cursor always operates on compound key\n return keyLength === 1 ?\n key[0] : // Cursor.key should not be an array.\n key.slice(0, keyLength); // Cursor.key should be first part of array.\n }\n },\n value: {\n get() {\n return cursor.value;\n }\n }\n });\n return virtualCursor;\n }\n \n return table.openCursor(translateRequest(req))\n .then(cursor => cursor && createVirtualCursor(cursor));\n }\n };\n return result;\n }\n }\n}\n\nexport const virtualIndexMiddleware : Middleware = {\n stack: \"dbcore\",\n name: \"VirtualIndexMiddleware\",\n level: 1,\n create: createVirtualIndexMiddleware\n};\n\n","import { keys, hasOwn, toStringTag } from './utils';\n\nexport function getObjectDiff(a: any, b: any, rv?: any, prfx?: string) {\n // Compares objects a and b and produces a diff object.\n rv = rv || {};\n prfx = prfx || '';\n keys(a).forEach((prop) => {\n if (!hasOwn(b, prop)) {\n // Property removed\n rv[prfx + prop] = undefined;\n } else {\n var ap = a[prop],\n bp = b[prop];\n if (typeof ap === 'object' && typeof bp === 'object' && ap && bp) {\n const apTypeName = toStringTag(ap);\n const bpTypeName = toStringTag(bp);\n\n if (apTypeName !== bpTypeName) {\n rv[prfx + prop] = b[prop]; // Property changed to other type\n } else if (apTypeName === 'Object') {\n // Pojo objects (not Date, ArrayBuffer, Array etc). Go deep.\n getObjectDiff(ap, bp, rv, prfx + prop + '.');\n } else if (ap !== bp) {\n // Values differ.\n // Could have checked if Date, arrays or binary types have same\n // content here but I think that would be a suboptimation.\n // Prefer simplicity.\n rv[prfx + prop] = b[prop];\n }\n } else if (ap !== bp) rv[prfx + prop] = b[prop]; // Primitive value changed\n }\n });\n keys(b).forEach((prop) => {\n if (!hasOwn(a, prop)) {\n rv[prfx + prop] = b[prop]; // Property added\n }\n });\n return rv;\n}\n","import {\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreIndex,\n DBCoreTable,\n} from \"../public/types/dbcore\";\n\nexport function getEffectiveKeys (\n primaryKey: DBCoreIndex,\n req: (Pick & {keys?: any[]}) | Pick)\n{\n //const {outbound} = primaryKey;\n if (req.type === 'delete') return req.keys;\n return req.keys || req.values.map(primaryKey.extractKey)\n}\n","import {\n DBCore,\n DBCoreTable,\n DBCoreMutateResponse,\n DBCoreDeleteRangeRequest,\n DBCoreAddRequest,\n DBCorePutRequest,\n DBCoreDeleteRequest,\n DBCoreTransaction,\n DBCoreKeyRange\n} from \"../public/types/dbcore\";\nimport { nop } from '../functions/chaining-functions';\nimport { hasOwn, setByKeyPath } from '../functions/utils';\nimport { getObjectDiff } from \"../functions/get-object-diff\";\nimport { PSD } from '../helpers/promise';\n//import { LockableTableMiddleware } from '../dbcore/lockable-table-middleware';\nimport { getEffectiveKeys } from '../dbcore/get-effective-keys';\nimport { Middleware } from '../public/types/middleware';\nimport { Transaction } from '../classes/transaction';\n\nexport const hooksMiddleware: Middleware = {\n stack: \"dbcore\",\n name: \"HooksMiddleware\",\n level: 2,\n create: (downCore: DBCore) => ({\n ...downCore,\n table(tableName: string) {\n const downTable = downCore.table(tableName);\n const {primaryKey} = downTable.schema;\n \n const tableMiddleware: DBCoreTable = {\n ...downTable,\n mutate(req):Promise {\n const dxTrans = PSD.trans as Transaction;\n // Hooks can be transaction-bound. Need to grab them from transaction.table and not\n // db.table!\n const {deleting, creating, updating} = dxTrans.table(tableName).hook;\n switch (req.type) {\n case 'add':\n if (creating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'put':\n if (creating.fire === nop && updating.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'delete':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>addPutOrDelete(req), true);\n case 'deleteRange':\n if (deleting.fire === nop) break;\n return dxTrans._promise('readwrite', ()=>deleteRange(req), true);\n }\n // Any of the breaks above happened (no hooks) - do the default:\n return downTable.mutate(req);\n\n\n function addPutOrDelete(req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest): Promise {\n const dxTrans = PSD.trans;\n const keys = req.keys || getEffectiveKeys(primaryKey, req);\n if (!keys) throw new Error(\"Keys missing\");\n // Clone Request and set keys arg\n req = req.type === 'add' || req.type === 'put' ?\n {...req, keys} :\n {...req};\n if (req.type !== 'delete') req.values = [...req.values];\n if (req.keys) req.keys = [...req.keys];\n \n return getExistingValues(downTable, req, keys).then (existingValues => {\n const contexts = keys.map((key, i) => {\n const existingValue = existingValues[i];\n const ctx = { onerror: null, onsuccess: null };\n if (req.type === 'delete') {\n // delete operation\n deleting.fire.call(ctx, key, existingValue, dxTrans);\n } else if (req.type === 'add' || existingValue === undefined) {\n // The add() or put() resulted in a create\n const generatedPrimaryKey = creating.fire.call(ctx, key, req.values[i], dxTrans);\n if (key == null && generatedPrimaryKey != null) {\n key = generatedPrimaryKey;\n req.keys[i] = key;\n if (!primaryKey.outbound) {\n setByKeyPath(req.values[i], primaryKey.keyPath, key);\n }\n }\n } else {\n // The put() operation resulted in an update\n const objectDiff = getObjectDiff(existingValue, req.values[i]);\n const additionalChanges = updating.fire.call(ctx, objectDiff, key, existingValue, dxTrans);\n if (additionalChanges) {\n const requestedValue = req.values[i];\n Object.keys(additionalChanges).forEach(keyPath => {\n if (hasOwn(requestedValue, keyPath)) {\n // keyPath is already present as a literal property of the object\n requestedValue[keyPath] = additionalChanges[keyPath];\n } else {\n // keyPath represents a new or existing path into the object\n setByKeyPath(requestedValue, keyPath, additionalChanges[keyPath]);\n }\n });\n }\n }\n return ctx;\n });\n return downTable.mutate(req).then(({failures, results, numFailures, lastResult}) => {\n for (let i=0; i {\n contexts.forEach(ctx => ctx.onerror && ctx.onerror(error));\n return Promise.reject(error);\n });\n });\n }\n \n function deleteRange(req: DBCoreDeleteRangeRequest): Promise {\n return deleteNextChunk(req.trans, req.range, 10000);\n }\n \n function deleteNextChunk(trans: DBCoreTransaction, range: DBCoreKeyRange, limit: number) {\n // Query what keys in the DB within the given range\n return downTable.query({trans, values: false, query: {index: primaryKey, range}, limit})\n .then(({result}) => {\n // Given a set of keys, bulk delete those using the same procedure as in addPutOrDelete().\n // This will make sure that deleting hook is called.\n return addPutOrDelete({type: 'delete', keys: result, trans}).then(res => {\n if (res.numFailures > 0) return Promise.reject(res.failures[0]);\n if (result.length < limit) {\n return {failures: [], numFailures: 0, lastResult: undefined} as DBCoreMutateResponse;\n } else {\n return deleteNextChunk(trans, {...range, lower: result[result.length - 1], lowerOpen: true}, limit);\n }\n });\n })\n }\n }\n };\n //const {lock, lockableMiddleware} = LockableTableMiddleware(tableMiddleware);\n\n return tableMiddleware;\n },\n }) as DBCore\n};\n\nfunction getExistingValues(\n table: DBCoreTable,\n req: DBCoreAddRequest | DBCorePutRequest | DBCoreDeleteRequest,\n effectiveKeys: any[]\n) {\n return req.type === \"add\"\n ? Promise.resolve([])\n : table.getMany({ trans: req.trans, keys: effectiveKeys, cache: \"immutable\" });\n}\n","import { deepClone } from \"../functions/utils\";\nimport { DBCore } from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport Promise from \"../helpers/promise\";\nimport { cmp } from '../functions/cmp';\n\nexport function getFromTransactionCache(\n keys: readonly any[],\n cache: { keys: any[]; values: any[] } | undefined | null,\n clone?: boolean\n) {\n try {\n if (!cache) return null;\n if (cache.keys.length < keys.length) return null;\n const result: any[] = [];\n // Compare if the exact same order of keys was retrieved in same transaction:\n // Allow some cached keys to be omitted from provided set of keys\n // Use case: 1. getMany(keys) 2. update a subset of those 3. call put with the updated ones ==> middlewares should be able to find old values\n for (let i = 0, j = 0; i < cache.keys.length && j < keys.length; ++i) {\n if (cmp(cache.keys[i], keys[j]) !== 0) continue;\n result.push(clone ? deepClone(cache.values[i]) : cache.values[i]);\n ++j;\n }\n // If got all keys caller was looking for, return result.\n return result.length === keys.length ? result : null;\n } catch {\n return null;\n }\n}\n\nexport const cacheExistingValuesMiddleware: Middleware = {\n stack: \"dbcore\",\n level: -1,\n create: (core) => {\n return {\n table: (tableName) => {\n const table = core.table(tableName);\n return {\n ...table,\n getMany: (req) => {\n if (!req.cache) {\n return table.getMany(req);\n }\n const cachedResult = getFromTransactionCache(\n req.keys,\n req.trans[\"_cache\"],\n req.cache === \"clone\"\n );\n if (cachedResult) {\n return Promise.resolve(cachedResult);\n }\n return table.getMany(req).then((res) => {\n req.trans[\"_cache\"] = {\n keys: req.keys,\n values: req.cache === \"clone\" ? deepClone(res) : res,\n };\n return res;\n });\n },\n mutate: (req) => {\n // Invalidate cache on any mutate except \"add\" which can't change existing values:\n if (req.type !== \"add\") req.trans[\"_cache\"] = null;\n return table.mutate(req);\n },\n };\n },\n };\n },\n};\n","import { DBCore, DBCoreTable } from '../../public/types/dbcore';\nimport { LiveQueryContext } from '../live-query';\n\nexport function isCachableContext(ctx: LiveQueryContext, table: DBCoreTable) {\n return (\n ctx.trans.mode === 'readonly' &&\n !!ctx.subscr &&\n !ctx.trans.explicit &&\n ctx.trans.db._options.cache !== 'disabled' &&\n !table.schema.primaryKey.outbound\n );\n}\n\n","import { DBCoreCountRequest, DBCoreGetManyRequest, DBCoreGetRequest, DBCoreOpenCursorRequest, DBCoreQueryRequest } from '../../public/types/dbcore';\n\n\nexport function isCachableRequest(type: string, req: Partial) {\n switch (type) {\n case 'query':\n return req.values && !req.unique;\n case 'get':\n return false;\n case 'getMany':\n return false;\n case 'count':\n return false;\n case 'openCursor':\n return false;\n }\n}\n","import { LiveQueryContext } from \".\";\nimport { getFromTransactionCache } from \"../dbcore/cache-existing-values-middleware\";\nimport { getEffectiveKeys } from \"../dbcore/get-effective-keys\";\nimport { exceptions } from \"../errors\";\nimport { cmp } from \"../functions/cmp\";\nimport { isArray, keys } from \"../functions/utils\";\nimport { PSD } from \"../helpers/promise\";\nimport { RangeSet } from \"../helpers/rangeset\";\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport {\n DBCore,\n DBCoreCountRequest,\n DBCoreCursor,\n DBCoreGetManyRequest,\n DBCoreGetRequest,\n DBCoreIndex,\n DBCoreOpenCursorRequest,\n DBCoreQueryRequest,\n DBCoreQueryResponse,\n DBCoreTable,\n DBCoreTableSchema,\n DBCoreTransaction,\n} from \"../public/types/dbcore\";\nimport { Middleware } from \"../public/types/middleware\";\nimport { isCachableContext } from \"./cache/is-cachable-context\";\nimport { isCachableRequest } from \"./cache/is-cachable-request\";\nimport { extendObservabilitySet } from \"./extend-observability-set\";\n\nexport const observabilityMiddleware: Middleware = {\n stack: \"dbcore\",\n level: 0,\n name: \"Observability\",\n create: (core) => {\n const dbName = core.schema.name;\n const FULL_RANGE = new RangeSet(core.MIN_KEY, core.MAX_KEY);\n\n return {\n ...core,\n transaction: (stores, mode, options) => {\n if (PSD.subscr && mode !== 'readonly') {\n throw new exceptions.ReadOnly(`Readwrite transaction in liveQuery context. Querier source: ${(PSD as LiveQueryContext).querier}`);\n }\n return core.transaction(stores, mode, options);\n },\n table: (tableName) => {\n const table = core.table(tableName);\n const { schema } = table;\n const { primaryKey, indexes } = schema;\n const { extractKey, outbound } = primaryKey;\n const indexesWithAutoIncPK = primaryKey.autoIncrement && indexes.filter(\n (index) => index.compound && (index.keyPath as string[]).includes(primaryKey.keyPath as string)\n );\n const tableClone: DBCoreTable = {\n ...table,\n mutate: (req) => {\n const trans = req.trans as DBCoreTransaction & {\n mutatedParts?: ObservabilitySet;\n };\n const mutatedParts = req.mutatedParts || (req.mutatedParts = {});\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (mutatedParts[part] ||\n (mutatedParts[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n\n const { type } = req;\n let [keys, newObjs] =\n req.type === \"deleteRange\"\n ? [req.range] // keys will be an DBCoreKeyRange object - transformed later on to a [from,to]-style range.\n : req.type === \"delete\"\n ? [req.keys] // keys known already here. newObjs will be undefined.\n : req.values.length < 50\n ? [getEffectiveKeys(primaryKey, req).filter(id => id), req.values] // keys except autoIncremented - they will be added later on.\n : []; // keys and newObjs will both be undefined - changeSpec will become true (changed for entire table)\n\n const oldCache = req.trans[\"_cache\"];\n\n // Add the mutated table and optionally keys to the mutatedTables set on the transaction.\n // Used by subscribers to txcommit event and for Collection.prototype.subscribe().\n if (isArray(keys)) {\n // keys is an array - delete, add or put of less than 50 rows.\n // Individual keys (add put or delete)\n pkRangeSet.addKeys(keys);\n // Only get oldObjs if they have been cached recently\n // (This applies to Collection.modify() only, but also if updating/deleting hooks have subscribers)\n const oldObjs = type === 'delete' || keys.length === newObjs.length ? getFromTransactionCache(keys, oldCache) : null;\n\n // Supply detailed values per index for both old and new objects:\n if (!oldObjs) {\n // add, delete or put and we don't know old values.\n // Indicate this in the \":dels\" part, for the sake of count() and primaryKeys() queries only!\n delsRangeSet.addKeys(keys);\n }\n if (oldObjs || newObjs) {\n // No matter if knowning oldObjs or not, track the indices if it's a put, add or delete.\n trackAffectedIndexes(getRangeSet, schema, oldObjs, newObjs);\n }\n } else if (keys) {\n // keys is a DBCoreKeyRange object. Transform it to [from,to]-style range.\n // As we can't know deleted index ranges, mark index-based subscriptions must trigger.\n const range = { from: keys.lower, to: keys.upper };\n delsRangeSet.add(range);\n // deleteRange. keys is a DBCoreKeyRange objects. Transform it to [from,to]-style range.\n pkRangeSet.add(range);\n } else {\n // Too many requests to record the details without slowing down write performance.\n // Let's just record a generic large range on primary key, the virtual :dels index and\n // all secondary indices:\n pkRangeSet.add(FULL_RANGE);\n delsRangeSet.add(FULL_RANGE);\n schema.indexes.forEach(idx => getRangeSet(idx.name).add(FULL_RANGE));\n }\n\n return table.mutate(req).then((res) => {\n // Merge the mutated parts from the request into the transaction's mutatedParts\n // now when the request went fine.\n if (keys && (req.type === 'add' || req.type === 'put')) {\n // Less than 50 requests (keys truthy) (otherwise we've added full range anyway)\n // autoincrement means we might not have got all keys until now\n pkRangeSet.addKeys(res.results);\n if (indexesWithAutoIncPK) {\n // Dexie Issue 1946:\n // If an auto-incremented primary key is part of a compound index,\n // we need to compute the resulting value of that index after inserting\n // the rows.\n indexesWithAutoIncPK.forEach(idx => {\n // Extract values of this compound index where primary key is not yet set:\n const idxVals = req.values.map(v => idx.extractKey(v));\n // Find the position of the primary key in the index:\n const pkPos = (idx.keyPath as string[]).findIndex(prop => prop === primaryKey.keyPath);\n // Update idxVals with the resulting primary keys to complete the index value:\n res.results!.forEach(pk => idxVals[pkPos] = pk);\n // Add the updated index to the rangeset:\n getRangeSet(idx.name).addKeys(idxVals);\n });\n }\n }\n trans.mutatedParts = extendObservabilitySet (\n trans.mutatedParts || {},\n mutatedParts\n );\n return res;\n });\n },\n };\n\n const getRange: (req: any) => [DBCoreIndex, RangeSet] = ({\n query: { index, range },\n }:\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest) => [\n index,\n new RangeSet(range.lower ?? core.MIN_KEY, range.upper ?? core.MAX_KEY),\n ];\n\n const readSubscribers: {[method in\n Exclude]: \n (req: any) => [DBCoreIndex, RangeSet]\n } = {\n get: (req) => [primaryKey, new RangeSet(req.key)],\n getMany: (req) => [primaryKey, new RangeSet().addKeys(req.keys)],\n count: getRange,\n query: getRange,\n openCursor: getRange,\n }\n\n keys(readSubscribers).forEach((method: 'get' | 'getMany' | 'count' | 'query' | 'openCursor') => {\n tableClone[method] = function (\n req:\n | DBCoreGetRequest\n | DBCoreGetManyRequest\n | DBCoreQueryRequest\n | DBCoreCountRequest\n | DBCoreOpenCursorRequest\n ) {\n const { subscr } = PSD as LiveQueryContext;\n const isLiveQuery = !!subscr;\n let cachable = isCachableContext(PSD as LiveQueryContext, table) && isCachableRequest(method, req);\n const obsSet = cachable\n ? req.obsSet = {} // Implicit read transaction - track changes for this query only for the request's duration\n : subscr; // Explicit read transaction - track changes across entire live query\n\n if (isLiveQuery) {\n // Current zone want's to track all queries so they can be subscribed to.\n // (The query is executed within a \"liveQuery\" zone)\n // Check whether the query applies to a certain set of ranges:\n // Track what we should be observing:\n const getRangeSet = (indexName: string) => {\n const part = `idb://${dbName}/${tableName}/${indexName}`;\n return (obsSet[part] ||\n (obsSet[part] = new RangeSet())) as RangeSet;\n };\n const pkRangeSet = getRangeSet(\"\");\n const delsRangeSet = getRangeSet(\":dels\");\n const [queriedIndex, queriedRanges] = readSubscribers[method](req);\n // A generic rule here: queried ranges should always be subscribed to.\n if (method === 'query' && queriedIndex.isPrimaryKey && !(req as DBCoreQueryRequest).values) {\n // A pure primay-key based Collection where only .primaryKeys() is requested. Don't wakeup on other changes than added or deleted primary keys within queried range.\n delsRangeSet.add(queriedRanges);\n } else {\n getRangeSet(queriedIndex.name || \"\").add(queriedRanges);\n }\n if (!queriedIndex.isPrimaryKey) {\n // Only count(), query() and openCursor() operates on secondary indices.\n // Since put(), delete() and deleteRange() mutations may happen without knowing oldObjs,\n // the mutate() method will be missing what secondary indices that are being deleted from\n // the subscribed range. We are working around this issue by recording all the resulting\n // primary keys from the queries. This only works for those kinds of queries where we can\n // derive the primary key from the result.\n // In this block we are accomplishing this using various strategies depending on the properties\n // of the query result.\n\n if (method === \"count\") {\n // We've got a problem! Delete and put mutations happen without known the oldObjs.\n // Those mutation could change the count.\n // Solution: Dedicated \":dels\" url represends a subscription to all mutations without oldObjs\n // (specially triggered in the mutators put(), delete() and deleteRange() when they don't know oldObject)\n delsRangeSet.add(FULL_RANGE);\n } else {\n // openCursor() or query()\n\n // Prepare a keysPromise in case the we're doing an IDBIndex.getAll() on a store with outbound keys.\n const keysPromise =\n method === \"query\" &&\n outbound &&\n (req as DBCoreQueryRequest).values &&\n table.query({\n ...(req as DBCoreQueryRequest),\n values: false,\n });\n\n return table[method].apply(this, arguments).then((res) => {\n if (method === \"query\") {\n if (outbound && (req as DBCoreQueryRequest).values) {\n // If keys are outbound, we can't use extractKey to map what keys to observe.\n // We've queried an index (like 'dateTime') on an outbound table\n // and retrieve a list of objects\n // from who we cannot know their primary keys.\n // \"Luckily\" though, we've prepared the keysPromise to assist us in exact this condition.\n return keysPromise.then(\n ({ result: resultingKeys }: DBCoreQueryResponse) => {\n pkRangeSet.addKeys(resultingKeys);\n return res;\n }\n );\n }\n // query() inbound values, keys or outbound keys. Secondary indexes only since\n // for primary keys we would only add results within the already registered range.\n const pKeys = (req as DBCoreQueryRequest).values\n ? (res as DBCoreQueryResponse).result.map(extractKey)\n : (res as DBCoreQueryResponse).result;\n if ((req as DBCoreQueryRequest).values) {\n // Subscribe to any mutation made on the returned keys,\n // so that we detect both deletions and updated properties.\n pkRangeSet.addKeys(pKeys);\n } else {\n // Subscribe only to mutations on the returned keys\n // in case the mutator was unable to know oldObjs.\n // If it has oldObj, the mutator won't put anything in \":dels\" because\n // it can more fine-grained put the exact removed and added index value in the correct\n // index range that we subscribe to in the queried range sets.\n // We don't load values so a change on a property outside our index will not\n // require us to re-execute the query.\n delsRangeSet.addKeys(pKeys);\n }\n } else if (method === \"openCursor\") {\n // Caller requests a cursor.\n // For the same reason as when method===\"query\", we only need to observe\n // those keys whose values are possibly used or rendered - which could\n // only happen on keys where they get the cursor's key, primaryKey or value.\n const cursor: DBCoreCursor | null = res;\n const wantValues = (req as DBCoreOpenCursorRequest).values;\n return (\n cursor &&\n Object.create(cursor, {\n key: {\n get() {\n delsRangeSet.addKey(cursor.primaryKey);\n return cursor.key;\n },\n },\n primaryKey: {\n get() {\n const pkey = cursor.primaryKey;\n delsRangeSet.addKey(pkey);\n return pkey;\n },\n },\n value: {\n get() {\n wantValues && pkRangeSet.addKey(cursor.primaryKey);\n return cursor.value;\n },\n },\n })\n );\n }\n return res;\n });\n }\n }\n }\n return table[method].apply(this, arguments);\n };\n });\n return tableClone;\n },\n };\n },\n};\n\nfunction trackAffectedIndexes(\n getRangeSet: (index: string) => RangeSet,\n schema: DBCoreTableSchema,\n oldObjs: readonly any[] | undefined,\n newObjs: readonly any[] | undefined\n) {\n function addAffectedIndex(ix: DBCoreIndex) {\n const rangeSet = getRangeSet(ix.name || \"\");\n function extractKey(obj: any) {\n return obj != null ? ix.extractKey(obj) : null;\n }\n const addKeyOrKeys = (key: any) => ix.multiEntry && isArray(key)\n // multiEntry and the old property was an array - add each array entry to the rangeSet:\n ? key.forEach(key => rangeSet.addKey(key))\n // Not multiEntry or the old property was not an array - add each array entry to the rangeSet:\n : rangeSet.addKey(key);\n\n (oldObjs || newObjs).forEach((_, i) => {\n const oldKey = oldObjs && extractKey(oldObjs[i]);\n const newKey = newObjs && extractKey(newObjs[i]);\n if (cmp(oldKey, newKey) !== 0) {\n // The index has changed. Add both old and new value of the index.\n if (oldKey != null) addKeyOrKeys(oldKey); // If oldKey is invalid key, addKey() will be a noop.\n if (newKey != null) addKeyOrKeys(newKey); // If newKey is invalid key, addKey() will be a noop.\n }\n });\n }\n schema.indexes.forEach(addAffectedIndex);\n}\n","import { delArrayItem, isArray } from '../../functions/utils';\nimport { TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreMutateRequest,\n DBCoreMutateResponse,\n} from '../../public/types/dbcore';\n\nexport function adjustOptimisticFromFailures(\n tblCache: TblQueryCache,\n req: DBCoreMutateRequest,\n res: DBCoreMutateResponse\n): DBCoreMutateRequest {\n if (res.numFailures === 0) return req;\n if (req.type === 'deleteRange') {\n // numFailures > 0 means the deleteRange operation failed in its whole.\n return null;\n }\n\n const numBulkOps = req.keys\n ? req.keys.length\n : 'values' in req && req.values\n ? req.values.length\n : 1;\n if (res.numFailures === numBulkOps) {\n // Same number of failures as the number of ops. This means that all ops failed.\n return null;\n }\n\n const clone: DBCoreMutateRequest = { ...req };\n\n if (isArray(clone.keys)) {\n clone.keys = clone.keys.filter((_, i) => !(i in res.failures));\n }\n if ('values' in clone && isArray(clone.values)) {\n clone.values = clone.values.filter((_, i) => !(i in res.failures));\n }\n return clone;\n}\n","import { cmp } from '../../functions/cmp';\nimport { IndexableType } from '../../public';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function isAboveLower(key: IndexableType, range: DBCoreKeyRange) {\n return range.lower === undefined\n ? true // lower is less than anything because it is undefined\n : range.lowerOpen\n ? cmp(key, range.lower) > 0 // lowerOpen: Exclude lower bound\n : cmp(key, range.lower) >= 0; // !lowerOpen: Include lower bound\n}\n\nexport function isBelowUpper(key: IndexableType, range: DBCoreKeyRange) {\n return range.upper === undefined\n ? true // upper is greater than anything because it is undefined\n : range.upperOpen\n ? cmp(key, range.upper) < 0 // upperOpen: Exclude upper bound\n : cmp(key, range.upper) <= 0; // !upperOpen: Include upper bound\n}\n\nexport function isWithinRange(key: IndexableType, range: DBCoreKeyRange) {\n return isAboveLower(key, range) && isBelowUpper(key, range);\n}\n","import { cmp } from '../../functions/cmp';\nimport { deepClone, isArray } from '../../functions/utils';\nimport { RangeSet, rangesOverlap } from '../../helpers/rangeset';\nimport { CacheEntry } from '../../public/types/cache';\nimport {\n DBCoreIndex,\n DBCoreMutateRequest,\n DBCoreQueryRequest,\n DBCoreTable,\n} from '../../public/types/dbcore';\nimport { isWithinRange } from './is-within-range';\n\nexport function applyOptimisticOps(\n result: any[],\n req: DBCoreQueryRequest,\n ops: DBCoreMutateRequest[] | undefined,\n table: DBCoreTable,\n cacheEntry: CacheEntry,\n immutable: boolean\n): any[] {\n if (!ops || ops.length === 0) return result;\n const index = req.query.index;\n const { multiEntry } = index;\n const queryRange = req.query.range;\n const primaryKey = table.schema.primaryKey;\n const extractPrimKey = primaryKey.extractKey!;\n const extractIndex = index.extractKey!;\n const extractLowLevelIndex = (index.lowLevelIndex || index).extractKey!;\n\n let finalResult = ops.reduce((result, op) => {\n let modifedResult = result;\n const includedValues =\n op.type === 'add' || op.type === 'put'\n ? op.values.filter((v) => {\n const key = extractIndex(v);\n return multiEntry && isArray(key) // multiEntry index work like plain index unless key is array\n ? key.some((k) => isWithinRange(k, queryRange)) // multiEntry and array key\n : isWithinRange(key, queryRange); // multiEntry but not array key\n }).map(v => {\n v = deepClone(v);// v might come from user so we can't just freeze it.\n if (immutable) Object.freeze(v);\n return v;\n })\n : [];\n switch (op.type) {\n case 'add':\n modifedResult = result.concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'put':\n const keySet = new RangeSet().addKeys(\n op.values.map((v) => extractPrimKey(v))\n );\n modifedResult = result\n .filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keySet);\n })\n .concat(\n req.values\n ? includedValues\n : includedValues.map((v) => extractPrimKey(v))\n );\n break;\n case 'delete':\n const keysToDelete = new RangeSet().addKeys(op.keys);\n modifedResult = result.filter((item) => {\n const key = req.values ? extractPrimKey(item) : item;\n return !rangesOverlap(new RangeSet(key), keysToDelete);\n });\n\n break;\n case 'deleteRange':\n const range = op.range;\n modifedResult = result.filter((item) => !isWithinRange(extractPrimKey(item), range));\n break;\n }\n return modifedResult;\n }, result);\n\n // If no changes were made, we can return the original result.\n if (finalResult === result) return result;\n\n // Sort the result on sortIndex:\n finalResult.sort((a, b) =>\n cmp(extractLowLevelIndex(a), extractLowLevelIndex(b)) ||\n cmp(extractPrimKey(a), extractPrimKey(b))\n );\n\n // If we have a limit we need to respect it:\n if (req.limit && req.limit < Infinity) {\n if (finalResult.length > req.limit) {\n finalResult.length = req.limit; // Cut of any extras after sorting correctly.\n } else if (result.length === req.limit && finalResult.length < req.limit) {\n // We're missing some items because of the limit. We need to add them back.\n // The easiest way is to mark the cache entry as dirty, which will cause\n // it to be requeried after the write-transaction successfully completes.\n cacheEntry.dirty = true;\n }\n }\n return immutable ? Object.freeze(finalResult) as any[] : finalResult;\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function areRangesEqual(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n cmp(r1.lower, r2.lower) === 0 &&\n cmp(r1.upper, r2.upper) === 0 &&\n !!r1.lowerOpen === !!r2.lowerOpen &&\n !!r1.upperOpen === !!r2.upperOpen\n );\n}\n","import { cmp } from '../../functions/cmp';\nimport { DBCoreKeyRange } from '../../public/types/dbcore';\n\nexport function compareLowers(lower1: any, lower2: any, lowerOpen1: boolean, lowerOpen2: boolean) {\n if (lower1 === undefined) return lower2 !== undefined ? -1 : 0;\n if (lower2 === undefined) return 1; // since lower1 !== undefined\n const c = cmp(lower1, lower2);\n if (c === 0) {\n if (lowerOpen1 && lowerOpen2) return 0;\n if (lowerOpen1) return 1\n if (lowerOpen2) return -1;\n }\n return c;\n}\n\nexport function compareUppers(upper1: any, upper2: any, upperOpen1: boolean, upperOpen2: boolean) {\n if (upper1 === undefined) return upper2 !== undefined ? 1 : 0;\n if (upper2 === undefined) return -1; // since upper1 !== undefined\n const c = cmp(upper1, upper2);\n if (c === 0) {\n if (upperOpen1 && upperOpen2) return 0;\n if (upperOpen1) return -1\n if (upperOpen2) return 1;\n }\n return c;\n}\n\nexport function isSuperRange(r1: DBCoreKeyRange, r2: DBCoreKeyRange) {\n return (\n compareLowers(r1.lower, r2.lower, r1.lowerOpen, r2.lowerOpen) <= 0 &&\n compareUppers(r1.upper, r2.upper, r1.upperOpen, r2.upperOpen) >= 0\n );\n}","import { CacheEntry, TblQueryCache } from '../../public/types/cache';\nimport {\n DBCoreCountRequest,\n DBCoreQueryRequest,\n} from '../../public/types/dbcore';\nimport { areRangesEqual } from './are-ranges-equal';\nimport { cache } from './cache';\nimport { isSuperRange } from './is-super-range';\n\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query',\n req: DBCoreQueryRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'count',\n req: DBCoreCountRequest\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]];\nexport function findCompatibleQuery(\n dbName: string,\n tableName: string,\n type: 'query' | 'count',\n req: Partial & Partial\n): [] | [CacheEntry, boolean, TblQueryCache, CacheEntry[]] {\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return [];\n const queries = tblCache.queries[type];\n if (!queries) return [null, false, tblCache, null];\n const indexName = req.query ? req.query.index.name : null;\n const entries = queries[indexName || ''];\n if (!entries) return [null, false, tblCache, null];\n\n switch (type) {\n case 'query':\n const equalEntry = entries.find(\n (entry) =>\n (entry.req as DBCoreQueryRequest).limit === req.limit &&\n (entry.req as DBCoreQueryRequest).values === req.values &&\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n if (equalEntry)\n return [\n equalEntry,\n true, // exact match\n tblCache,\n entries,\n ];\n const superEntry = entries.find((entry) => {\n const limit = 'limit' in entry.req ? entry.req.limit : Infinity;\n return (\n limit >= req.limit &&\n (req.values ? (entry.req as DBCoreQueryRequest).values : true) &&\n isSuperRange(entry.req.query.range, req.query.range)\n );\n });\n return [superEntry, false, tblCache, entries];\n case 'count':\n const countQuery = entries.find((entry) =>\n areRangesEqual(entry.req.query.range, req.query.range)\n );\n return [countQuery, !!countQuery, tblCache, entries];\n }\n}\n","import { delArrayItem } from \"../../functions/utils\";\nimport { CacheEntry } from \"../../public/types/cache\";\n\nexport function subscribeToCacheEntry(cacheEntry: CacheEntry, container: CacheEntry[], requery: ()=>void, signal: AbortSignal) {\n cacheEntry.subscribers.add(requery);\n signal.addEventListener(\"abort\", () => {\n cacheEntry.subscribers.delete(requery);\n if (cacheEntry.subscribers.size === 0) {\n enqueForDeletion(cacheEntry, container);\n }\n });\n}\n\n\nfunction enqueForDeletion(cacheEntry: CacheEntry, container: CacheEntry[]) {\n setTimeout(() => {\n if (cacheEntry.subscribers.size === 0) { // Still empty (no new subscribers readded after grace time)\n delArrayItem(container, cacheEntry);\n }\n }, 3000);\n}\n","import { LiveQueryContext } from '..';\nimport type { Transaction } from '../../classes/transaction';\nimport { getEffectiveKeys } from '../../dbcore/get-effective-keys';\nimport { deepClone, delArrayItem, setByKeyPath } from '../../functions/utils';\nimport DexiePromise, { PSD } from '../../helpers/promise';\nimport { ObservabilitySet } from '../../public/types/db-events';\nimport {\n DBCore, DBCoreMutateRequest, DBCoreMutateResponse, DBCoreQueryRequest,\n DBCoreQueryResponse\n} from '../../public/types/dbcore';\nimport { Middleware } from '../../public/types/middleware';\nimport { obsSetsOverlap } from '../obs-sets-overlap';\nimport { adjustOptimisticFromFailures } from './adjust-optimistic-request-from-failures';\nimport { applyOptimisticOps } from './apply-optimistic-ops';\nimport { cache } from './cache';\nimport { findCompatibleQuery } from './find-compatible-query';\nimport { isCachableContext } from './is-cachable-context';\nimport { isCachableRequest } from './is-cachable-request';\nimport { signalSubscribersLazily } from './signalSubscribers';\nimport { subscribeToCacheEntry } from './subscribe-cachentry';\n\nexport const cacheMiddleware: Middleware = {\n stack: 'dbcore',\n level: 0,\n name: 'Cache',\n create: (core) => {\n const dbName = core.schema.name;\n const coreMW: DBCore = {\n ...core,\n transaction: (stores, mode, options) => {\n const idbtrans = core.transaction(\n stores,\n mode,\n options\n ) as IDBTransaction & {\n mutatedParts?: ObservabilitySet;\n _explicit?: boolean;\n };\n // Maintain TblQueryCache.ops array when transactions commit or abort\n if (mode === 'readwrite') {\n const ac = new AbortController();\n const { signal } = ac;\n const endTransaction = (wasCommitted: boolean) => () => {\n ac.abort();\n if (mode === 'readwrite') {\n // Collect which subscribers to notify:\n const affectedSubscribers = new Set<()=>void>();\n\n // Go through all tables in transaction and check if they have any optimistic updates\n for (const storeName of stores) {\n const tblCache = cache[`idb://${dbName}/${storeName}`];\n if (tblCache) {\n const table = core.table(storeName);\n // Pick optimistic ops that are part of this transaction\n const ops = tblCache.optimisticOps.filter(\n (op) => op.trans === idbtrans\n );\n // Transaction was marked as _explicit in enterTransactionScope(), transaction-helpers.ts.\n if (idbtrans._explicit && wasCommitted && idbtrans.mutatedParts) {\n // Invalidate all queries that overlap with the mutated parts and signal their subscribers\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)) {\n delArrayItem(entries, entry); // Remove the entry from the cache so it can be refreshed\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n } else if (ops.length > 0) {\n // Remove them from the optimisticOps array\n tblCache.optimisticOps = tblCache.optimisticOps.filter(\n (op) => op.trans !== idbtrans\n );\n // Commit or abort the optimistic updates\n for (const entries of Object.values(\n tblCache.queries.query\n )) {\n for (const entry of entries.slice()) {\n if (\n entry.res != null && // if entry.promise but not entry.res, we're fine. Query will resume now and get the result.\n idbtrans.mutatedParts/* &&\n obsSetsOverlap(entry.obsSet, idbtrans.mutatedParts)*/\n ) {\n if (wasCommitted && !entry.dirty) {\n const freezeResults = Object.isFrozen(entry.res);\n const modRes = applyOptimisticOps(\n entry.res as any[],\n entry.req,\n ops,\n table,\n entry,\n freezeResults\n );\n if (entry.dirty) {\n // Found out at this point that the entry is dirty - not to rely on!\n delArrayItem(entries, entry);\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n } else if (modRes !== entry.res) {\n entry.res = modRes;\n // Update promise\n entry.promise = DexiePromise.resolve({result: modRes} satisfies DBCoreQueryResponse);\n \n // No need to notify subscribers. They already have this value.\n // We have just updated the value of the cache without having to\n // requery the database - because we know the result for this\n // query based on computing the operations and applying them\n // to the previous result.\n }\n } else {\n if (entry.dirty) {\n // If the entry is dirty we need to get rid of it so that\n // a new entry will be created when the query is run again.\n delArrayItem(entries, entry);\n }\n // If we're not committing, we need to notify subscribers that the\n // optimistic updates are no longer valid.\n entry.subscribers.forEach((requery) => affectedSubscribers.add(requery));\n }\n }\n }\n }\n }\n }\n }\n affectedSubscribers.forEach((requery) => requery());\n }\n };\n idbtrans.addEventListener('abort', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('error', endTransaction(false), {\n signal,\n });\n idbtrans.addEventListener('complete', endTransaction(true), {\n signal,\n });\n }\n return idbtrans;\n },\n table(tableName: string) {\n const downTable = core.table(tableName);\n const primKey = downTable.schema.primaryKey;\n const tableMW = {\n ...downTable,\n mutate(req: DBCoreMutateRequest): Promise {\n const trans = PSD.trans as Transaction;\n if (\n primKey.outbound || // Non-inbound tables are harded to apply optimistic updates on because we can't know primary key of results\n trans.db._options.cache === 'disabled' || // User has opted-out from caching\n trans.explicit // It's an explicit write transaction being made. Don't affect cache until transaction commits.\n ) {\n // Just forward the request to the core.\n return downTable.mutate(req);\n }\n // Find the TblQueryCache for this table:\n const tblCache = cache[`idb://${dbName}/${tableName}`];\n if (!tblCache) return downTable.mutate(req);\n\n const promise = downTable.mutate(req);\n if ((req.type === 'add' || req.type === 'put') && (req.values.length >= 50 || getEffectiveKeys(primKey, req).some(key => key == null))) {\n // There are some autoIncremented keys not set yet. Need to wait for completion before we can reliably enqueue the operation.\n // (or there are too many objects so we lazy out to avoid performance bottleneck for large bulk inserts)\n promise.then((res) => { // We need to extract result keys and generate cloned values with the keys set (so that applyOptimisticOps can work)\n // But we have a problem! The req.mutatedParts is still not complete so we have to actively add the keys to the unsignaledParts set manually.\n const reqWithResolvedKeys = {\n ...req,\n values: req.values.map((value, i) => {\n const valueWithKey = primKey.keyPath?.includes('.')\n ? deepClone(value)\n : {\n ...value,\n };\n setByKeyPath(valueWithKey, primKey.keyPath, res.results![i]);\n return valueWithKey;\n })\n };\n const adjustedReq = adjustOptimisticFromFailures(tblCache, reqWithResolvedKeys, res);\n tblCache.optimisticOps.push(adjustedReq);\n // Signal subscribers after the observability middleware has complemented req.mutatedParts with the new keys.\n // We must queue the task so that we get the req.mutatedParts updated by observability middleware first.\n // If we refactor the dependency between observability middleware and this middleware we might not need to queue the task.\n queueMicrotask(()=>req.mutatedParts && signalSubscribersLazily(req.mutatedParts)); // Reason for double laziness: in user awaits put and then does another put, signal once.\n });\n } else {\n // Enque the operation immediately\n tblCache.optimisticOps.push(req);\n // Signal subscribers that there are mutated parts\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts);\n promise.then((res) => {\n if (res.numFailures > 0) {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n const adjustedReq = adjustOptimisticFromFailures(tblCache, req, res);\n if (adjustedReq) {\n tblCache.optimisticOps.push(adjustedReq);\n }\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n }\n });\n promise.catch(()=> {\n // In case the operation failed, we need to remove it from the optimisticOps array.\n delArrayItem(tblCache.optimisticOps, req);\n req.mutatedParts && signalSubscribersLazily(req.mutatedParts); // Signal the rolling back of the operation.\n });\n }\n return promise;\n },\n query(req: DBCoreQueryRequest): Promise {\n if (!isCachableContext(PSD, downTable) || !isCachableRequest(\"query\", req)) return downTable.query(req);\n const freezeResults =\n (PSD as LiveQueryContext).trans?.db._options.cache === 'immutable';\n const { requery, signal } = PSD as LiveQueryContext;\n let [cacheEntry, exactMatch, tblCache, container] =\n findCompatibleQuery(dbName, tableName, 'query', req);\n if (cacheEntry && exactMatch) {\n cacheEntry.obsSet = req.obsSet!; // So that optimistic result is monitored.\n // How? - because observability-middleware will track result where optimistic\n // mutations are applied and record it in the cacheEntry.\n // TODO: CHANGE THIS! The difference is resultKeys only.\n // Wanted behavior:\n // * cacheEntry obsSet should represent the obsSet without optimistic updates (so it can be checked when merging ops in tx commit)\n // * cacheEntry optimisticObsSet should represent the obsSet with current optimistic updates. It should be updated when adding an op\n // by adding the primary keys of the put/add/delete operation to the set.\n // * observability-middleware should stop recording req.obsSet when a cache entry exact match is found because it won't be used anyway.\n // I'm thinking of merging observability-middleware with cache-middleware into one single middleware because the dependencies are too\n // tight between them.\n } else {\n // --> TODO here: If not exact match, check if we have a superset to extract\n // the data from.\n\n // No cached result found. We need to query the database and cache the result.\n const promise = downTable.query(req).then((res) => {\n // Freeze or clone results\n const result = res.result;\n if (cacheEntry) cacheEntry.res = result;\n if (freezeResults) {\n // For performance reasons don't deep freeze.\n // Only freeze the top-level array and its items.\n // This is good enough to teach users that the result must be treated as immutable\n // without enforcing it recursively on the entire result (which is not even possible\n // for things like Date objects and typed arrays)\n for (let i = 0, l = result.length; i < l; ++i) {\n Object.freeze(result[i]);\n }\n Object.freeze(result);\n } else {\n // If not frozen, we need to clone the result to avoid user mutating the cache\n // When we do this, user's must feel conformable with the fact that the result\n // can be mutated deeply - user is not expected to have any respect for immutability.\n res.result = deepClone(result);\n }\n return res;\n }).catch(error => {\n // In case the query operation failed, we need to remove it from the cache\n // so that subsequent calls does not get the same error but re-evaluate\n // the query.\n if (container && cacheEntry) delArrayItem(container, cacheEntry);\n return Promise.reject(error);\n });\n cacheEntry = {\n obsSet: req.obsSet!,\n promise,\n subscribers: new Set(),\n type: 'query',\n req,\n dirty: false,\n };\n if (container) {\n container.push(cacheEntry);\n } else {\n container = [cacheEntry];\n if (!tblCache) {\n tblCache = cache[`idb://${dbName}/${tableName}`] = {\n queries: {\n query: {},\n count: {},\n },\n objs: new Map(),\n optimisticOps: [],\n unsignaledParts: {}\n };\n }\n tblCache.queries.query[req.query.index.name || ''] = container;\n }\n }\n subscribeToCacheEntry(cacheEntry, container!, requery, signal);\n return cacheEntry.promise.then((res: DBCoreQueryResponse) => {\n return {\n result: applyOptimisticOps(\n res.result,\n req,\n tblCache?.optimisticOps,\n downTable,\n cacheEntry!,\n freezeResults\n ) as any[], // readonly any[]\n };\n });\n },\n };\n return tableMW;\n },\n };\n return coreMW;\n },\n};\n\n\n","import { type Dexie } from \"../classes/dexie\";\nimport { type Table } from \"../classes/table\";\nimport { type Transaction } from \"../classes/transaction\";\n\nexport function vipify(\n target: T,\n vipDb: Dexie\n): T {\n return new Proxy(target, {\n get (target, prop, receiver) {\n // The \"db\" prop of the table or transaction is the only one we need to\n // override. The rest of the props can be accessed from the original\n // object.\n if (prop === 'db') return vipDb;\n return Reflect.get(target, prop, receiver);\n }\n });\n}\n","// Import types from the public API\nimport { Dexie as IDexie } from \"../../public/types/dexie\";\nimport { DexieOptions, DexieConstructor } from \"../../public/types/dexie-constructor\";\nimport { DbEvents } from \"../../public/types/db-events\";\n//import { PromiseExtended, PromiseExtendedConstructor } from '../../public/types/promise-extended';\nimport { Table as ITable } from '../../public/types/table';\nimport { TableSchema } from \"../../public/types/table-schema\";\nimport { DbSchema } from '../../public/types/db-schema';\n\n// Internal imports\nimport { Table, TableConstructor, createTableConstructor } from \"../table\";\nimport { Collection, CollectionConstructor, createCollectionConstructor } from '../collection';\nimport { WhereClause } from '../where-clause/where-clause';\nimport { WhereClauseConstructor, createWhereClauseConstructor } from '../where-clause/where-clause-constructor';\nimport { Transaction } from '../transaction';\nimport { TransactionConstructor, createTransactionConstructor } from '../transaction/transaction-constructor';\nimport { Version } from \"../version/version\";\nimport { VersionConstructor, createVersionConstructor } from '../version/version-constructor';\n\n// Other imports...\nimport { DexieEventSet } from '../../public/types/dexie-event-set';\nimport { DexieExceptionClasses } from '../../public/types/errors';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\nimport { nop, promisableChain } from '../../functions/chaining-functions';\nimport Promise, { PSD, globalPSD } from '../../helpers/promise';\nimport { extend, override, keys, hasOwn } from '../../functions/utils';\nimport Events from '../../helpers/Events';\nimport { maxString, connections, READONLY, READWRITE } from '../../globals/constants';\nimport { getMaxKey } from '../../functions/quirks';\nimport { exceptions } from '../../errors';\nimport { lowerVersionFirst } from '../version/schema-helpers';\nimport { dexieOpen } from './dexie-open';\nimport { wrap } from '../../helpers/promise';\nimport { _onDatabaseDeleted } from '../../helpers/database-enumerator';\nimport { eventRejectHandler } from '../../functions/event-wrappers';\nimport { extractTransactionArgs, enterTransactionScope } from './transaction-helpers';\nimport { TransactionMode } from '../../public/types/transaction-mode';\nimport { rejection } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { DBCore } from '../../public/types/dbcore';\nimport { Middleware, DexieStacks } from '../../public/types/middleware';\nimport { virtualIndexMiddleware } from '../../dbcore/virtual-index-middleware';\nimport { hooksMiddleware } from '../../hooks/hooks-middleware';\nimport { IndexableType } from '../../public';\nimport { observabilityMiddleware } from '../../live-query/observability-middleware';\nimport { cacheExistingValuesMiddleware } from '../../dbcore/cache-existing-values-middleware';\nimport { cacheMiddleware } from \"../../live-query/cache/cache-middleware\";\nimport { vipify } from \"../../helpers/vipify\";\n\nexport interface DbReadyState {\n dbOpenError: any;\n isBeingOpened: boolean;\n onReadyBeingFired: undefined | Function[];\n openComplete: boolean;\n dbReadyResolve: () => void;\n dbReadyPromise: Promise;\n cancelOpen: (reason?: Error) => void;\n openCanceller: Promise & { _stackHolder?: Error };\n autoSchema: boolean;\n vcFired?: boolean;\n PR1398_maxLoop?: number;\n autoOpen?: boolean;\n}\n\nexport class Dexie implements IDexie {\n _options: DexieOptions;\n _state: DbReadyState;\n _versions: Version[];\n _storeNames: string[];\n _deps: DexieDOMDependencies;\n _allTables: { [name: string]: Table; };\n _createTransaction: (this: Dexie, mode: IDBTransactionMode, storeNames: ArrayLike, dbschema: { [tableName: string]: TableSchema; }, parentTransaction?: Transaction) => Transaction;\n _dbSchema: { [tableName: string]: TableSchema; };\n _hasGetAll?: boolean;\n _maxKey: IndexableType;\n _fireOnBlocked: (ev: Event) => void;\n _middlewares: {[StackName in keyof DexieStacks]?: Middleware[]} = {};\n _vip?: boolean;\n _novip: Dexie;// db._novip is to escape to orig db from db.vip.\n core: DBCore;\n\n name: string;\n verno: number = 0;\n idbdb: IDBDatabase | null;\n vip: Dexie;\n on: DbEvents;\n\n Table: TableConstructor;\n WhereClause: WhereClauseConstructor;\n Collection: CollectionConstructor;\n Version: VersionConstructor;\n Transaction: TransactionConstructor;\n static disableBfCache?: boolean;\n\n constructor(name: string, options?: DexieOptions) {\n const deps = (Dexie as any as DexieConstructor).dependencies;\n this._options = options = {\n // Default Options\n addons: (Dexie as any as DexieConstructor).addons, // Pick statically registered addons by default\n autoOpen: true, // Don't require db.open() explicitely.\n // Default DOM dependency implementations from static prop.\n indexedDB: deps.indexedDB, // Backend IndexedDB api. Default to browser env.\n IDBKeyRange: deps.IDBKeyRange, // Backend IDBKeyRange api. Default to browser env.\n cache: 'cloned', // Default to cloned for backward compatibility. For best performance and least memory consumption use 'immutable'.\n ...options\n }; \n this._deps = {\n indexedDB: options.indexedDB as IDBFactory,\n IDBKeyRange: options.IDBKeyRange as typeof IDBKeyRange\n };\n const {\n addons,\n } = options;\n this._dbSchema = {};\n this._versions = [];\n this._storeNames = [];\n this._allTables = {};\n this.idbdb = null;\n this._novip = this;\n const state: DbReadyState = {\n dbOpenError: null,\n isBeingOpened: false,\n onReadyBeingFired: null,\n openComplete: false,\n dbReadyResolve: nop,\n dbReadyPromise: null as Promise,\n cancelOpen: nop,\n openCanceller: null as Promise,\n autoSchema: true,\n PR1398_maxLoop: 3,\n autoOpen: options.autoOpen,\n };\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n this._state = state;\n this.name = name;\n this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", \"close\", { ready: [promisableChain, nop] }) as DbEvents;\n this.on.ready.subscribe = override(this.on.ready.subscribe, subscribe => {\n return (subscriber, bSticky) => {\n (Dexie as any as DexieConstructor).vip(() => {\n const state = this._state;\n if (state.openComplete) {\n // Database already open. Call subscriber asap.\n if (!state.dbOpenError) Promise.resolve().then(subscriber);\n // bSticky: Also subscribe to future open sucesses (after close / reopen) \n if (bSticky) subscribe(subscriber);\n } else if (state.onReadyBeingFired) {\n // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected\n state.onReadyBeingFired.push(subscriber);\n if (bSticky) subscribe(subscriber);\n } else {\n // Database not yet open. Subscribe to it.\n subscribe(subscriber);\n // If bSticky is falsy, make sure to unsubscribe subscriber when fired once.\n const db = this;\n if (!bSticky) subscribe(function unsubscribe() {\n db.on.ready.unsubscribe(subscriber);\n db.on.ready.unsubscribe(unsubscribe);\n });\n }\n });\n }\n });\n\n // Create derived classes bound to this instance of Dexie:\n this.Collection = createCollectionConstructor(this);\n this.Table = createTableConstructor(this);\n this.Transaction = createTransactionConstructor(this);\n this.Version = createVersionConstructor(this);\n this.WhereClause = createWhereClauseConstructor(this);\n\n // Default subscribers to \"versionchange\" and \"blocked\".\n // Can be overridden by custom handlers. If custom handlers return false, these default\n // behaviours will be prevented.\n this.on(\"versionchange\", ev => {\n // Default behavior for versionchange event is to close database connection.\n // Caller can override this behavior by doing db.on(\"versionchange\", function(){ return false; });\n // Let's not block the other window from making it's delete() or open() call.\n // NOTE! This event is never fired in IE,Edge or Safari.\n if (ev.newVersion > 0)\n console.warn(`Another connection wants to upgrade database '${this.name}'. Closing db now to resume the upgrade.`);\n else\n console.warn(`Another connection wants to delete database '${this.name}'. Closing db now to resume the delete request.`);\n this.close({disableAutoOpen: false});\n // In many web applications, it would be recommended to force window.reload()\n // when this event occurs. To do that, subscribe to the versionchange event\n // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion)\n // The reason for this is that your current web app obviously has old schema code that needs\n // to be updated. Another window got a newer version of the app and needs to upgrade DB but\n // your window is blocking it unless we close it here.\n });\n this.on(\"blocked\", ev => {\n if (!ev.newVersion || ev.newVersion < ev.oldVersion)\n console.warn(`Dexie.delete('${this.name}') was blocked`);\n else\n console.warn(`Upgrade '${this.name}' blocked by other connection holding version ${ev.oldVersion / 10}`);\n });\n\n this._maxKey = getMaxKey(options.IDBKeyRange as typeof IDBKeyRange);\n\n this._createTransaction = (\n mode: IDBTransactionMode,\n storeNames: string[],\n dbschema: DbSchema,\n parentTransaction?: Transaction) => new this.Transaction(mode, storeNames, dbschema, this._options.chromeTransactionDurability, parentTransaction);\n\n this._fireOnBlocked = ev => {\n this.on(\"blocked\").fire(ev);\n // Workaround (not fully*) for missing \"versionchange\" event in IE,Edge and Safari:\n connections\n .filter(c => c.name === this.name && c !== this && !c._state.vcFired)\n .map(c => c.on(\"versionchange\").fire(ev));\n }\n\n // Default middlewares:\n this.use(cacheExistingValuesMiddleware);\n this.use(cacheMiddleware);\n this.use(observabilityMiddleware);\n this.use(virtualIndexMiddleware);\n this.use(hooksMiddleware);\n\n const vipDB = new Proxy(this, {\n get: (_, prop, receiver) => {\n if (prop === '_vip') return true;\n if (prop === 'table') return (tableName: string) => vipify(this.table(tableName), vipDB);\n const rv = Reflect.get(_, prop, receiver);\n if (rv instanceof Table) return vipify(rv, vipDB);\n if (prop === 'tables') return (rv as Table[]).map(t => vipify(t, vipDB));\n if (prop === '_createTransaction') return function() {\n const tx: Transaction = (rv as typeof this._createTransaction).apply(this, arguments);\n return vipify(tx, vipDB);\n }\n return rv;\n }\n });\n this.vip = vipDB;\n\n // Call each addon:\n addons.forEach(addon => addon(this));\n }\n\n version(versionNumber: number): Version {\n if (isNaN(versionNumber) || versionNumber < 0.1) throw new exceptions.Type(`Given version is not a positive number`);\n versionNumber = Math.round(versionNumber * 10) / 10;\n if (this.idbdb || this._state.isBeingOpened)\n throw new exceptions.Schema(\"Cannot add version when database is open\");\n this.verno = Math.max(this.verno, versionNumber);\n const versions = this._versions;\n var versionInstance = versions.filter(\n v => v._cfg.version === versionNumber)[0];\n if (versionInstance) return versionInstance;\n versionInstance = new this.Version(versionNumber);\n versions.push(versionInstance);\n versions.sort(lowerVersionFirst);\n versionInstance.stores({}); // Derive earlier schemas by default.\n // Disable autoschema mode, as at least one version is specified.\n this._state.autoSchema = false;\n return versionInstance;\n }\n\n _whenReady(fn: () => Promise): Promise {\n return (this.idbdb && (this._state.openComplete || PSD.letThrough || this._vip)) ? fn() : new Promise((resolve, reject) => {\n if (this._state.openComplete) {\n // idbdb is falsy but openComplete is true. Must have been an exception durin open.\n // Don't wait for openComplete as it would lead to infinite loop.\n return reject(new exceptions.DatabaseClosed(this._state.dbOpenError));\n }\n if (!this._state.isBeingOpened) {\n if (!this._state.autoOpen) {\n reject(new exceptions.DatabaseClosed());\n return;\n }\n this.open().catch(nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n }\n this._state.dbReadyPromise.then(resolve, reject);\n }).then(fn);\n }\n\n use({stack, create, level, name}: Middleware): this {\n if (name) this.unuse({stack, name}); // Be able to replace existing middleware.\n const middlewares = this._middlewares[stack] || (this._middlewares[stack] = []);\n middlewares.push({stack, create, level: level == null ? 10 : level, name});\n middlewares.sort((a, b) => a.level - b.level);\n // Todo update db.core and db.tables...core ? Or should be expect this to have effect\n // only after next open()?\n return this;\n }\n\n unuse({stack, create}: Middleware<{stack: keyof DexieStacks}>): this;\n unuse({stack, name}: {stack: keyof DexieStacks, name: string}): this;\n unuse({stack, name, create}: {stack: keyof DexieStacks, name?: string, create?: Function}) {\n if (stack && this._middlewares[stack]) {\n this._middlewares[stack] = this._middlewares[stack].filter(mw =>\n create ? mw.create !== create : // Given middleware has a create method. Match that exactly.\n name ? mw.name !== name : // Given middleware spec \n false);\n }\n return this;\n }\n\n open() {\n return usePSD(\n globalPSD, // Enforce global scope here since db.open() can be part of a live query or transaction scope\n () => dexieOpen(this)\n );\n }\n\n _close(): void {\n const state = this._state;\n const idx = connections.indexOf(this);\n if (idx >= 0) connections.splice(idx, 1);\n if (this.idbdb) {\n try { this.idbdb.close(); } catch (e) { }\n this.idbdb = null;\n } \n // Reset dbReadyPromise promise:\n if (!state.isBeingOpened) {\n // Only if not being opened, reset these promises.\n // Otherwise, keep them so existing promise consumers will resolve when db\n // db is reopened later on, in case closing for purpose reopening, using {disableAutoOpen: false}.\n state.dbReadyPromise = new Promise(resolve => {\n state.dbReadyResolve = resolve;\n });\n state.openCanceller = new Promise((_, reject) => {\n state.cancelOpen = reject;\n });\n }\n }\n\n close({disableAutoOpen} = {disableAutoOpen: true}): void {\n const state = this._state;\n if (disableAutoOpen) {\n if (state.isBeingOpened) {\n // cancel before the call to this._close() because this._close() will recreate dbReadyPromise and openCanceller.\n state.cancelOpen(new exceptions.DatabaseClosed());\n }\n this._close();\n state.autoOpen = false;\n state.dbOpenError = new exceptions.DatabaseClosed();\n } else {\n this._close();\n state.autoOpen = this._options.autoOpen ||\n state.isBeingOpened; // If an open call is ongoing, that same promise will resolve when db is reopend.\n state.openComplete = false;\n state.dbOpenError = null;\n }\n }\n\n delete(closeOptions = {disableAutoOpen: true}): Promise {\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n const hasInvalidArguments = arguments.length > 0 && typeof arguments[0] !== 'object'; \n const state = this._state;\n return new Promise((resolve, reject) => {\n const doDelete = () => {\n this.close(closeOptions);\n var req = this._deps.indexedDB.deleteDatabase(this.name);\n req.onsuccess = wrap(() => {\n _onDatabaseDeleted(this._deps, this.name);\n resolve();\n });\n req.onerror = eventRejectHandler(reject);\n req.onblocked = this._fireOnBlocked;\n }\n // Prevent accidentially doing db.delete(1) when intention was to do db.[table].delete(1).\n if (hasInvalidArguments) throw new exceptions.InvalidArgument(\"Invalid closeOptions argument to db.delete()\");\n if (state.isBeingOpened) {\n state.dbReadyPromise.then(doDelete);\n } else {\n doDelete();\n }\n });\n }\n\n backendDB() {\n return this.idbdb;\n }\n\n isOpen() {\n return this.idbdb !== null;\n }\n\n hasBeenClosed() {\n const dbOpenError = this._state.dbOpenError;\n return dbOpenError && (dbOpenError.name === 'DatabaseClosed');\n }\n\n hasFailed() {\n return this._state.dbOpenError !== null;\n }\n\n dynamicallyOpened() {\n return this._state.autoSchema;\n }\n\n get tables () {\n return keys(this._allTables).map(name => this._allTables[name]);\n }\n\n transaction(): Promise {\n const args = extractTransactionArgs.apply(this, arguments);\n return this._transaction.apply(this, args);\n }\n\n _transaction(mode: TransactionMode, tables: Array, scopeFunc: Function) {\n let parentTransaction = PSD.trans as Transaction | undefined;\n // Check if parent transactions is bound to this db instance, and if caller wants to reuse it\n if (!parentTransaction || parentTransaction.db !== this || mode.indexOf('!') !== -1) parentTransaction = null;\n const onlyIfCompatible = mode.indexOf('?') !== -1;\n mode = mode.replace('!', '').replace('?', '') as TransactionMode; // Ok. Will change arguments[0] as well but we wont touch arguments henceforth.\n let idbMode: IDBTransactionMode,\n storeNames;\n\n try {\n //\n // Get storeNames from arguments. Either through given table instances, or through given table names.\n //\n storeNames = tables.map(table => {\n var storeName = table instanceof this.Table ? table.name : table;\n if (typeof storeName !== 'string') throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n return storeName;\n });\n\n //\n // Resolve mode. Allow shortcuts \"r\" and \"rw\".\n //\n if (mode == \"r\" || mode === READONLY)\n idbMode = READONLY;\n else if (mode == \"rw\" || mode == READWRITE)\n idbMode = READWRITE;\n else\n throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n\n if (parentTransaction) {\n // Basic checks\n if (parentTransaction.mode === READONLY && idbMode === READWRITE) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n }\n if (parentTransaction) {\n storeNames.forEach(storeName => {\n if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n if (onlyIfCompatible) {\n // Spawn new transaction instead.\n parentTransaction = null; \n }\n else throw new exceptions.SubTransaction(\"Table \" + storeName +\n \" not included in parent transaction.\");\n }\n });\n }\n if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n // '?' mode should not keep using an inactive transaction.\n parentTransaction = null;\n }\n }\n } catch (e) {\n return parentTransaction ?\n parentTransaction._promise(null, (_, reject) => {reject(e);}) :\n rejection (e);\n }\n // If this is a sub-transaction, lock the parent and then launch the sub-transaction.\n const enterTransaction = enterTransactionScope.bind(null, this, idbMode, storeNames, parentTransaction, scopeFunc);\n return (parentTransaction ?\n parentTransaction._promise(idbMode, enterTransaction, \"lock\") :\n PSD.trans ?\n // no parent transaction despite PSD.trans exists. Make sure also\n // that the zone we create is not a sub-zone of current, because\n // Promise.follow() should not wait for it if so.\n usePSD(PSD.transless, ()=>this._whenReady(enterTransaction)) :\n this._whenReady (enterTransaction));\n }\n\n table(tableName: string): Table;\n table(tableName: string): ITable;\n table(tableName: string): Table {\n if (!hasOwn(this._allTables, tableName)) {\n throw new exceptions.InvalidTable(`Table ${tableName} does not exist`); }\n return this._allTables[tableName];\n }\n}\n","import {\n Observable as IObservable,\n Observer,\n Subscription,\n} from \"../../public/types/observable\";\n\nconst symbolObservable: typeof Symbol.observable =\n typeof Symbol !== \"undefined\" && \"observable\" in Symbol\n ? Symbol.observable\n : \"@@observable\" as any;\n\nexport class Observable implements IObservable {\n private _subscribe: (observer: Observer) => Subscription;\n hasValue?: ()=>boolean;\n getValue?: ()=>T;\n\n constructor(subscribe: (observer: Observer) => Subscription) {\n this._subscribe = subscribe;\n }\n\n subscribe(\n onNext?: ((value: T) => void) | null,\n onError?: ((error: any) => void) | null,\n onComplete?: (() => void) | null\n ): Subscription;\n subscribe(observer?: Observer | null): Subscription;\n subscribe(x?: any, error?: any, complete?: any): Subscription {\n return this._subscribe(\n !x || typeof x === \"function\" ? { next: x, error, complete } : x\n );\n }\n\n [symbolObservable]() {\n return this;\n }\n}\n","import { _global } from '../../globals/global';\nimport { DexieDOMDependencies } from '../../public/types/dexie-dom-dependencies';\n\nexport let domDeps: DexieDOMDependencies\n\ntry {\n domDeps = {\n // Required:\n indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n };\n} catch (e) {\n domDeps = { indexedDB: null, IDBKeyRange: null };\n}\n","import { _global, isAsyncFunction, keys, objectIsEmpty } from '../functions/utils';\nimport {\n globalEvents,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport {\n beginMicroTickScope,\n decrementExpectedAwaits,\n endMicroTickScope,\n execInGlobalContext,\n incrementExpectedAwaits,\n NativePromise,\n newScope,\n PSD,\n usePSD,\n} from '../helpers/promise';\nimport { ObservabilitySet } from '../public/types/db-events';\nimport {\n Observable as IObservable,\n Subscription,\n} from '../public/types/observable';\nimport { Observable } from '../classes/observable/observable';\nimport { extendObservabilitySet } from './extend-observability-set';\nimport { rangesOverlap } from '../helpers/rangeset';\nimport { domDeps } from '../classes/dexie/dexie-dom-dependencies';\nimport { Transaction } from '../classes/transaction';\nimport { obsSetsOverlap } from './obs-sets-overlap';\n\nexport interface LiveQueryContext {\n subscr: ObservabilitySet;\n signal: AbortSignal;\n requery: () => void;\n trans: null | Transaction;\n querier: Function; // For debugging purposes and Error messages\n}\n\nexport function liveQuery(querier: () => T | Promise): IObservable {\n let hasValue = false;\n let currentValue: T;\n const observable = new Observable((observer) => {\n const scopeFuncIsAsync = isAsyncFunction(querier);\n function execute(ctx: LiveQueryContext) {\n const wasRootExec = beginMicroTickScope(); // Performance: Avoid starting a new microtick scope within the async context.\n try {\n if (scopeFuncIsAsync) {\n incrementExpectedAwaits();\n }\n let rv = newScope(querier, ctx);\n if (scopeFuncIsAsync) {\n // Make sure to set rv = rv.finally in order to wait to after decrementExpectedAwaits() has been called.\n // This fixes zone leaking issue that the liveQuery zone can leak to observer's next microtask.\n rv = (rv as Promise).finally(decrementExpectedAwaits);\n }\n return rv;\n } finally {\n wasRootExec && endMicroTickScope(); // Given that we created the microtick scope, we must also end it.\n }\n }\n\n let closed = false;\n let abortController: AbortController;\n\n let accumMuts: ObservabilitySet = {};\n let currentObs: ObservabilitySet = {};\n\n const subscription: Subscription = {\n get closed() {\n return closed;\n },\n unsubscribe: () => {\n if (closed) return;\n closed = true;\n if (abortController) abortController.abort();\n if (startedListening) globalEvents.storagemutated.unsubscribe(mutationListener);\n },\n };\n\n observer.start && observer.start(subscription); // https://github.com/tc39/proposal-observable\n\n let startedListening = false;\n\n const doQuery = () => execInGlobalContext(_doQuery);\n\n function shouldNotify() {\n return obsSetsOverlap(currentObs, accumMuts);\n }\n\n const mutationListener = (parts: ObservabilitySet) => {\n extendObservabilitySet(accumMuts, parts);\n if (shouldNotify()) {\n doQuery();\n }\n };\n\n const _doQuery = () => {\n if (\n closed || // closed - don't run!\n !domDeps.indexedDB) // SSR in sveltekit, nextjs etc\n {\n return;\n }\n accumMuts = {};\n const subscr: ObservabilitySet = {};\n // Abort signal fill three purposes:\n // 1. Abort the query if the observable is unsubscribed.\n // 2. Abort the query if a new query is made before the previous one has completed.\n // 3. For cached queries to know if they should remain in memory or could be enqued for being freed up.\n // (they will remain in memory for a short time and if noone needs them again, they will eventually be freed up)\n if (abortController) abortController.abort(); // Cancel previous query. Last query will be cancelled on unsubscribe().\n abortController = new AbortController();\n \n const ctx: LiveQueryContext = {\n subscr,\n signal: abortController.signal,\n requery: doQuery,\n querier,\n trans: null // Make the scope transactionless (don't reuse transaction from outer scope of the caller of subscribe())\n }\n const ret = execute(ctx);\n Promise.resolve(ret).then(\n (result) => {\n hasValue = true;\n currentValue = result;\n if (closed || ctx.signal.aborted) {\n // closed - no subscriber anymore.\n // signal.aborted - new query was made before this one completed and\n // the querier might have catched AbortError and return successful result.\n // If so, we should not rely in that result because we know we have aborted\n // this run, which means there's another run going on that will handle accumMuts\n // and we must not base currentObs on the half-baked subscr.\n return;\n }\n accumMuts = {};\n // Update what we are subscribing for based on this last run:\n currentObs = subscr;\n if (!objectIsEmpty(currentObs) && !startedListening) {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, mutationListener);\n startedListening = true;\n }\n execInGlobalContext(()=>!closed && observer.next && observer.next(result));\n },\n (err) => {\n hasValue = false;\n if (!['DatabaseClosedError', 'AbortError'].includes(err?.name)) {\n if (!closed) execInGlobalContext(()=>{\n if (closed) return;\n observer.error && observer.error(err);\n });\n }\n }\n );\n };\n\n // Use setTimeot here to guarantee execution in a private macro task before and\n // after. The helper executeInGlobalContext(_doQuery) is not enough here because\n // caller of `subscribe()` could be anything, such as a frontend framework that will\n // continue in the same tick after subscribe() is called and call other\n // eftects, that could involve dexie operations such as writing to the DB.\n // If that happens, the private zone echoes from a live query tast started here\n // could still be ongoing when the other operations start and make them inherit\n // the async context from a live query.\n setTimeout(doQuery, 0);\n return subscription;\n });\n observable.hasValue = () => hasValue;\n observable.getValue = () => currentValue;\n return observable;\n}\n","import { Dexie as _Dexie } from './dexie';\nimport { _global } from '../../globals/global';\nimport { props, derive, extend, override, getByKeyPath, setByKeyPath, delByKeyPath, shallowClone, deepClone, asap } from '../../functions/utils';\nimport { getObjectDiff } from \"../../functions/get-object-diff\";\nimport { fullNameExceptions } from '../../errors';\nimport { DexieConstructor } from '../../public/types/dexie-constructor';\nimport { getDatabaseNames } from '../../helpers/database-enumerator';\nimport { PSD } from '../../helpers/promise';\nimport { usePSD } from '../../helpers/promise';\nimport { newScope } from '../../helpers/promise';\nimport { rejection } from '../../helpers/promise';\nimport { awaitIterator } from '../../helpers/yield-support';\nimport Promise from '../../helpers/promise';\nimport * as Debug from '../../helpers/debug';\nimport { dexieStackFrameFilter, minKey, connections, DEXIE_VERSION } from '../../globals/constants';\nimport Events from '../../helpers/Events';\nimport { exceptions } from '../../errors';\nimport { errnames } from '../../errors';\nimport { getMaxKey } from '../../functions/quirks';\nimport { vip } from './vip';\nimport { globalEvents } from '../../globals/global-events';\nimport { liveQuery } from '../../live-query/live-query';\nimport { extendObservabilitySet } from '../../live-query/extend-observability-set';\nimport { domDeps } from './dexie-dom-dependencies';\nimport { cmp } from '../../functions/cmp';\nimport { cache } from '../../live-query/cache/cache';\n\n/* (Dexie) is an instance of DexieConstructor, as defined in public/types/dexie-constructor.d.ts\n* (new Dexie()) is an instance of Dexie, as defined in public/types/dexie.d.ts\n* \n* Why we're doing this?\n\n* Because we've choosen to define the public Dexie API using a DexieConstructor interface\n* rather than declaring a class. On that interface, all static props are defined.\n* In practice, class Dexie's constructor implements DexieConstructor and all member props\n* are defined in interface Dexie. We could say, it's a typescript limitation of not being\n* able to define a static interface that forces us to do the cast below.\n*/\nconst Dexie = _Dexie as any as DexieConstructor;\n\n//\n// Set all static methods and properties onto Dexie:\n// \nprops(Dexie, {\n\n // Dexie.BulkError = class BulkError {...};\n // Dexie.XXXError = class XXXError {...};\n ...fullNameExceptions,\n\n //\n // Static delete() method.\n //\n delete(databaseName: string) {\n const db = new Dexie(databaseName, {addons: []});\n return db.delete();\n },\n\n //\n // Static exists() method.\n //\n exists(name: string) {\n return new Dexie(name, { addons: [] }).open().then(db => {\n db.close();\n return true;\n }).catch('NoSuchDatabaseError', () => false);\n },\n\n //\n // Static method for retrieving a list of all existing databases at current host.\n //\n getDatabaseNames(cb) {\n try {\n return getDatabaseNames(Dexie.dependencies).then(cb);\n } catch {\n return rejection(new exceptions.MissingAPI());\n }\n },\n\n /** @deprecated */\n defineClass() {\n function Class(content) {\n extend(this, content);\n }\n return Class;\n },\n\n ignoreTransaction(scopeFunc) {\n // In case caller is within a transaction but needs to create a separate transaction.\n // Example of usage:\n //\n // Let's say we have a logger function in our app. Other application-logic should be unaware of the\n // logger function and not need to include the 'logentries' table in all transaction it performs.\n // The logging should always be done in a separate transaction and not be dependant on the current\n // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction.\n //\n // Dexie.ignoreTransaction(function() {\n // db.logentries.add(newLogEntry);\n // });\n //\n // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction\n // in current Promise-scope.\n //\n // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an\n // API for this because\n // 1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout().\n // 2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate().\n // 3) setImmediate() is not supported in the ES standard.\n // 4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough.\n return PSD.trans ?\n usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional.\n scopeFunc(); // No need to change scope because there is no ongoing transaction.\n },\n\n vip,\n\n async: function (generatorFn: Function) {\n return function () {\n try {\n var rv = awaitIterator(generatorFn.apply(this, arguments));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n };\n },\n\n spawn: function (generatorFn, args, thiz) {\n try {\n var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n if (!rv || typeof rv.then !== 'function')\n return Promise.resolve(rv);\n return rv;\n } catch (e) {\n return rejection(e);\n }\n },\n\n // Dexie.currentTransaction property\n currentTransaction: {\n get: () => PSD.trans || null\n },\n\n waitFor: function (promiseOrFunction, optionalTimeout) {\n // If a function is provided, invoke it and pass the returning value to Transaction.waitFor()\n const promise = Promise.resolve(\n typeof promiseOrFunction === 'function' ?\n Dexie.ignoreTransaction(promiseOrFunction) :\n promiseOrFunction)\n .timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required. \n\n // Run given promise on current transaction. If no current transaction, just return a Dexie promise based\n // on given value.\n return PSD.trans ?\n PSD.trans.waitFor(promise) :\n promise;\n },\n\n // Export our Promise implementation since it can be handy as a standalone Promise implementation\n Promise: Promise,\n\n // Dexie.debug proptery:\n // Dexie.debug = false\n // Dexie.debug = true\n // Dexie.debug = \"dexie\" - don't hide dexie's stack frames.\n debug: {\n get: () => Debug.debug,\n set: value => {\n Debug.setDebug(value, value === 'dexie' ? () => true : dexieStackFrameFilter);\n }\n },\n\n // Export our derive/extend/override methodology\n derive: derive, // Deprecate?\n extend: extend, // Deprecate?\n props: props,\n override: override, // Deprecate?\n // Export our Events() function - can be handy as a toolkit\n Events: Events,\n on: globalEvents,\n liveQuery,\n extendObservabilitySet,\n // Utilities\n getByKeyPath: getByKeyPath,\n setByKeyPath: setByKeyPath,\n delByKeyPath: delByKeyPath,\n shallowClone: shallowClone,\n deepClone: deepClone,\n getObjectDiff: getObjectDiff,\n cmp,\n asap: asap,\n //maxKey: new Dexie('',{addons:[]})._maxKey,\n minKey: minKey,\n // Addon registry\n addons: [],\n // Global DB connection list\n connections: connections,\n\n //MultiModifyError: exceptions.Modify, // Obsolete!\n errnames: errnames,\n\n // Export other static classes\n //IndexSpec: IndexSpec, Obsolete!\n //TableSchema: TableSchema, Obsolete!\n\n //\n // Dependencies\n //\n // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included.\n //\n // In node.js, however, these properties must be set \"manually\" before instansiating a new Dexie().\n // For node.js, you need to require indexeddb-js or similar and then set these deps.\n //\n dependencies: domDeps,\n cache,\n\n // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc.\n semVer: DEXIE_VERSION,\n version: DEXIE_VERSION.split('.')\n .map(n => parseInt(n))\n .reduce((p, c, i) => p + (c / Math.pow(10, i * 2))),\n\n // https://github.com/dfahlander/Dexie.js/issues/186\n // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return\n // x.default. Workaround: Set Dexie.default = Dexie.\n // default: Dexie, // Commented because solved in index-umd.ts instead.\n // Make it possible to import {Dexie} (non-default import)\n // Reason 1: May switch to that in future.\n // Reason 2: We declare it both default and named exported in d.ts to make it possible\n // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely\n // exporting the symbol, not just default exporting)\n // Dexie: Dexie // Commented because solved in index-umd.ts instead.\n});\n\nDexie.maxKey = getMaxKey(Dexie.dependencies.IDBKeyRange);\n","import { globalEvents, DEXIE_STORAGE_MUTATED_EVENT_NAME, STORAGE_MUTATED_DOM_EVENT_NAME } from '../globals/global-events';\nimport { ObservabilitySet } from \"../public/types/db-events\";\nimport { signalSubscribersNow } from './cache/signalSubscribers';\n\nif (typeof dispatchEvent !== 'undefined' && typeof addEventListener !== 'undefined') {\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, updatedParts => {\n if (!propagatingLocally) {\n let event: CustomEvent;\n event = new CustomEvent(STORAGE_MUTATED_DOM_EVENT_NAME, {\n detail: updatedParts\n });\n propagatingLocally = true;\n dispatchEvent(event);\n propagatingLocally = false;\n }\n });\n addEventListener(STORAGE_MUTATED_DOM_EVENT_NAME, ({detail}: CustomEvent) => {\n if (!propagatingLocally) {\n propagateLocally(detail);\n }\n });\n}\n\n/** Called from listeners to BroadcastChannel and DOM event to\n * propagate the event locally into dexie's storagemutated event\n * and invalidate cached queries.\n * \n * This function is only called when the event is not originating\n * from this same Dexie module - either from another redundant dexie import\n * or from a foreign tab or worker. That's why we need to invalidate\n * the cache when this happens.\n */\nexport function propagateLocally(updateParts: ObservabilitySet) {\n let wasMe = propagatingLocally;\n try {\n propagatingLocally = true;\n // Fire the \"storagemutated\" event.\n globalEvents.storagemutated.fire(updateParts);\n // Invalidate cached queries and signal subscribers to requery.\n signalSubscribersNow(updateParts, true);\n } finally {\n propagatingLocally = wasMe;\n }\n}\n\nexport let propagatingLocally = false;\n","import {\n globalEvents,\n STORAGE_MUTATED_DOM_EVENT_NAME,\n DEXIE_STORAGE_MUTATED_EVENT_NAME,\n} from '../globals/global-events';\nimport { propagateLocally, propagatingLocally } from './propagate-locally';\n\nexport let bc: BroadcastChannel;\n\nexport let createBC = ()=>{};\n\nif (typeof BroadcastChannel !== 'undefined') {\n createBC = () => {\n bc = new BroadcastChannel(STORAGE_MUTATED_DOM_EVENT_NAME);\n bc.onmessage = ev => ev.data && propagateLocally(ev.data);\n }\n createBC();\n\n /**\n * The Node.js BroadcastChannel will prevent the node process from exiting\n * if the BroadcastChannel is not closed.\n * Therefore we have to call unref() which allows the process to finish\n * properly even when the BroadcastChannel is never closed.\n * @link https://nodejs.org/api/worker_threads.html#broadcastchannelunref\n * @link https://github.com/dexie/Dexie.js/pull/1576\n */\n if (typeof (bc as any).unref === 'function') {\n (bc as any).unref();\n }\n \n //\n // Propagate local changes to remote tabs, windows and workers via BroadcastChannel\n //\n globalEvents(DEXIE_STORAGE_MUTATED_EVENT_NAME, (changedParts) => {\n if (!propagatingLocally) {\n bc.postMessage(changedParts);\n }\n });\n}\n","import { Dexie } from \"./classes/dexie\";\nimport { connections } from \"./globals/constants\";\nimport { debug } from \"./helpers/debug\";\nimport { RangeSet } from \"./helpers/rangeset\";\nimport { bc, createBC } from \"./live-query/enable-broadcast\";\nimport { propagateLocally } from \"./live-query/propagate-locally\";\n\n\nif (typeof addEventListener !== 'undefined') {\n addEventListener('pagehide', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pagehide');\n bc?.close();\n for (const db of connections) {\n db.close({disableAutoOpen: false});\n }\n }\n });\n addEventListener('pageshow', (event) => {\n if (!Dexie.disableBfCache && event.persisted) {\n if (debug) console.debug('Dexie: handling persisted pageshow');\n createBC();\n propagateLocally({all: new RangeSet(-Infinity, [[]])}); // Trigger all queries to requery\n }\n });\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function add(value: number | BigInt | Array) {\n return new PropModification({add: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function remove(value: number | BigInt | Array) {\n return new PropModification({remove: value});\n}\n","import { PropModification } from \"../../helpers/prop-modification\";\n\nexport function replacePrefix(a: string, b:string) {\n return new PropModification({replacePrefix: [a, b]});\n}\n","import { Dexie } from './classes/dexie';\nimport { DexieConstructor } from './public/types/dexie-constructor';\nimport { DexiePromise } from './helpers/promise';\nimport { mapError } from './errors';\nimport * as Debug from './helpers/debug';\nimport { dexieStackFrameFilter } from './globals/constants';\n\n// Generate all static properties such as Dexie.maxKey etc\n// (implement interface DexieConstructor):\nimport './classes/dexie/dexie-static-props';\nimport './live-query/enable-broadcast';\nimport './support-bfcache';\nimport { liveQuery } from './live-query/live-query';\nimport { Entity } from './classes/entity/Entity';\nimport { cmp } from './functions/cmp';\nimport { PropModification, PropModSymbol } from './helpers/prop-modification';\nimport { replacePrefix, add, remove } from './functions/propmods';\n\n\n// Set rejectionMapper of DexiePromise so that it generally tries to map\n// DOMErrors and DOMExceptions to a DexieError instance with same name but with\n// async stack support and with a prototypal inheritance from DexieError and Error.\n// of Map DOMErrors and DOMExceptions to corresponding Dexie errors.\nDexiePromise.rejectionMapper = mapError;\n\n// Let the async stack filter focus on app code and filter away frames from dexie.min.js:\nDebug.setDebug(Debug.debug, dexieStackFrameFilter);\n\nexport { RangeSet, mergeRanges, rangesOverlap } from \"./helpers/rangeset\";\nexport { Dexie, liveQuery }; // Comply with public/index.d.ts.\nexport { Entity };\nexport { cmp };\nexport { PropModSymbol, PropModification, replacePrefix, add, remove };\nexport default Dexie;\n"],"names":["asap","Promise","Dexie","safari14Workaround","_Dexie","Debug.debug","Debug.setDebug"],"mappings":"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"} \ No newline at end of file diff --git a/src/dexie/import-wrapper-prod.d.mts b/src/dexie/import-wrapper-prod.d.mts new file mode 100644 index 000000000..e6ab49a88 --- /dev/null +++ b/src/dexie/import-wrapper-prod.d.mts @@ -0,0 +1,2 @@ +export * from './dist/dexie.js'; +export { default } from './dist/dexie.js'; diff --git a/src/dexie/import-wrapper-prod.mjs b/src/dexie/import-wrapper-prod.mjs new file mode 100644 index 000000000..a6556c91a --- /dev/null +++ b/src/dexie/import-wrapper-prod.mjs @@ -0,0 +1,15 @@ +// Making the module version consumable via require - to prohibit +// multiple occurrancies of the same module in the same app +// (dual package hazard, https://nodejs.org/api/packages.html#dual-package-hazard) +import _Dexie from "./dist/dexie.min.js"; +const DexieSymbol = Symbol.for("Dexie"); +const Dexie = globalThis[DexieSymbol] || (globalThis[DexieSymbol] = _Dexie); +if (_Dexie.semVer !== Dexie.semVer) { + throw new Error(`Two different versions of Dexie loaded in the same app: ${_Dexie.semVer} and ${Dexie.semVer}`); +} +const { + liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp, Entity, + PropModSymbol, PropModification, replacePrefix, add, remove } = Dexie; +export { liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp, Dexie, Entity, + PropModSymbol, PropModification, replacePrefix, add, remove }; +export default Dexie; diff --git a/src/dexie/import-wrapper.d.mts b/src/dexie/import-wrapper.d.mts new file mode 100644 index 000000000..e6ab49a88 --- /dev/null +++ b/src/dexie/import-wrapper.d.mts @@ -0,0 +1,2 @@ +export * from './dist/dexie.js'; +export { default } from './dist/dexie.js'; diff --git a/src/dexie/import-wrapper.mjs b/src/dexie/import-wrapper.mjs new file mode 100644 index 000000000..c70c6b72a --- /dev/null +++ b/src/dexie/import-wrapper.mjs @@ -0,0 +1,14 @@ +// Making the module version consumable via require - to prohibit +// multiple occurrancies of the same module in the same app +// (dual package hazard, https://nodejs.org/api/packages.html#dual-package-hazard) +import _Dexie from "./dist/dexie.js"; +const DexieSymbol = Symbol.for("Dexie"); +const Dexie = globalThis[DexieSymbol] || (globalThis[DexieSymbol] = _Dexie); +if (_Dexie.semVer !== Dexie.semVer) { + throw new Error(`Two different versions of Dexie loaded in the same app: ${_Dexie.semVer} and ${Dexie.semVer}`); +} +const { liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp, Entity, + PropModSymbol, PropModification, replacePrefix, add, remove } = Dexie; +export { liveQuery, mergeRanges, rangesOverlap, RangeSet, cmp, Dexie, Entity, + PropModSymbol, PropModification, replacePrefix, add, remove }; +export default Dexie; diff --git a/src/dexie/package.json b/src/dexie/package.json new file mode 100644 index 000000000..16d81e844 --- /dev/null +++ b/src/dexie/package.json @@ -0,0 +1,145 @@ +{ + "name": "dexie", + "version": "4.0.7", + "description": "A Minimalistic Wrapper for IndexedDB", + "main": "dist/dexie.js", + "module": "dist/dexie.mjs", + "jsnext:main": "dist/dexie.mjs", + "exports": { + ".": { + "production": { + "module": "./import-wrapper-prod.mjs", + "import": "./import-wrapper-prod.mjs", + "require": "./dist/dexie.min.js", + "default": "./dist/dexie.min.js" + }, + "development": { + "module": "./import-wrapper.mjs", + "import": "./import-wrapper.mjs", + "require": "./dist/dexie.js", + "default": "./dist/dexie.js" + }, + "default": { + "module": "./import-wrapper.mjs", + "import": "./import-wrapper.mjs", + "require": "./dist/dexie.js", + "default": "./dist/dexie.js" + } + }, + "./package.json": "./package.json", + "./dist/dexie.mjs": "./dist/dexie.mjs" + }, + "typings": "dist/dexie.d.ts", + "jspm": { + "format": "cjs", + "ignore": [ + "src/" + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/dexie/Dexie.js.git" + }, + "keywords": [ + "indexeddb", + "browser", + "database" + ], + "author": "David Fahlander ", + "contributors": [ + "Christopher Hunt ", + "Nikolas Poniros ", + "Anders Ekdahl ", + "Yury Solovyov ", + "Martin Diphoorn " + ], + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/dexie/Dexie.js/issues" + }, + "just-build": { + "default": [ + "# Build all targets (es5, es6 and test) and minify the default es5 UMD module", + "just-build release test" + ], + "dexie": [ + "# Build dist/dexie.js, dist/dexie.mjs and dist/dexie.d.ts", + "cd src", + "tsc [--watch 'Watching for file changes']", + "tsc --target es2020 --outdir ../tools/tmp/modern/src/", + "rollup -c ../tools/build-configs/rollup.config.js", + "rollup -c ../tools/build-configs/rollup.umd.config.js", + "rollup -c ../tools/build-configs/rollup.modern.config.js", + "node ../tools/replaceVersionAndDate.js ../dist/dexie.js", + "node ../tools/replaceVersionAndDate.js ../dist/dexie.mjs", + "node ../tools/replaceVersionAndDate.js ../dist/modern/dexie.mjs", + "dts-bundle-generator --inline-declare-global --inline-declare-externals -o ../dist/dexie.d.ts public/index.d.ts", + "node ../tools/prepend.js ../dist/dexie.d.ts ../tools/build-configs/banner.txt", + "node ../tools/replaceVersionAndDate.js ../dist/dexie.d.ts" + ], + "release": [ + "# Build ES5 umd module as well as the es6 module.", + "just-build dexie", + "node tools/replaceVersionAndDate.js dist/dexie.d.ts", + "# Minify the default ES5 UMD module", + "cd dist", + "uglifyjs dexie.js -m -c negate_iife=0 -o dexie.min.js --source-map url=dexie.min.js.map", + "# Minify modern bundle", + "cd modern", + "terser --comments false --compress --mangle --module --source-map url=dexie.min.mjs.map -o dexie.min.mjs -- dexie.mjs" + ], + "dev": [ + "# Build ES5 module and the tests", + "just-build dexie test" + ], + "gzip": [ + "# Optionally gzip to find the size of the minified & gzipped version", + "gzip dist/dexie.min.js -k -f -9" + ], + "test": [ + "# Build the test suite.", + "cd test", + "tsc [--watch 'Watching for file changes']", + "rollup -c ../tools/build-configs/rollup.tests.config.js" + ] + }, + "homepage": "https://dexie.org", + "devDependencies": { + "@lambdatest/node-tunnel": "^4.0.7", + "cross-env": "^7.0.3", + "dts-bundle-generator": "^5.9.0", + "just-build": "^0.9.24", + "karma": "^6.1.1", + "karma-chrome-launcher": "^3.1.0", + "karma-firefox-launcher": "^2.1.0", + "karma-mocha-reporter": "^2.2.5", + "karma-qunit": "^4.1.1", + "karma-webdriver-launcher": "^1.0.8", + "qunit": "^2.10.0", + "qunitjs": "^1.23.1", + "rollup": "^2.40.0", + "rollup-plugin-cleanup": "^3.2.1", + "rollup-plugin-commonjs": "^10.1.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-sourcemaps": "^0.6.3", + "rxjs": "^6.6.6", + "safari-14-idb-fix": "^3.0.0", + "serve-static": "^1.14.1", + "sorted-json": "^0.2.6", + "terser": "^5.3.1", + "tslib": "^2.1.0", + "typescript": "^5.3.3", + "uglify-js": "^3.9.2" + }, + "scripts": { + "build": "just-build", + "watch": "just-build --watch", + "clean": "rm -rf tools/tmp && rm dist/*.js && rm dist/*.map && rm dist/*.ts && rm dist/*.mjs", + "test": "pnpm run build && pnpm run test:typings && pnpm run test:unit", + "test:unit": "karma start test/karma.conf.js --single-run", + "test:typings": "tsc -p test/typings-test/", + "test:debug": "karma start test/karma.conf.js --log-level debug", + "test:ltcloud": "cross-env LAMBDATEST=true pnpm run test:ltTunnel & sleep 10 && pnpm run test:unit; UNIT_STATUS=$?; kill $(cat tunnel.pid); exit $UNIT_STATUS", + "test:ltTunnel": "node test/lt-local" + } +} \ No newline at end of file diff --git a/src/firebase-messaging-sw.js b/src/firebase-messaging-sw.js index 78e97d626..df3a0a617 100644 --- a/src/firebase-messaging-sw.js +++ b/src/firebase-messaging-sw.js @@ -1,5 +1,6 @@ importScripts('https://www.gstatic.com/firebasejs/8.2.0/firebase-app.js'); importScripts('https://www.gstatic.com/firebasejs/8.2.0/firebase-messaging.js'); +importScripts('./assets/dexie/dist/dexie.js'); // Initialize the Firebase app in the service worker by passing the generated config var firebaseConfig = { @@ -28,7 +29,7 @@ messaging.onBackgroundMessage(function(payload) { /* self.registration.showNotification(notificationTitle, notificationOptions); */ -}); +}); self.addEventListener('install', function(event) { @@ -40,7 +41,7 @@ self.addEventListener('activate', function(event) { // console.log('Activated', event); }); -self.addEventListener('push', function(event) { +self.addEventListener('push', function(event) { var uid = "EXISTS_IN_CORE.JS"; var token = "ALSO_EXISTS_IN_CORE.JS"; @@ -49,13 +50,11 @@ self.addEventListener('push', function(event) { }); self.addEventListener('message', function(event){ - var data = JSON.parse(event.data); + // var data = JSON.parse(event.data); // console.log("SW Received Message:"); - // console.log(data); + console.log(event.data); - self.userID = data.uid; - self.userToken = data.token; }); @@ -70,4 +69,47 @@ self.addEventListener('message', function(event){ }); } }); -}); */ \ No newline at end of file +}); */ + + + + +// Define the schema using a plain object (similar to zod schema in TypeScript) +const tableSharedCalendarSchema = { + wxUserId: 'number', + wxFullName: 'string', + wxeMail: 'string', + role: 'string', + roleId: 'number', + shareType: 'number', + startDate: 'string', + endDate: 'string' +}; + +// Database declaration +const AgendaDataSource = new Dexie('AgendaDataSource'); + +// Define the database schema +AgendaDataSource.version(1).stores({ + shareCalendar: '++wxUserId, wxFullName, wxeMail, role, roleId, shareType, startDate, endDate' +}); + +// Define the table schema using Dexie.js' Table interface (optional) +const shareCalendarTable = AgendaDataSource.table('shareCalendar'); + +(async()=> { + console.log(await shareCalendarTable.toArray()) +})(); + + +// setInterval(()=>{ +// shareCalendarTable.add({ +// wxUserId: new Date().getTime(), +// wxFullName: "3-", +// wxeMail: "SessionStore.user.Email", +// role: "SessionStore.user.RoleDescription", +// roleId: "SessionStore.user.RoleID", +// shareType: 3, +// date: '', +// }) +// }, 1000) diff --git a/src/main.ts b/src/main.ts index 38ffdde7a..a09850b03 100644 --- a/src/main.ts +++ b/src/main.ts @@ -33,10 +33,20 @@ if (environment.production) { SentrySibling.init ); */ -if ('serviceWorker' in navigator && environment.production) { +if ('serviceWorker' in navigator) { navigator.serviceWorker.register('firebase-messaging-sw.js') .then(registration => { console.log('Service Worker registrado com sucesso:', registration); + + + // Send data to the service worker + if (registration.active) { + registration.active.postMessage({ type: 'INIT_WEBSOCKET', url: 'wss://example.com/socket' }); + } else { + navigator.serviceWorker.ready.then(registration => { + registration.active.postMessage({ type: 'INIT_WEBSOCKET', url: 'wss://example.com/socket' }); + }); + } }) .catch(error => { console.error('Erro ao registrar o Service Worker:', error); diff --git a/src/theme/variables.scss b/src/theme/variables.scss index 109255f4e..0d14da602 100644 --- a/src/theme/variables.scss +++ b/src/theme/variables.scss @@ -322,6 +322,22 @@ $app-theme: mat-light-theme( padding: 25px; background: rgba(51, 51, 51, 0.3); } + + +.event-recurrence-modal { + --height: 50%; + --border-radius: 10px; + padding: 25px; + background: rgba(51, 51, 51, 0.3); +} + +.event-recurrence-modal::part(content){ + top: unset !important; + position: absolute; + max-width: 310px; + max-height: 280px; +} + .modal, .newchat, .new-group, diff --git a/version/Pedido_de_evento 1.html b/version/Pedido_de_evento 1.html new file mode 100644 index 000000000..5985bf78e --- /dev/null +++ b/version/Pedido_de_evento 1.html @@ -0,0 +1,298 @@ +
    + + + + + + +
    + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + +
    + + + + + + +
    +

    +
    +

    +
    +
    +
    + + + + + + +
    + + + + + + + + + +
    + Logo +
    +

    Repblica de Angola

    +

    + Gabinete do Presidente da  + + + Repblica + + +

    +

    + Convite para reunio +

    +
    +
    +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    +
    +
    +
    +
    + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + +
    +
    +
    +

    + + Tipo de evento + +

    +

    + + EventType
    +
    +
    +

    +

    + + Data/Hora + +

    +

    + De  StartDate  a  EndDate        + +

    +

    + + Localizao + +

    +

      Location
    +

    + + Participantes + +

    +

    +

       Participants
    +

    + If
    +
    + + Assunto + +

    +

    +

      Subject
    +

    +
    + + + + + + +
    +
    +
    +

    + Mensagem +

    +

    Exmo. Sr. MDGPR,
    +
    Cordiais saudaes.
    +
    Recebeu um novo pedido de evento, no qual requer Vossa aprovao.
    +

    +
    + + + + + + +
    +
    +
    +

    + + +
    Importante +
    +
    + + +

    +

    + + Caso tenha recebido esta mensagem por engano, por favor informe por o e-mail: + + + + + + + + notificacoes@oapr.gov.ao + + +
    +

    +
    + + + + + + +
    +
    +
    +
    +
    +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    +

    + Gabinete Digital - Uma iniciativa do Presidente da Repblica +

    +
    +
    +
    +
    +
    +
    \ No newline at end of file diff --git a/version/event-da-semana.html b/version/event-da-semana.html new file mode 100644 index 000000000..a2b9423df --- /dev/null +++ b/version/event-da-semana.html @@ -0,0 +1,148 @@ + + + + + + + + +
    + +
    + Logo +

    República De Angola

    +

    Gabinete do Presidente da República

    +

    Convite para reunião

    +
    + +
    +
    +

    Agenda da semana

    + + + + + + + + + + + + + + + + + + + + + + + + + +
    + Localiizasção + + Data + + Assunto +
    Palácio Presidencial de15 de Julho de 2024 19:00Luanda
    Palácio Presidencial de15 de Julho de 2024 19:00Luanda
    Palácio Presidencial de15 de Julho de 2024 19:00Luanda
    +
    + + +
    +
    +
    +

    Importante

    + Caso tenha recebido esta mensagem por engano, por favor informe por o e-mail: + notificacoes@oapr.gov.ao +
    +
    + + +
    +
    +

       Gabinete Digital - Uma iniciativa do Presidente da República

    +
    + diff --git a/version/evento-revisao.html b/version/evento-revisao.html new file mode 100644 index 000000000..6a12cd754 --- /dev/null +++ b/version/evento-revisao.html @@ -0,0 +1,151 @@ + + + + + + + + +
    + +
    + Logo +

    República De Angola

    +

    Gabinete do Presidente da República

    +

    Convite para reunião

    +
    + +
    +
    +
    +

    Tipo de evento

    + Event Type +
    + +
    +

    Data/Hora

    + 15 de Julho de 2024 19:00 +
    + +
    +

    Location

    + Luanda +
    + +
    +

    Participantes

    + Kelson Guilherme +
    + +
    +

    Assunto

    + Teste +
    +
    + +
    + +
    +
    +

    Mensagem

    + Teste +
    +
    +
    + +
    +
    +

    Importante

    + Caso tenha recebido esta mensagem por engano, por favor informe por o e-mail: + notificacoes@oapr.gov.ao +
    +
    + +
    +
    +

       Gabinete Digital - Uma iniciativa do Presidente da República

    +
    + + + diff --git a/version/git-version.ts b/version/git-version.ts index 1b429eeba..4dfb3e104 100644 --- a/version/git-version.ts +++ b/version/git-version.ts @@ -1,11 +1,11 @@ export let versionData = { - "shortSHA": "2cc90867d", - "SHA": "2cc90867d8b621ff1848fb334211ab4bf2a791b1", + "shortSHA": "f0402a1e5", + "SHA": "f0402a1e5b47345d3eb2b7d880b967328711d287", "branch": "feature/agenda-api-peter", "lastCommitAuthor": "'Peter Maquiran'", - "lastCommitTime": "'Fri Jun 28 10:27:13 2024 +0100'", - "lastCommitMessage": "click area", - "lastCommitNumber": "5854", - "changeStatus": "On branch feature/agenda-api-peter\nYour branch is ahead of 'origin/feature/agenda-api-peter' by 1 commit.\n (use \"git push\" to publish your local commits)\n\nChanges to be committed:\n (use \"git restore --staged ...\" to unstage)\n\tmodified: src/app/modals/profile/profile.page.html\n\tmodified: src/app/module/notification/data/infra/db/notification.db.ts\n\tmodified: src/app/module/notification/domain/mapper/notificationListMapper.ts\n\tmodified: src/app/pages/agenda/edit-event/edit-event.page.ts\n\tmodified: src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts\n\tmodified: src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts\n\tmodified: src/app/shared/agenda/edit-event/edit-event.page.html\n\tmodified: src/app/shared/agenda/edit-event/edit-event.page.ts\n\tmodified: version/git-version.ts", + "lastCommitTime": "'Fri Jun 28 12:12:33 2024 +0100'", + "lastCommitMessage": "notification click, calendar input", + "lastCommitNumber": "5855", + "changeStatus": "On branch feature/agenda-api-peter\nYour branch is ahead of 'origin/feature/agenda-api-peter' by 2 commits.\n (use \"git push\" to publish your local commits)\n\nChanges to be committed:\n (use \"git restore --staged ...\" to unstage)\n\tmodified: package-lock.json\n\tmodified: package.json\n\tmodified: src/app/app-routing.module.ts\n\tmodified: src/app/app.module.ts\n\tnew file: src/app/modals/event-recurrence/event-recurrence-routing.module.ts\n\tnew file: src/app/modals/event-recurrence/event-recurrence.module.ts\n\tnew file: src/app/modals/event-recurrence/event-recurrence.page.html\n\tnew file: src/app/modals/event-recurrence/event-recurrence.page.scss\n\tnew file: src/app/modals/event-recurrence/event-recurrence.page.spec.ts\n\tnew file: src/app/modals/event-recurrence/event-recurrence.page.ts\n\tmodified: src/app/pages/agenda/edit-event/edit-event.page.html\n\tmodified: src/app/pages/agenda/edit-event/edit-event.page.ts\n\tmodified: src/app/pages/agenda/event-actions-popover/event-actions-popover.page.ts\n\tmodified: src/app/pages/agenda/view-event/view-event.page.ts\n\tmodified: src/app/pages/chat/group-messages/group-messages.page.ts\n\tmodified: src/app/pages/events/events.page.ts\n\tmodified: src/app/pages/gabinete-digital/event-list/approve-event/approve-event.page.ts\n\tmodified: src/app/services/Repositorys/Agenda/agenda-data-repository.service.ts\n\tmodified: src/app/services/Repositorys/Agenda/agenda-local-data-source.service.ts\n\tmodified: src/app/services/agenda/list-box.service.ts\n\tmodified: src/app/shared/agenda/approve-event/approve-event.page.ts\n\tmodified: src/app/shared/agenda/edit-event-to-approve/edit-event-to-approve.page.ts\n\tmodified: src/app/shared/agenda/edit-event/edit-event.page.html\n\tmodified: src/app/shared/agenda/edit-event/edit-event.page.scss\n\tmodified: src/app/shared/agenda/edit-event/edit-event.page.ts\n\tmodified: src/app/shared/chat/group-messages/group-messages.page.ts\n\tmodified: src/app/shared/chat/messages/messages.page.ts\n\tmodified: src/app/shared/gabinete-digital/edit-event-to-approve/edit-event.page.ts\n\tnew file: src/assets/dexie/CODE_OF_CONDUCT.md\n\tnew file: src/assets/dexie/CONTRIBUTING.md\n\tnew file: src/assets/dexie/LICENSE\n\tnew file: src/assets/dexie/NOTICE\n\tnew file: src/assets/dexie/README.md\n\tnew file: src/assets/dexie/SECURITY.md\n\tnew file: src/assets/dexie/dist/dexie.d.ts\n\tnew file: src/assets/dexie/dist/dexie.js\n\tnew file: src/assets/dexie/dist/dexie.js.map\n\tnew file: src/assets/dexie/dist/dexie.min.js\n\tnew file: src/assets/dexie/dist/dexie.min.js.map\n\tnew file: src/assets/dexie/dist/dexie.mjs\n\tnew file: src/assets/dexie/dist/dexie.mjs.map\n\tnew file: src/assets/dexie/dist/modern/dexie.min.mjs\n\tnew file: src/assets/dexie/dist/modern/dexie.min.mjs.map\n\tnew file: src/assets/dexie/dist/modern/dexie.mjs\n\tnew file: src/assets/dexie/dist/modern/dexie.mjs.map\n\tnew file: src/assets/dexie/import-wrapper-prod.d.mts\n\tnew file: src/assets/dexie/import-wrapper-prod.mjs\n\tnew file: src/assets/dexie/import-wrapper.d.mts\n\tnew file: src/assets/dexie/import-wrapper.mjs\n\tnew file: src/assets/dexie/package.json\n\tdeleted: src/assets/icon/chat/Untitled.svg\n\tdeleted: src/assets/images/Gabinete Digital_files/2.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/all.min.css\n\tdeleted: src/assets/images/Gabinete Digital_files/common.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/css2\n\tdeleted: src/assets/images/Gabinete Digital_files/default_home-home-module_pages-chat-chat-module_pages-login-login-module.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/event-list-event-list-module.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/focus-visible-15ada7f7-js.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/home-home-module.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/index-index-module.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/keyboard-dd970efc-js.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/main.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/pages-gabinete-digital-gabinete-digital-module.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/pages-login-login-module.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/polyfills.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/runtime.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/saved_resource.html\n\tdeleted: src/assets/images/Gabinete Digital_files/styles.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/swipe-back-0a6a44c8-js.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/tap-click-252af35a-js.js.download\n\tdeleted: src/assets/images/Gabinete Digital_files/vendor.js.download\n\tdeleted: src/assets/tinyMCE/editor.html\n\tdeleted: src/assets/tinyMCE/plugins/accordion/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/advlist/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/anchor/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/autolink/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/autoresize/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/autosave/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/charmap/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/code/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/codesample/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/directionality/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/emoticons/js/emojiimages.js\n\tdeleted: src/assets/tinyMCE/plugins/emoticons/js/emojiimages.min.js\n\tdeleted: src/assets/tinyMCE/plugins/emoticons/js/emojis.js\n\tdeleted: src/assets/tinyMCE/plugins/emoticons/js/emojis.min.js\n\tdeleted: src/assets/tinyMCE/plugins/emoticons/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/fullscreen/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/ar.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/bg_BG.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/ca.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/cs.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/da.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/de.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/el.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/en.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/es.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/eu.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/fa.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/fi.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/fr_FR.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/he_IL.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/hi.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/hr.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/hu_HU.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/id.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/it.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/ja.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/kk.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/ko_KR.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/ms.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/nb_NO.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/nl.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/pl.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/pt_BR.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/pt_PT.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/ro.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/ru.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/sk.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/sl_SI.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/sv_SE.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/th_TH.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/tr.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/uk.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/vi.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/zh_CN.js\n\tdeleted: src/assets/tinyMCE/plugins/help/js/i18n/keynav/zh_TW.js\n\tdeleted: src/assets/tinyMCE/plugins/help/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/image/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/importcss/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/insertdatetime/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/link/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/lists/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/media/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/nonbreaking/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/pagebreak/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/preview/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/quickbars/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/save/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/searchreplace/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/table/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/template/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/visualblocks/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/visualchars/plugin.min.js\n\tdeleted: src/assets/tinyMCE/plugins/wordcount/plugin.min.js\n\tdeleted: src/assets/tinyMCE/skins/content/dark/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/content/default/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/content/document/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/content/tinymce-5-dark/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/content/tinymce-5/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/content/writer/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/oxide-dark/content.inline.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/oxide-dark/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/oxide-dark/skin.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/oxide-dark/skin.shadowdom.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/oxide/content.inline.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/oxide/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/oxide/skin.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/oxide/skin.shadowdom.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/tinymce-5-dark/content.inline.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/tinymce-5-dark/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/tinymce-5-dark/skin.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/tinymce-5-dark/skin.shadowdom.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/tinymce-5/content.inline.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/tinymce-5/content.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/tinymce-5/skin.min.css\n\tdeleted: src/assets/tinyMCE/skins/ui/tinymce-5/skin.shadowdom.min.css\n\tdeleted: src/assets/tinyMCE/tinymce.min.js\n\tnew file: src/dexie/CODE_OF_CONDUCT.md\n\tnew file: src/dexie/CONTRIBUTING.md\n\tnew file: src/dexie/LICENSE\n\tnew file: src/dexie/NOTICE\n\tnew file: src/dexie/README.md\n\tnew file: src/dexie/SECURITY.md\n\tnew file: src/dexie/dist/dexie.d.ts\n\tnew file: src/dexie/dist/dexie.js\n\tnew file: src/dexie/dist/dexie.js.map\n\tnew file: src/dexie/dist/dexie.min.js\n\tnew file: src/dexie/dist/dexie.min.js.map\n\tnew file: src/dexie/dist/dexie.mjs\n\tnew file: src/dexie/dist/dexie.mjs.map\n\tnew file: src/dexie/dist/modern/dexie.min.mjs\n\tnew file: src/dexie/dist/modern/dexie.min.mjs.map\n\tnew file: src/dexie/dist/modern/dexie.mjs\n\tnew file: src/dexie/dist/modern/dexie.mjs.map\n\tnew file: src/dexie/import-wrapper-prod.d.mts\n\tnew file: src/dexie/import-wrapper-prod.mjs\n\tnew file: src/dexie/import-wrapper.d.mts\n\tnew file: src/dexie/import-wrapper.mjs\n\tnew file: src/dexie/package.json\n\tmodified: src/firebase-messaging-sw.js\n\tmodified: src/main.ts\n\tmodified: src/theme/variables.scss\n\tnew file: version/Pedido_de_evento 1.html\n\tnew file: version/event-da-semana.html\n\tnew file: version/evento-revisao.html\n\tnew file: \"version/notifica\\303\\247\\303\\243o 1.html\"\n\tnew file: \"version/notifica\\303\\247\\303\\243o eventCommunicate 1.html\"", "changeAuthor": "peter.maquiran" } \ No newline at end of file diff --git a/version/notificação 1.html b/version/notificação 1.html new file mode 100644 index 000000000..06acfa3f1 --- /dev/null +++ b/version/notificação 1.html @@ -0,0 +1,308 @@ +
    + + + + + + +
    + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + +
    + + + + + + +
    +

    +
    +

    +
    +
    +
    + + + + + + +
    + + + + + + + + + +
    + Logo +
    +

    Repblica de Angola

    +

    + Gabinete do Presidente da  + + + Repblica + + +

    + Convite para reunio +

    +
    +
    +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    +
    +
    +
    +
    + + + + + + +
    + + + + + + + + + + + + + + +
    + + + +
    +
    + + + + + + + +
    + + + + + + +
    +
    +
    +

    + + Endereo de e-mail do convidado + +

    +

    + + + +

    + + Data/Hora + +

    +

    + +   + +

    +

    + + Localizao + +

    +

    +

    +

    +

    +

    +

    +

    +

    + + Assunto + +

    +

    +

    +

    + +
    +

    +
    + +
    +

    +
    +
    + + + + + + +
    +
    +
    +

    + Mensagem +

    +

    +
    + + + + + + +
    +
    +
    +

    + + + + + + + + +
    +

    Tomei Conhecimento

    +
    +
    Importante +
    +
    + + +

    +

    + + Caso tenha recebido esta mensagem por engano, por favor informe por o e-mail: + + + + + + + + notificacoes@oapr.gov.ao + + +
    +

    +
    + + + + + + +
    +
    +
    +
    +
    +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    +

    + Gabinete Digital - Uma iniciativa do Presidente da Repblica +

    +
    +
    +
    +
    +
    +
    + diff --git a/version/notificação eventCommunicate 1.html b/version/notificação eventCommunicate 1.html new file mode 100644 index 000000000..7893c7447 --- /dev/null +++ b/version/notificação eventCommunicate 1.html @@ -0,0 +1,308 @@ +
    + + + + + + +
    + + + + + + +
    + + + + + + + + + + + + + + + +
    + + + + + + +
    + + + + + + +
    +

    +
    +

    +
    +
    +
    + + + + + + +
    + + + + + + + + + +
    + Logo +
    +

    Rep�blica de Angola

    +

    + Gabinete do Presidente da  + + + Rep�blica + + +

    + Convite para reuni�o +

    +
    +
    +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    +
    +
    +
    +
    + + + + + + +
    + + + + + + + + + + + + + + +
    + + + +
    +
    + + + + + + + +
    + + + + + + +
    +
    +
    +

    + + Endere�o de e-mail do convidado + +

    +

    + + + +

    + + Data/Hora + +

    +

    + +   + +

    +

    + + Localiza��o + +

    +

    +

    +

    +

    +

    +

    +

    +

    + + Assunto + +

    +

    +

    +

    + +
    +

    +
    + +
    +

    +
    +
    + + + + + + +
    +
    +
    +

    + Mensagem +

    +

    +
    + + + + + + +
    +
    +
    +

    + + + + + + + + +
    +

    Tomei Conhecimento

    +
    +
    Importante +
    +
    + + +

    +

    + + Caso tenha recebido esta mensagem por engano, por favor informe por o e-mail: + + + + + + + + notificacoes@oapr.gov.ao + + +
    +

    +
    + + + + + + +
    +
    +
    +
    +
    +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    + + + + + + +
    +

    + Gabinete Digital - Uma iniciativa do Presidente da Rep�blica +

    +
    +
    +
    +
    +
    +
    +