gitextract_2syan8s_/ ├── .github/ │ ├── FUNDING.yml │ └── workflows/ │ ├── dexie-cloud-common.yml │ └── main.yml ├── .gitignore ├── .npmignore ├── .npmrc ├── .prettierrc ├── .prettierrc.yml ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── LICENSE ├── NOTICE ├── README.md ├── SECURITY.md ├── addons/ │ ├── Dexie.Observable/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── api.d.ts │ │ ├── api.js │ │ ├── dist/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── .eslintrc.json │ │ │ ├── Dexie.Observable.d.ts │ │ │ ├── Dexie.Observable.js │ │ │ ├── change_types.js │ │ │ ├── delete-old-changes.js │ │ │ ├── hooks/ │ │ │ │ ├── creating.js │ │ │ │ ├── crud-monitor.js │ │ │ │ ├── deleting.js │ │ │ │ └── updating.js │ │ │ ├── intercomm.js │ │ │ ├── on-storage.js │ │ │ ├── override-create-transaction.js │ │ │ ├── override-open.js │ │ │ ├── override-parse-stores-spec.js │ │ │ ├── utils.js │ │ │ └── wakeup-observers.js │ │ ├── test/ │ │ │ ├── gh-actions.sh │ │ │ ├── integration/ │ │ │ │ ├── karma-env.js │ │ │ │ ├── karma.conf.js │ │ │ │ └── test-observable-dexie-tests.html │ │ │ ├── typings/ │ │ │ │ ├── test-typings.ts │ │ │ │ └── tsconfig.json │ │ │ └── unit/ │ │ │ ├── .eslintrc.json │ │ │ ├── .gitignore │ │ │ ├── deep-equal.js │ │ │ ├── hooks/ │ │ │ │ ├── tests-creating.js │ │ │ │ ├── tests-deleting.js │ │ │ │ └── tests-updating.js │ │ │ ├── karma.conf.js │ │ │ ├── run-unit-tests.html │ │ │ ├── tests-observable-misc.js │ │ │ ├── tests-override-open.js │ │ │ ├── tests-override-parse-stores-spec.js │ │ │ └── unit-tests-all.js │ │ └── tools/ │ │ ├── build-configs/ │ │ │ ├── banner.txt │ │ │ ├── rollup.config.mjs │ │ │ ├── rollup.tests.config.js │ │ │ ├── rollup.tests.config.mjs │ │ │ ├── rollup.tests.unit.config.js │ │ │ └── rollup.tests.unit.config.mjs │ │ └── replaceVersionAndDate.js │ ├── Dexie.Syncable/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── api.d.ts │ │ ├── api.js │ │ ├── dist/ │ │ │ └── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── .eslintrc.json │ │ │ ├── Dexie.Syncable.d.ts │ │ │ ├── Dexie.Syncable.js │ │ │ ├── PersistedContext.js │ │ │ ├── apply-changes.js │ │ │ ├── bulk-update.js │ │ │ ├── change_types.js │ │ │ ├── combine-create-and-update.js │ │ │ ├── combine-update-and-update.js │ │ │ ├── connect-fn.js │ │ │ ├── connect-protocol.js │ │ │ ├── enqueue.js │ │ │ ├── finally-commit-all-changes.js │ │ │ ├── get-local-changes-for-node/ │ │ │ │ ├── get-base-revision-and-max-client-revision.js │ │ │ │ ├── get-changes-since-revision.js │ │ │ │ ├── get-local-changes-for-node.js │ │ │ │ └── get-table-objects-as-changes.js │ │ │ ├── get-or-create-sync-node.js │ │ │ ├── merge-change.js │ │ │ ├── save-to-uncommitted-changes.js │ │ │ ├── statuses.js │ │ │ └── syncable-connect.js │ │ ├── test/ │ │ │ ├── gh-actions.sh │ │ │ ├── integration/ │ │ │ │ ├── dummy-sync-protocol.js │ │ │ │ ├── karma-env.js │ │ │ │ ├── karma.conf.js │ │ │ │ └── test-syncable-dexie-tests.html │ │ │ ├── test-typings/ │ │ │ │ ├── test-typings.ts │ │ │ │ └── tsconfig.json │ │ │ └── unit/ │ │ │ ├── .eslintrc.json │ │ │ ├── .gitignore │ │ │ ├── get-local-changes-for-node/ │ │ │ │ ├── tests-get-base-revision-and-max-client-revision.js │ │ │ │ ├── tests-get-changes-since-revision.js │ │ │ │ └── tests-get-local-changes-for-node.js │ │ │ ├── karma-env.js │ │ │ ├── karma.conf.js │ │ │ ├── run-unit-tests.html │ │ │ ├── tests-PersistedContext.js │ │ │ ├── tests-WebSocketSyncServer.js │ │ │ ├── tests-apply-changes.js │ │ │ ├── tests-bulk-update.js │ │ │ ├── tests-changing-options.js │ │ │ ├── tests-combine-create-and-update.js │ │ │ ├── tests-combine-update-and-update.js │ │ │ ├── tests-finally-commit-all-changes.js │ │ │ ├── tests-get-or-create-sync-node.js │ │ │ ├── tests-merge-change.js │ │ │ ├── tests-register-sync-protocol.js │ │ │ ├── tests-save-to-uncommitted-changes.js │ │ │ ├── tests-syncable-partials.js │ │ │ ├── tests-syncable.js │ │ │ ├── tests-syncprovider.js │ │ │ └── unit-tests-all.js │ │ └── tools/ │ │ ├── build-configs/ │ │ │ ├── banner.txt │ │ │ ├── rollup.config.mjs │ │ │ ├── rollup.tests.config.js │ │ │ └── rollup.tests.config.mjs │ │ └── replaceVersionAndDate.js │ ├── dexie-cloud/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── .vscode/ │ │ │ └── settings.json │ │ ├── README.md │ │ ├── TODO-SOCIALAUTH.md │ │ ├── dexie-cloud-import.json │ │ ├── oauth_flow.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── DISABLE_SERVICEWORKER_STRATEGY.ts │ │ │ ├── DXCWebSocketStatus.ts │ │ │ ├── DexieCloudAPI.ts │ │ │ ├── DexieCloudOptions.ts │ │ │ ├── DexieCloudSyncOptions.ts │ │ │ ├── DexieCloudTable.ts │ │ │ ├── InvalidLicenseError.ts │ │ │ ├── Invite.ts │ │ │ ├── PermissionChecker.ts │ │ │ ├── TSON.ts │ │ │ ├── WSObservable.ts │ │ │ ├── associate.ts │ │ │ ├── authentication/ │ │ │ │ ├── AuthPersistedContext.ts │ │ │ │ ├── TokenErrorResponseError.ts │ │ │ │ ├── TokenExpiredError.ts │ │ │ │ ├── UNAUTHORIZED_USER.ts │ │ │ │ ├── authenticate.ts │ │ │ │ ├── currentUserObservable.ts │ │ │ │ ├── exchangeOAuthCode.ts │ │ │ │ ├── fetchAuthProviders.ts │ │ │ │ ├── handleOAuthCallback.ts │ │ │ │ ├── interactWithUser.ts │ │ │ │ ├── login.ts │ │ │ │ ├── logout.ts │ │ │ │ ├── oauthLogin.ts │ │ │ │ ├── otpFetchTokenCallback.ts │ │ │ │ ├── setCurrentUser.ts │ │ │ │ └── waitUntil.ts │ │ │ ├── computeSyncState.ts │ │ │ ├── createSharedValueObservable.ts │ │ │ ├── currentUserEmitter.ts │ │ │ ├── db/ │ │ │ │ ├── DexieCloudDB.ts │ │ │ │ └── entities/ │ │ │ │ ├── BaseRevisionMapEntry.ts │ │ │ │ ├── EntityCommon.ts │ │ │ │ ├── GuardedJob.ts │ │ │ │ ├── Member.ts │ │ │ │ ├── PersistedSyncState.ts │ │ │ │ ├── Realm.ts │ │ │ │ ├── Role.ts │ │ │ │ └── UserLogin.ts │ │ │ ├── default-ui/ │ │ │ │ ├── Dialog.tsx │ │ │ │ ├── LoginDialog.tsx │ │ │ │ ├── OptionButton.tsx │ │ │ │ ├── Styles.ts │ │ │ │ └── index.tsx │ │ │ ├── define-ydoc-trigger.ts │ │ │ ├── dexie-cloud-addon.ts │ │ │ ├── dexie-cloud-client.ts │ │ │ ├── errors/ │ │ │ │ ├── HttpError.ts │ │ │ │ ├── OAuthError.ts │ │ │ │ └── OAuthRedirectError.ts │ │ │ ├── extend-dexie-interface.ts │ │ │ ├── getGlobalRolesObservable.ts │ │ │ ├── getInternalAccessControlObservable.ts │ │ │ ├── getInvitesObservable.ts │ │ │ ├── getPermissionsLookupObservable.ts │ │ │ ├── getTiedRealmId.ts │ │ │ ├── helpers/ │ │ │ │ ├── BroadcastedAndLocalEvent.ts │ │ │ │ ├── CancelToken.ts │ │ │ │ ├── IS_SERVICE_WORKER.ts │ │ │ │ ├── SWBroadcastChannel.ts │ │ │ │ ├── allSettled.ts │ │ │ │ ├── bulkUpdate.ts │ │ │ │ ├── computeRealmSetHash.ts │ │ │ │ ├── date-constants.ts │ │ │ │ ├── flatten.ts │ │ │ │ ├── getMutationTable.ts │ │ │ │ ├── getSyncableTables.ts │ │ │ │ ├── getTableFromMutationTable.ts │ │ │ │ ├── makeArray.ts │ │ │ │ ├── randomString.ts │ │ │ │ ├── resolveText.ts │ │ │ │ ├── throwVersionIncrementNeeded.ts │ │ │ │ └── visibilityState.ts │ │ │ ├── isEagerSyncDisabled.ts │ │ │ ├── isFirefox.ts │ │ │ ├── isSafari.ts │ │ │ ├── mapValueObservable.ts │ │ │ ├── mergePermissions.ts │ │ │ ├── middleware-helpers/ │ │ │ │ ├── guardedTable.ts │ │ │ │ └── idGenerationHelpers.ts │ │ │ ├── middlewares/ │ │ │ │ ├── blobResolveMiddleware.ts │ │ │ │ ├── createIdGenerationMiddleware.ts │ │ │ │ ├── createImplicitPropSetterMiddleware.ts │ │ │ │ ├── createMutationTrackingMiddleware.ts │ │ │ │ └── outstandingTransaction.ts │ │ │ ├── overrideParseStoresSpec.ts │ │ │ ├── performInitialSync.ts │ │ │ ├── permissions.ts │ │ │ ├── prodLog.ts │ │ │ ├── service-worker.ts │ │ │ ├── sync/ │ │ │ │ ├── BLOB_TODO.md │ │ │ │ ├── BlobDownloadTracker.ts │ │ │ │ ├── BlobSavingQueue.ts │ │ │ │ ├── DEXIE_CLOUD_SYNCER_ID.ts │ │ │ │ ├── LocalSyncWorker.ts │ │ │ │ ├── SyncRequiredError.ts │ │ │ │ ├── applyServerChanges.ts │ │ │ │ ├── blobOffloading.test.ts │ │ │ │ ├── blobOffloading.ts │ │ │ │ ├── blobProgress.ts │ │ │ │ ├── blobResolve.ts │ │ │ │ ├── connectWebSocket.ts │ │ │ │ ├── eagerBlobDownloader.ts │ │ │ │ ├── encodeIdsForServer.ts │ │ │ │ ├── extractRealm.ts │ │ │ │ ├── getLatestRevisionsPerTable.ts │ │ │ │ ├── getTablesToSyncify.ts │ │ │ │ ├── isOnline.ts │ │ │ │ ├── isSyncNeeded.ts │ │ │ │ ├── listClientChanges.ts │ │ │ │ ├── listSyncifiedChanges.ts │ │ │ │ ├── loadCachedAccessToken.ts │ │ │ │ ├── messageConsumerIsReady.ts │ │ │ │ ├── messagesFromServerQueue.ts │ │ │ │ ├── modifyLocalObjectsWithNewUserId.ts │ │ │ │ ├── myId.ts │ │ │ │ ├── numUnsyncedMutations.ts │ │ │ │ ├── old_startSyncingClientChanges.ts │ │ │ │ ├── performGuardedJob.ts │ │ │ │ ├── ratelimit.ts │ │ │ │ ├── registerSyncEvent.ts │ │ │ │ ├── sync.ts │ │ │ │ ├── syncIfPossible.ts │ │ │ │ ├── syncWithServer.ts │ │ │ │ ├── triggerSync.ts │ │ │ │ └── updateBaseRevs.ts │ │ │ ├── tsconfig.json │ │ │ ├── types/ │ │ │ │ ├── DXCAlert.ts │ │ │ │ ├── DXCInputField.ts │ │ │ │ ├── DXCUserInteraction.ts │ │ │ │ ├── NewIdOptions.ts │ │ │ │ ├── SWMessageEvent.ts │ │ │ │ ├── SWSyncEvent.ts │ │ │ │ ├── SyncState.ts │ │ │ │ └── TXExpandos.ts │ │ │ ├── updateSchemaFromOptions.ts │ │ │ ├── userIsActive.ts │ │ │ ├── verifyConfig.ts │ │ │ ├── verifySchema.ts │ │ │ └── yjs/ │ │ │ ├── YDexieCloudSyncState.ts │ │ │ ├── YTable.ts │ │ │ ├── applyYMessages.ts │ │ │ ├── awareness.ts │ │ │ ├── createYClientUpdateObservable.ts │ │ │ ├── createYHandler.ts │ │ │ ├── downloadYDocsFromServer.ts │ │ │ ├── getUpdatesTable.ts │ │ │ ├── listUpdatesSince.ts │ │ │ ├── listYClientMessagesAndStateVector.ts │ │ │ ├── reopenDocSignal.ts │ │ │ └── updateYSyncStates.ts │ │ ├── test/ │ │ │ ├── promisedTest.ts │ │ │ ├── qunit.d.ts │ │ │ ├── tsconfig.json │ │ │ └── unit/ │ │ │ ├── index.ts │ │ │ ├── karma-env.js │ │ │ ├── karma.conf.cjs │ │ │ ├── run-unit-tests.html │ │ │ ├── test-dexie-cloud-client.ts │ │ │ ├── tests-github-issues.ts │ │ │ └── tests-migrate-to-cloud.ts │ │ └── tools/ │ │ ├── build-configs/ │ │ │ ├── banner.txt │ │ │ ├── rollup.config.mjs │ │ │ └── rollup.test.unit.config.js │ │ ├── release-dexie-cloud-addon.sh │ │ └── replaceVersionAndDate.cjs │ ├── dexie-export-import/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── dexie-export-import.ts │ │ │ ├── export.ts │ │ │ ├── helpers.ts │ │ │ ├── import.ts │ │ │ ├── index.ts │ │ │ ├── json-stream.ts │ │ │ ├── json-structure.ts │ │ │ ├── tsconfig.json │ │ │ ├── tson-arraybuffer.ts │ │ │ ├── tson-typed-array.ts │ │ │ └── tson.ts │ │ ├── test/ │ │ │ ├── .gitignore │ │ │ ├── basic-tests.ts │ │ │ ├── edge-cases.ts │ │ │ ├── gh-actions.sh │ │ │ ├── index.html │ │ │ ├── index.ts │ │ │ ├── karma.conf.js │ │ │ ├── qunit.d.ts │ │ │ ├── test-data.ts │ │ │ ├── tools.ts │ │ │ └── tsconfig.json │ │ └── tools/ │ │ └── build-configs/ │ │ ├── banner.txt │ │ ├── fake-stream.js │ │ ├── rollup.config.mjs │ │ └── rollup.tests.config.mjs │ └── y-dexie/ │ ├── .gitignore │ ├── .npmignore │ ├── README.md │ ├── package.json │ ├── src/ │ │ ├── DexieYProvider.ts │ │ ├── TODO.md │ │ ├── compressYDocs.ts │ │ ├── createYDocProperty.ts │ │ ├── createYjsMiddleware.ts │ │ ├── currentUpdateRow.ts │ │ ├── docCache.ts │ │ ├── getOrCreateDocument.ts │ │ ├── helpers/ │ │ │ ├── Disposable.ts │ │ │ ├── hasOwn.ts │ │ │ ├── nonStoppableEventChain.ts │ │ │ ├── nop.ts │ │ │ └── promisableChain.ts │ │ ├── observeYDocUpdates.ts │ │ ├── periodicGC.ts │ │ ├── tsconfig.json │ │ ├── types/ │ │ │ ├── DexieYDocMeta.ts │ │ │ ├── YDocCache.ts │ │ │ ├── YLastCompressed.ts │ │ │ ├── YSyncState.ts │ │ │ ├── YUpdateRow.ts │ │ │ └── index.ts │ │ └── y-dexie.ts │ ├── test/ │ │ ├── gh-actions.sh │ │ ├── promisedTest.ts │ │ ├── qunit.d.ts │ │ ├── tsconfig.json │ │ └── unit/ │ │ ├── dexie-unittest-utils.js │ │ ├── index.ts │ │ ├── karma-env.js │ │ ├── karma.conf.cjs │ │ ├── run-unit-tests.html │ │ ├── tests-dummy.ts │ │ └── tests-yjs.ts │ └── tools/ │ ├── build-configs/ │ │ ├── banner.txt │ │ ├── rollup.config.mjs │ │ └── rollup.test.unit.config.js │ ├── release-y-dexie.sh │ └── replaceVersionAndDate.cjs ├── dist/ │ └── README.md ├── import-wrapper-prod.d.mts ├── import-wrapper-prod.mjs ├── import-wrapper.d.mts ├── import-wrapper.mjs ├── libs/ │ ├── dexie-cloud-common/ │ │ ├── .gitignore │ │ ├── .npmignore │ │ ├── jest.config.js │ │ ├── package.json │ │ ├── src/ │ │ │ ├── AuthProvidersResponse.ts │ │ │ ├── AuthorizationCodeTokenRequest.ts │ │ │ ├── BaseRevisionMapEntry.ts │ │ │ ├── DBOperation.ts │ │ │ ├── DBOperationsSet.ts │ │ │ ├── DBPermissionSet.ts │ │ │ ├── DexieCloudSchema.ts │ │ │ ├── OAuthProviderInfo.ts │ │ │ ├── SyncChange.ts │ │ │ ├── SyncChangeSet.ts │ │ │ ├── SyncRequest.ts │ │ │ ├── SyncResponse.ts │ │ │ ├── async-generators/ │ │ │ │ ├── asyncIterablePipeline.ts │ │ │ │ ├── consumeChunkedBinaryStream.test.ts │ │ │ │ ├── consumeChunkedBinaryStream.ts │ │ │ │ ├── getFetchResponseBodyGenerator.ts │ │ │ │ └── produceChunkedBinaryStream.ts │ │ │ ├── change-processing/ │ │ │ │ ├── DBKeyMutation.ts │ │ │ │ ├── DBKeyMutationSet.ts │ │ │ │ ├── applyOperation.ts │ │ │ │ ├── applyOperations.ts │ │ │ │ ├── subtractChanges.ts │ │ │ │ ├── toDBOperationSet.ts │ │ │ │ └── toSyncChangeSet.ts │ │ │ ├── common/ │ │ │ │ ├── _global.ts │ │ │ │ ├── b64lex.ts │ │ │ │ ├── base64.ts │ │ │ │ └── bigint-conversion.ts │ │ │ ├── entities/ │ │ │ │ ├── DBRealm.ts │ │ │ │ ├── DBRealmMember.ts │ │ │ │ ├── DBRealmRole.ts │ │ │ │ └── DBSyncedObject.ts │ │ │ ├── getDbNameFromDbUrl.ts │ │ │ ├── index.ts │ │ │ ├── newId.ts │ │ │ ├── tson/ │ │ │ │ ├── FakeBlob.ts │ │ │ │ ├── FakeFile.ts │ │ │ │ ├── StreamingSyncProcessor.ts │ │ │ │ ├── TSONRef.ts │ │ │ │ ├── TypeDef.ts │ │ │ │ ├── TypeDefSet.ts │ │ │ │ ├── TypesonSimplified.ts │ │ │ │ ├── __tests__/ │ │ │ │ │ ├── TSONRef.test.ts │ │ │ │ │ ├── TypesonSimplified.test.ts │ │ │ │ │ ├── encoding.test.ts │ │ │ │ │ ├── newId.test.ts │ │ │ │ │ └── undefined.test.ts │ │ │ │ ├── index.ts │ │ │ │ ├── presets/ │ │ │ │ │ └── builtin.ts │ │ │ │ ├── readBlobSync.ts │ │ │ │ ├── readableStreamIterator.ts │ │ │ │ ├── string2ArrayBuffer.ts │ │ │ │ └── types/ │ │ │ │ ├── ArrayBuffer.ts │ │ │ │ ├── Blob.ts │ │ │ │ ├── BlobRef.ts │ │ │ │ ├── Date.ts │ │ │ │ ├── FakeBlob.ts │ │ │ │ ├── FakeFile.ts │ │ │ │ ├── File.ts │ │ │ │ ├── Map.ts │ │ │ │ ├── Set.ts │ │ │ │ ├── TypedArray.ts │ │ │ │ ├── bigint.ts │ │ │ │ ├── index.ts │ │ │ │ ├── number.ts │ │ │ │ └── undefined.ts │ │ │ ├── types.ts │ │ │ ├── typings/ │ │ │ │ └── TypedArray.ts │ │ │ ├── utils.ts │ │ │ ├── validation/ │ │ │ │ ├── isValidSyncableID.ts │ │ │ │ └── toStringTag.ts │ │ │ └── yjs/ │ │ │ ├── YMessage.ts │ │ │ ├── decoding.ts │ │ │ └── encoding.ts │ │ └── tsconfig.json │ ├── dexie-react-hooks/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── package.json │ │ ├── rollup.config.mjs │ │ ├── src/ │ │ │ ├── dexie-react-hooks.ts │ │ │ ├── index.ts │ │ │ ├── types/ │ │ │ │ ├── y-dexie.d.ts │ │ │ │ └── yjs.d.ts │ │ │ ├── useDocument.ts │ │ │ ├── useLiveQuery.ts │ │ │ ├── useObservable.ts │ │ │ ├── usePermissions.ts │ │ │ ├── usePromise.ts │ │ │ ├── useSuspendingLiveQuery.ts │ │ │ └── useSuspendingObservable.ts │ │ ├── test/ │ │ │ ├── components/ │ │ │ │ ├── App.tsx │ │ │ │ ├── ErrorBoundrary.tsx │ │ │ │ ├── ItemComponent.tsx │ │ │ │ ├── ItemListComponent.tsx │ │ │ │ └── ItemLoaderComponent.tsx │ │ │ ├── db/ │ │ │ │ └── index.ts │ │ │ ├── gh-actions.sh │ │ │ ├── index.html │ │ │ ├── index.ts │ │ │ ├── karma.conf.js │ │ │ ├── models/ │ │ │ │ └── Item.ts │ │ │ ├── tsconfig.json │ │ │ ├── utils/ │ │ │ │ ├── BinarySemaphore.ts │ │ │ │ ├── closest.ts │ │ │ │ ├── sleep.ts │ │ │ │ ├── timeout.ts │ │ │ │ ├── waitTilEqual.ts │ │ │ │ └── waitTilOk.ts │ │ │ └── webpack.config.js │ │ ├── tsconfig.json │ │ └── webpack.config.js │ └── dexie-svelte-query/ │ ├── .gitignore │ ├── .npmrc │ ├── README.md │ ├── package.json │ ├── src/ │ │ └── lib/ │ │ ├── index.ts │ │ └── stateQuery.svelte.ts │ └── tsconfig.json ├── package.json ├── pnpm-workspace.yaml ├── samples/ │ ├── angular/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── angular.json │ │ ├── package.json │ │ ├── src/ │ │ │ ├── app/ │ │ │ │ ├── app.component.ts │ │ │ │ ├── db.ts │ │ │ │ └── item-list.component.ts │ │ │ ├── index.html │ │ │ └── main.ts │ │ └── tsconfig.json │ ├── dexie-cloud-todo-app/ │ │ ├── .gitignore │ │ ├── README.md │ │ ├── components.json │ │ ├── configure-app.sh │ │ ├── index.html │ │ ├── package.json │ │ ├── postcss.config.js │ │ ├── public/ │ │ │ └── robots.txt │ │ ├── src/ │ │ │ ├── App.test.tsx │ │ │ ├── App.tsx │ │ │ ├── components/ │ │ │ │ ├── AddTodoItem.tsx │ │ │ │ ├── AddTodoList.tsx │ │ │ │ ├── ResetDatabaseButton.tsx │ │ │ │ ├── TodoItemView.tsx │ │ │ │ ├── TodoListView.tsx │ │ │ │ ├── TodoLists.tsx │ │ │ │ ├── access-control/ │ │ │ │ │ ├── EditMember.tsx │ │ │ │ │ ├── EditMemberAccess.tsx │ │ │ │ │ ├── Invites.tsx │ │ │ │ │ └── SharingForm.tsx │ │ │ │ ├── navbar/ │ │ │ │ │ ├── NavBar.tsx │ │ │ │ │ └── SyncStatusIcon.tsx │ │ │ │ └── ui/ │ │ │ │ ├── CheckedSign.tsx │ │ │ │ ├── button.tsx │ │ │ │ ├── card.tsx │ │ │ │ ├── checkbox.tsx │ │ │ │ ├── dropdown-menu.tsx │ │ │ │ └── input.tsx │ │ │ ├── data/ │ │ │ │ ├── demoUsers.json │ │ │ │ └── roles.json │ │ │ ├── db/ │ │ │ │ ├── TodoDB.ts │ │ │ │ ├── TodoItem.ts │ │ │ │ ├── TodoList.ts │ │ │ │ ├── db.ts │ │ │ │ ├── index.ts │ │ │ │ └── logout.ts │ │ │ ├── helpers/ │ │ │ │ ├── handleError.ts │ │ │ │ ├── simplify-debugging.ts │ │ │ │ └── usePersistedOpenState.ts │ │ │ ├── index.css │ │ │ ├── index.tsx │ │ │ ├── lib/ │ │ │ │ └── utils.ts │ │ │ ├── serviceWorkerRegistration.ts │ │ │ ├── setupTests.ts │ │ │ ├── sw.ts │ │ │ └── vite-env.d.ts │ │ ├── tailwind.config.js │ │ ├── tsconfig.json │ │ ├── tsconfig.node.json │ │ ├── vite.config.ts │ │ └── vitest.config.ts │ ├── full-text-search/ │ │ └── FullTextSearch.js │ ├── liveQuery/ │ │ └── liveQuery.html │ ├── open-existing-db/ │ │ └── dump-databases.html │ ├── react/ │ │ └── README.md │ ├── remote-sync/ │ │ ├── ajax/ │ │ │ ├── AjaxSyncProtocol.js │ │ │ └── jquery-2.1.0.js │ │ └── websocket/ │ │ ├── WebSocketSyncProtocol.js │ │ ├── WebSocketSyncServer.js │ │ └── websocketserver-shim.js │ ├── svelte/ │ │ └── README.md │ ├── vanilla-js/ │ │ ├── hello-world-modern.html │ │ └── hello-world.html │ └── vue/ │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── public/ │ │ └── index.html │ ├── src/ │ │ ├── App.vue │ │ ├── components/ │ │ │ ├── AddTodo.vue │ │ │ ├── Todo.vue │ │ │ └── TodoList.vue │ │ ├── database.js │ │ └── main.js │ └── vite.config.js ├── src/ │ ├── classes/ │ │ ├── collection/ │ │ │ ├── collection-constructor.ts │ │ │ ├── collection-helpers.ts │ │ │ ├── collection.ts │ │ │ └── index.ts │ │ ├── dexie/ │ │ │ ├── dexie-dom-dependencies.ts │ │ │ ├── dexie-open.ts │ │ │ ├── dexie-static-props.ts │ │ │ ├── dexie.ts │ │ │ ├── generate-middleware-stacks.ts │ │ │ ├── index.ts │ │ │ ├── transaction-helpers.ts │ │ │ └── vip.ts │ │ ├── entity/ │ │ │ └── Entity.ts │ │ ├── observable/ │ │ │ └── observable.ts │ │ ├── table/ │ │ │ ├── index.ts │ │ │ ├── table-constructor.ts │ │ │ ├── table-helpers.ts │ │ │ └── table.ts │ │ ├── transaction/ │ │ │ ├── index.ts │ │ │ ├── transaction-constructor.ts │ │ │ └── transaction.ts │ │ ├── version/ │ │ │ ├── schema-helpers.ts │ │ │ ├── version-constructor.ts │ │ │ └── version.ts │ │ └── where-clause/ │ │ ├── where-clause-constructor.ts │ │ ├── where-clause-helpers.ts │ │ └── where-clause.ts │ ├── dbcore/ │ │ ├── cache-existing-values-middleware.ts │ │ ├── dbcore-indexeddb.ts │ │ ├── get-effective-keys.ts │ │ ├── get-key-extractor.ts │ │ ├── keyrange.ts │ │ ├── proxy-cursor.ts │ │ └── virtual-index-middleware.ts │ ├── errors/ │ │ ├── errors.d.ts │ │ ├── errors.js │ │ └── index.ts │ ├── functions/ │ │ ├── apply-update-spec.ts │ │ ├── bulk-delete.ts │ │ ├── chaining-functions.js │ │ ├── cmp.ts │ │ ├── combine.ts │ │ ├── compare-functions.ts │ │ ├── event-wrappers.ts │ │ ├── get-object-diff.ts │ │ ├── is-promise-like.ts │ │ ├── make-class-constructor.ts │ │ ├── propmods/ │ │ │ ├── add.ts │ │ │ ├── index.ts │ │ │ ├── remove.ts │ │ │ └── replace-prefix.ts │ │ ├── quirks.ts │ │ ├── stringify-key.d.ts │ │ ├── stringify-key.js │ │ ├── temp-transaction.ts │ │ ├── utils.ts │ │ └── workaround-undefined-primkey.ts │ ├── globals/ │ │ ├── connections.ts │ │ ├── constants.ts │ │ ├── global-events.ts │ │ └── global.ts │ ├── helpers/ │ │ ├── Events.js │ │ ├── database-enumerator.ts │ │ ├── debug.ts │ │ ├── index-spec.ts │ │ ├── promise.d.ts │ │ ├── promise.js │ │ ├── prop-modification.ts │ │ ├── rangeset.ts │ │ ├── table-schema.ts │ │ ├── vipify.ts │ │ └── yield-support.ts │ ├── hooks/ │ │ └── hooks-middleware.ts │ ├── index-umd.ts │ ├── index.ts │ ├── live-query/ │ │ ├── cache/ │ │ │ ├── adjust-optimistic-request-from-failures.ts │ │ │ ├── apply-optimistic-ops.ts │ │ │ ├── are-ranges-equal.ts │ │ │ ├── cache-middleware.ts │ │ │ ├── cache.ts │ │ │ ├── does-ranges-overlap.ts │ │ │ ├── find-compatible-query.ts │ │ │ ├── is-cachable-context.ts │ │ │ ├── is-cachable-request.ts │ │ │ ├── is-super-range.ts │ │ │ ├── is-within-range.ts │ │ │ ├── signalSubscribers.ts │ │ │ └── subscribe-cachentry.ts │ │ ├── enable-broadcast.ts │ │ ├── extend-observability-set.ts │ │ ├── index.ts │ │ ├── live-query.ts │ │ ├── obs-sets-overlap.ts │ │ ├── observability-middleware.ts │ │ └── propagate-locally.ts │ ├── public/ │ │ ├── index.d.ts │ │ └── types/ │ │ ├── _insert-type.d.ts │ │ ├── cache.d.ts │ │ ├── collection.d.ts │ │ ├── db-events.d.ts │ │ ├── db-schema.d.ts │ │ ├── dbcore.d.ts │ │ ├── dbquerycore.d.ts │ │ ├── dexie-constructor.d.ts │ │ ├── dexie-dom-dependencies.d.ts │ │ ├── dexie-event-set.d.ts │ │ ├── dexie-event.d.ts │ │ ├── dexie.d.ts │ │ ├── entity-table.d.ts │ │ ├── entity.d.ts │ │ ├── errors.d.ts │ │ ├── global.d.ts │ │ ├── index-spec.d.ts │ │ ├── indexable-type.d.ts │ │ ├── insert-type.d.ts │ │ ├── is-strictly-any.d.ts │ │ ├── keypaths.d.ts │ │ ├── middleware.d.ts │ │ ├── observable.d.ts │ │ ├── promise-extended.d.ts │ │ ├── prop-modification.d.ts │ │ ├── rangeset.d.ts │ │ ├── table-hooks.d.ts │ │ ├── table-schema.d.ts │ │ ├── table.d.ts │ │ ├── then-shortcut.d.ts │ │ ├── transaction-events.d.ts │ │ ├── transaction-mode.d.ts │ │ ├── transaction.d.ts │ │ ├── update-spec.d.ts │ │ ├── version.d.ts │ │ └── where-clause.d.ts │ ├── support-bfcache.ts │ └── tsconfig.json ├── test/ │ ├── .eslintrc.json │ ├── .gitignore │ ├── data.json │ ├── deepEqual.js │ ├── dexie-unittest-utils.js │ ├── gh-actions.sh │ ├── integrations/ │ │ └── test-dexie-relationships/ │ │ ├── basic-tests.js │ │ ├── gh-actions.sh │ │ ├── index.js │ │ ├── karma.conf.js │ │ ├── package.json │ │ └── webpack.config.js │ ├── is-idb-and-promise-compatible.js │ ├── karma-env.js │ ├── karma.browsers.matrix.d.ts │ ├── karma.browsers.matrix.js │ ├── karma.common.d.ts │ ├── karma.common.js │ ├── karma.conf.js │ ├── karma.lambdatest.d.ts │ ├── karma.lambdatest.js │ ├── lt-local.js │ ├── rebalance.md │ ├── run-unit-tests.html │ ├── tests-all.js │ ├── tests-asyncawait.js │ ├── tests-binarykeys.js │ ├── tests-blobs.js │ ├── tests-chrome-transaction-durability.js │ ├── tests-cmp.js │ ├── tests-collection.js │ ├── tests-crud-hooks.js │ ├── tests-exception-handling.js │ ├── tests-extendability.js │ ├── tests-idb30.js │ ├── tests-live-query.js │ ├── tests-max-connections.js │ ├── tests-misc.js │ ├── tests-open.js │ ├── tests-performance.js │ ├── tests-promise.js │ ├── tests-rangeset.js │ ├── tests-table.js │ ├── tests-transaction.js │ ├── tests-upgrading.js │ ├── tests-whereclause.js │ ├── tests-yield.js │ ├── tsconfig.json │ ├── typings-test/ │ │ ├── test-extend-dexie.ts │ │ ├── test-misc.ts │ │ ├── test-typings.ts │ │ ├── test-updatespec.ts │ │ └── tsconfig.json │ └── worker.js ├── tools/ │ ├── .eslintrc.json │ ├── build-configs/ │ │ ├── banner.txt │ │ ├── rollup.config.js │ │ ├── rollup.config.mjs │ │ ├── rollup.modern.config.js │ │ ├── rollup.modern.config.mjs │ │ ├── rollup.tests.config.js │ │ ├── rollup.tests.config.mjs │ │ ├── rollup.umd.config.js │ │ └── rollup.umd.config.mjs │ ├── fix-dts-duplicates.js │ ├── prepend.js │ ├── release.sh │ └── replaceVersionAndDate.js └── tsconfig.json